X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fslapcommon.c;h=05f331a6f67eced51a68e51475e21d9027a56c26;hb=e3e7a22b5d7c6410ab54c31038fc153dadc8ca66;hp=bad640605a6485b68b45b4d3e26b2aae5653a0f0;hpb=3f4e196beb91b8e965746d6660d08daa6f0e172e;p=openldap diff --git a/servers/slapd/slapcommon.c b/servers/slapd/slapcommon.c index bad640605a..05f331a6f6 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-2006 The OpenLDAP Foundation. + * Copyright 1998-2009 The OpenLDAP Foundation. * Portions Copyright 1998-2003 Kurt D. Zeilenga. * Portions Copyright 2003 IBM Corporation. * All rights reserved. @@ -47,13 +47,13 @@ static FILE *leakfile; static LDIFFP dummy; -#ifdef LDAP_SYSLOG +#if defined(LDAP_SYSLOG) && defined(LDAP_DEBUG) int start_syslog; static char **syslog_unknowns; #ifdef LOG_LOCAL4 static int syslogUser = SLAP_DEFAULT_SYSLOG_USER; #endif /* LOG_LOCAL4 */ -#endif /* LDAP_SYSLOG */ +#endif /* LDAP_DEBUG && LDAP_SYSLOG */ static void usage( int tool, const char *progname ) @@ -88,7 +88,7 @@ usage( int tool, const char *progname ) break; case SLAPINDEX: - options = " [-c]\n\t[-g] [-n databasenumber | -b suffix] [-q]\n"; + options = " [-c]\n\t[-g] [-n databasenumber | -b suffix] [attr ...] [-q] [-t]\n"; break; case SLAPTEST: @@ -165,7 +165,7 @@ parse_slapopt( void ) } else if ( strncasecmp( optarg, "authzDN", len ) == 0 ) { ber_str2bv( p, 0, 1, &authzDN ); -#ifdef LDAP_SYSLOG +#if defined(LDAP_SYSLOG) && defined(LDAP_DEBUG) } else if ( strncasecmp( optarg, "syslog", len ) == 0 ) { if ( parse_debug_level( p, &ldap_syslog, &syslog_unknowns ) ) { return -1; @@ -185,7 +185,7 @@ parse_slapopt( void ) } start_syslog = 1; #endif /* LOG_LOCAL4 */ -#endif /* LDAP_SYSLOG */ +#endif /* LDAP_DEBUG && LDAP_SYSLOG */ } else { return -1; @@ -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; @@ -241,7 +241,7 @@ slap_tool_init( switch( tool ) { case SLAPADD: - options = "b:cd:f:F:gj:l:n:o:qstuvw"; + options = "b:cd:f:F:gj:l:n:o:qsS:uvw"; break; case SLAPCAT: @@ -255,7 +255,7 @@ slap_tool_init( break; case SLAPTEST: - options = "d:f:F:o:uv"; + options = "d:f:F:o:Quv"; mode |= SLAP_TOOL_READMAIN | SLAP_TOOL_READONLY; break; @@ -265,7 +265,7 @@ slap_tool_init( break; case SLAPINDEX: - options = "b:cd:f:F:gn:o:qv"; + options = "b:cd:f:F:gn:o:qtv"; mode |= SLAP_TOOL_READMAIN; break; @@ -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; @@ -371,6 +371,11 @@ slap_tool_init( dn_mode = SLAP_TOOL_LDAPDN_PRETTY; break; + case 'Q': + quiet++; + slap_debug = 0; + break; + case 'q': /* turn on quick */ mode |= SLAP_TOOL_QUICK; break; @@ -379,6 +384,14 @@ slap_tool_init( realm = optarg; break; + case 'S': + if ( lutil_atou( &csnsid, optarg ) + || csnsid > SLAP_SYNC_SID_MAX ) + { + usage( tool, progname ); + } + break; + case 's': /* dump subtree */ if ( tool == SLAPADD ) mode |= SLAP_TOOL_NO_SCHEMA_CHECK; @@ -417,7 +430,7 @@ slap_tool_init( } } -#ifdef LDAP_SYSLOG +#if defined(LDAP_SYSLOG) && defined(LDAP_DEBUG) if ( start_syslog ) { char *logName; #ifdef HAVE_EBCDIC @@ -429,25 +442,31 @@ slap_tool_init( #ifdef LOG_LOCAL4 openlog( logName, OPENLOG_OPTIONS, syslogUser ); -#elif LOG_DEBUG +#elif defined LOG_DEBUG openlog( logName, OPENLOG_OPTIONS ); #endif #ifdef HAVE_EBCDIC free( logName ); #endif } -#endif /* LDAP_SYSLOG */ +#endif /* LDAP_DEBUG && LDAP_SYSLOG */ switch ( tool ) { case SLAPADD: case SLAPCAT: - case SLAPINDEX: if ( ( argc != optind ) || (dbnum >= 0 && base.bv_val != NULL ) ) { usage( tool, progname ); } break; + case SLAPINDEX: + if ( dbnum >= 0 && base.bv_val != NULL ) { + usage( tool, progname ); + } + + break; + case SLAPDN: if ( argc == optind ) { usage( tool, progname ); @@ -517,7 +536,7 @@ slap_tool_init( exit( EXIT_FAILURE ); } -#ifdef LDAP_SYSLOG +#if defined(LDAP_SYSLOG) && defined(LDAP_DEBUG) if ( syslog_unknowns ) { rc = parse_debug_unknowns( syslog_unknowns, &ldap_syslog ); ldap_charray_free( syslog_unknowns ); @@ -545,7 +564,7 @@ slap_tool_init( } if ( use_glue ) { - rc = glue_sub_attach(); + rc = glue_sub_attach( 0 ); if ( rc != 0 ) { fprintf( stderr, @@ -607,7 +626,7 @@ slap_tool_init( exit( EXIT_FAILURE ); } - be = select_backend( &nbase, 0, 0 ); + be = select_backend( &nbase, 0 ); ber_memfree( nbase.bv_val ); switch ( tool ) { @@ -670,12 +689,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 { @@ -686,6 +705,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); @@ -721,13 +749,16 @@ startup:; } } -void slap_tool_destroy( void ) +int slap_tool_destroy( void ) { + int rc = 0; if ( !dryrun ) { if ( need_shutdown ) { - slap_shutdown( be ); + if ( slap_shutdown( be )) + rc = EXIT_FAILURE; } - slap_destroy(); + if ( slap_destroy()) + rc = EXIT_FAILURE; } #ifdef SLAPD_MODULES if ( slapMode == SLAP_SERVER_MODE ) { @@ -749,4 +780,9 @@ void slap_tool_destroy( void ) if ( !BER_BVISNULL( &authcDN ) ) { ch_free( authcDN.bv_val ); } + + if ( ldiffp && ldiffp != &dummy ) { + ldif_close( ldiffp ); + } + return rc; }