X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fslapcommon.c;h=9f99363dc8aa0d39a4f98717d1a1ea83504106dd;hb=d168b49464df8a034e244c6610721155aa6b42ba;hp=f0fe956ad7d1e1ff6052a364cf60e559e4d9c025;hpb=e725c8488a3d3ee15aa6197d51d1beae059d0a54;p=openldap diff --git a/servers/slapd/slapcommon.c b/servers/slapd/slapcommon.c index f0fe956ad7..9f99363dc8 100644 --- a/servers/slapd/slapcommon.c +++ b/servers/slapd/slapcommon.c @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 1998-2005 The OpenLDAP Foundation. + * Copyright 1998-2006 The OpenLDAP Foundation. * Portions Copyright 1998-2003 Kurt D. Zeilenga. * Portions Copyright 2003 IBM Corporation. * All rights reserved. @@ -63,7 +63,7 @@ usage( int tool, const char *progname ) case SLAPADD: options = " [-c]\n\t[-g] [-n databasenumber | -b suffix]\n" - "\t[-l ldiffile] [-q] [-u] [-w]\n"; + "\t[-l ldiffile] [-q] [-u] [-s] [-w]\n"; break; case SLAPAUTH: @@ -133,16 +133,28 @@ parse_slapacl( void ) ber_str2bv( p, 0, 1, &sock_name ); } else if ( strncasecmp( optarg, "ssf", len ) == 0 ) { - ssf = atoi( p ); + if ( lutil_atou( &ssf, p ) ) { + Debug( LDAP_DEBUG_ANY, "unable to parse ssf=\"%s\".\n", p, 0, 0 ); + return -1; + } } else if ( strncasecmp( optarg, "transport_ssf", len ) == 0 ) { - transport_ssf = atoi( p ); + if ( lutil_atou( &transport_ssf, p ) ) { + Debug( LDAP_DEBUG_ANY, "unable to parse transport_ssf=\"%s\".\n", p, 0, 0 ); + return -1; + } } else if ( strncasecmp( optarg, "tls_ssf", len ) == 0 ) { - tls_ssf = atoi( p ); + if ( lutil_atou( &tls_ssf, p ) ) { + Debug( LDAP_DEBUG_ANY, "unable to parse tls_ssf=\"%s\".\n", p, 0, 0 ); + return -1; + } } else if ( strncasecmp( optarg, "sasl_ssf", len ) == 0 ) { - sasl_ssf = atoi( p ); + if ( lutil_atou( &sasl_ssf, p ) ) { + Debug( LDAP_DEBUG_ANY, "unable to parse sasl_ssf=\"%s\".\n", p, 0, 0 ); + return -1; + } } else if ( strncasecmp( optarg, "authzDN", len ) == 0 ) { ber_str2bv( p, 0, 1, &authzDN ); @@ -162,6 +174,8 @@ parse_slapacl( void ) * argc, argv command line arguments */ +static int need_shutdown; + void slap_tool_init( const char* progname, @@ -180,6 +194,12 @@ slap_tool_init( int truncatemode = 0; int use_glue = 1; +#ifdef LDAP_DEBUG + /* tools default to "none", so that at least LDAP_DEBUG_ANY + * messages show up; use -d 0 to reset */ + slap_debug = LDAP_DEBUG_NONE; +#endif + #ifdef CSRIMALLOC leakfilename = malloc( strlen( progname ) + STRLENOF( ".leak" ) + 1 ); sprintf( leakfilename, "%s.leak", progname ); @@ -191,7 +211,7 @@ slap_tool_init( switch( tool ) { case SLAPADD: - options = "b:cd:f:F:gl:n:qtuvw"; + options = "b:cd:f:F:gl:n:qstuvw"; break; case SLAPCAT: @@ -244,40 +264,26 @@ slap_tool_init( continuemode++; break; - case 'd': /* turn on debugging */ -#ifdef LDAP_DEBUG - if ( optarg != NULL && optarg[ 0 ] != '-' && !isdigit( optarg[ 0 ] ) ) - { - int level; - - if ( str2loglevel( optarg, &level ) ) { - fprintf( stderr, - "unrecognized log level " - "\"%s\"\n", optarg ); - exit( EXIT_FAILURE ); - } + case 'd': { /* turn on debugging */ + int level = 0; - ldap_debug |= level; + if ( parse_debug_level( optarg, &level ) ) { + usage( tool, progname ); + } +#ifdef LDAP_DEBUG + if ( level == 0 ) { + /* allow to reset log level */ + slap_debug = 0; } else { - int level; - char *next = NULL; - - level = strtol( optarg, &next, 0 ); - if ( next == NULL || next[ 0 ] != '\0' ) { - fprintf( stderr, - "unrecognized log level " - "\"%s\"\n", optarg ); - exit( EXIT_FAILURE ); - } - ldap_debug |= level; + slap_debug |= level; } #else - if ( atoi( optarg ) != 0 ) + if ( level != 0 ) fputs( "must compile with LDAP_DEBUG for debugging\n", stderr ); #endif - break; + } break; case 'D': ber_str2bv( optarg, 0, 1, &authcDN ); @@ -311,7 +317,9 @@ slap_tool_init( break; case 'n': /* which config file db to index */ - dbnum = atoi( optarg ); + if ( lutil_atoi( &dbnum, optarg ) ) { + usage( tool, progname ); + } break; case 'o': @@ -336,7 +344,10 @@ slap_tool_init( break; case 's': /* dump subtree */ - subtree = strdup( optarg ); + if ( tool == SLAPADD ) + mode |= SLAP_TOOL_NO_SCHEMA_CHECK; + else if ( tool == SLAPCAT ) + subtree = strdup( optarg ); break; case 't': /* turn on truncate */ @@ -616,27 +627,33 @@ startup:; } /* slapdn doesn't specify a backend to startup */ - if ( !dryrun && tool != SLAPDN && slap_startup( be ) ) { - switch ( tool ) { - case SLAPTEST: - fprintf( stderr, "slap_startup failed " - "(test would succeed using " - "the -u switch)\n" ); - break; + if ( !dryrun && tool != SLAPDN ) { + need_shutdown = 1; + + if ( slap_startup( be ) ) { + switch ( tool ) { + case SLAPTEST: + fprintf( stderr, "slap_startup failed " + "(test would succeed using " + "the -u switch)\n" ); + break; + + default: + fprintf( stderr, "slap_startup failed\n" ); + break; + } - default: - fprintf( stderr, "slap_startup failed\n" ); - break; + exit( EXIT_FAILURE ); } - - exit( EXIT_FAILURE ); } } void slap_tool_destroy( void ) { if ( !dryrun ) { - slap_shutdown( be ); + if ( need_shutdown ) { + slap_shutdown( be ); + } slap_destroy(); } #ifdef SLAPD_MODULES