]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/slapcommon.c
add in-scope helper
[openldap] / servers / slapd / slapcommon.c
index 12856633cd015e578e07abb51e80792679107d67..1cf60a4260f78be7c6d676f16e8cf94ad2f22c26 100644 (file)
@@ -80,7 +80,7 @@ usage( int tool, const char *progname )
 
        case SLAPCAT:
                options = " [-c]\n\t[-g] [-n databasenumber | -b suffix]"
-                       " [-l ldiffile] [-a filter]\n";
+                       " [-l ldiffile] [-a filter] [-s subtree]\n";
                break;
 
        case SLAPDN:
@@ -218,7 +218,7 @@ slap_tool_init(
        char *subtree = NULL;
        char *ldiffile  = NULL;
        char **debug_unknowns = NULL;
-       int rc, i, dbnum;
+       int rc, i;
        int mode = SLAP_TOOL_MODE;
        int truncatemode = 0;
        int use_glue = 1;
@@ -353,7 +353,7 @@ slap_tool_init(
                        break;
 
                case 'n':       /* which config file db to index */
-                       if ( lutil_atoi( &dbnum, optarg ) ) {
+                       if ( lutil_atoi( &dbnum, optarg ) || dbnum < 0 ) {
                                usage( tool, progname );
                        }
                        break;
@@ -649,6 +649,8 @@ slap_tool_init(
                        nosubordinates = 1;
                }
 
+               ch_free( base.bv_val );
+
        } else if ( dbnum == -1 ) {
                /* no suffix and no dbnum specified, just default to
                 * the first available database
@@ -689,12 +691,12 @@ slap_tool_init(
                                progname, dbnum, 0 );
                }
 
-       } else if ( dbnum < 0 || dbnum > (nbackends-1) ) {
+       } else if ( dbnum >= nbackends ) {
                fprintf( stderr,
                        "Database number selected via -n is out of range\n"
                        "Must be in the range 0 to %d"
-                       " (number of configured databases)\n",
-                       nbackends-1 );
+                       " (the number of configured databases)\n",
+                       nbackends - 1 );
                exit( EXIT_FAILURE );
 
        } else {
@@ -705,6 +707,15 @@ slap_tool_init(
        }
 
 startup:;
+       if ( be ) {
+               BackendDB *bdtmp;
+
+               dbnum = 0;
+               LDAP_STAILQ_FOREACH( bdtmp, &backendDB, be_next ) {
+                       if ( bdtmp == be ) break;
+                       dbnum++;
+               }
+       }
 
 #ifdef CSRIMALLOC
        mal_leaktrace(1);