]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/limits.c
update for new backend types
[openldap] / servers / slapd / limits.c
index 8cd968dff814c9029a2cc3fceb7016535e6f1d71..eaa60ecb8b64aa552f37865ea73962f6f5f2a6ac 100644 (file)
@@ -72,8 +72,8 @@ limits_get(
 {
        struct slap_limits **lm;
 
-       assert( op );
-       assert( limit );
+       assert( op != NULL );
+       assert( limit != NULL );
 
        Debug( LDAP_DEBUG_TRACE, "==> limits_get: %s dn=\"%s\"\n",
                        op->o_log_prefix,
@@ -238,8 +238,8 @@ limits_add(
        struct slap_limits      *lm;
        unsigned                type, style;
        
-       assert( be );
-       assert( limit );
+       assert( be != NULL );
+       assert( limit != NULL );
 
        type = flags & SLAP_LIMITS_TYPE_MASK;
        style = flags & SLAP_LIMITS_MASK;
@@ -304,8 +304,8 @@ limits_add(
 
        switch ( type ) {
        case SLAP_LIMITS_TYPE_GROUP:
-               assert( group_oc );
-               assert( group_ad );
+               assert( group_oc != NULL );
+               assert( group_ad != NULL );
                lm->lm_group_oc = group_oc;
                lm->lm_group_ad = group_ad;
                break;
@@ -342,7 +342,7 @@ limits_parse(
        ObjectClass             *group_oc = NULL;
        AttributeDescription    *group_ad = NULL;
 
-       assert( be );
+       assert( be != NULL );
 
        if ( argc < 3 ) {
                Debug( LDAP_DEBUG_ANY,
@@ -637,8 +637,8 @@ limits_parse_one(
        struct slap_limits_set  *limit
 )
 {
-       assert( arg );
-       assert( limit );
+       assert( arg != NULL );
+       assert( limit != NULL );
 
        if ( strncasecmp( arg, "time", STRLENOF( "time" ) ) == 0 ) {
                arg += STRLENOF( "time" );
@@ -901,9 +901,9 @@ limits_parse_one(
 }
 
 static const char *lmpats[] = {
-       "exact",
-       "exact",
-       "onelvel",
+       "base",
+       "base",
+       "onelevel",
        "subtree",
        "children",
        "regex",
@@ -929,6 +929,9 @@ limits_unparse( struct slap_limits *lim, struct berval *bv )
                ptr = lutil_strcopy( ptr, lim->lm_group_oc->soc_cname.bv_val );
                *ptr++ = '/';
                ptr = lutil_strcopy( ptr, lim->lm_group_ad->ad_cname.bv_val );
+               ptr = lutil_strcopy( ptr, "=\"" );
+               ptr = lutil_strcopy( ptr, lim->lm_pat.bv_val );
+               *ptr++ = '"';
        } else {
                lm = lim->lm_flags & SLAP_LIMITS_MASK;
                switch( lm ) {
@@ -973,24 +976,25 @@ limits_unparse_one( struct slap_limits_set *lim, int which, struct berval *bv )
        if ( which & SLAP_LIMIT_SIZE ) {
                if ( lim->lms_s_soft != SLAPD_DEFAULT_SIZELIMIT ) {
 
+                       /* If same as global limit, drop it */
+                       if ( lim != &frontendDB->be_def_limit &&
+                               lim->lms_s_soft == frontendDB->be_def_limit.lms_s_soft )
+                               goto s_hard;
                        /* If there's also a hard limit, fully qualify this one */
-                       if ( lim->lms_s_hard )
+                       else if ( lim->lms_s_hard )
                                ptr = lutil_strcopy( ptr, " size.soft=" );
 
                        /* If doing both size & time, qualify this */
                        else if ( which & SLAP_LIMIT_TIME )
                                ptr = lutil_strcopy( ptr, " size=" );
 
-                       /* Otherwise if same as global limit, drop it */
-                       else if ( lim != &frontendDB->be_def_limit &&
-                               lim->lms_s_soft == frontendDB->be_def_limit.lms_s_soft )
-                               return;
                        if ( lim->lms_s_soft == -1 )
                                ptr = lutil_strcopy( ptr, "unlimited" );
                        else
                                ptr += sprintf( ptr, "%d", lim->lms_s_soft );
                        *ptr++ = ' ';
                }
+s_hard:
                if ( lim->lms_s_hard ) {
                        ptr = lutil_strcopy( ptr, " size.hard=" );
                        if ( lim->lms_s_hard == -1 )
@@ -1032,25 +1036,26 @@ limits_unparse_one( struct slap_limits_set *lim, int which, struct berval *bv )
        if ( which & SLAP_LIMIT_TIME ) {
                if ( lim->lms_t_soft != SLAPD_DEFAULT_TIMELIMIT ) {
 
+                       /* If same as global limit, drop it */
+                       if ( lim != &frontendDB->be_def_limit &&
+                               lim->lms_t_soft == frontendDB->be_def_limit.lms_t_soft )
+                               goto t_hard;
+
                        /* If there's also a hard limit, fully qualify this one */
-                       if ( lim->lms_t_hard ) 
+                       else if ( lim->lms_t_hard ) 
                                ptr = lutil_strcopy( ptr, " time.soft=" );
 
                        /* If doing both size & time, qualify this */
                        else if ( which & SLAP_LIMIT_SIZE )
                                ptr = lutil_strcopy( ptr, " time=" );
 
-                       /* Otherwise, if same as global limit, drop it */
-                       else if ( lim != &frontendDB->be_def_limit &&
-                               lim->lms_t_soft == frontendDB->be_def_limit.lms_t_soft )
-                               return;
-
                        if ( lim->lms_t_soft == -1 )
                                ptr = lutil_strcopy( ptr, "unlimited" );
                        else
                                ptr += sprintf( ptr, "%d", lim->lms_t_soft );
                        *ptr++ = ' ';
                }
+t_hard:
                if ( lim->lms_t_hard ) {
                        ptr = lutil_strcopy( ptr, " time.hard=" );
                        if ( lim->lms_t_hard == -1 )
@@ -1070,8 +1075,8 @@ limits_unparse_one( struct slap_limits_set *lim, int which, struct berval *bv )
 int
 limits_check( Operation *op, SlapReply *rs )
 {
-       assert( op );
-       assert( rs );
+       assert( op != NULL );
+       assert( rs != NULL );
        /* FIXME: should this be always true? */
        assert( op->o_tag == LDAP_REQ_SEARCH);