From f3014a235d98a0de3de5cf664d6139c7bf144b6f Mon Sep 17 00:00:00 2001 From: Pierangelo Masarati Date: Thu, 5 Mar 2009 10:59:34 +0000 Subject: [PATCH] better diagnostics --- servers/slapd/slapadd.c | 40 ++++++++++++++++++++++++++------------ servers/slapd/slapcommon.c | 19 +++++++++++++----- servers/slapd/slapcommon.h | 2 ++ 3 files changed, 44 insertions(+), 17 deletions(-) diff --git a/servers/slapd/slapadd.c b/servers/slapd/slapadd.c index d975034313..5ee5abf08a 100644 --- a/servers/slapd/slapadd.c +++ b/servers/slapd/slapadd.c @@ -143,7 +143,9 @@ slapadd( int argc, char **argv ) /* nextline is the line number of the end of the current entry */ for( lineno=1; ldif_read_record( ldiffp, &nextline, &buf, &lmax ); - lineno=nextline+1 ) { + lineno=nextline+1 ) + { + BackendDB *bd; Entry *e; if ( lineno < jumpline ) @@ -173,7 +175,8 @@ slapadd( int argc, char **argv ) /* make sure the DN is not empty */ if( BER_BVISEMPTY( &e->e_nname ) && - !BER_BVISEMPTY( be->be_nsuffix )) { + !BER_BVISEMPTY( be->be_nsuffix )) + { fprintf( stderr, "%s: empty dn=\"%s\" (line=%d)\n", progname, e->e_dn, lineno ); rc = EXIT_FAILURE; @@ -183,19 +186,32 @@ slapadd( int argc, char **argv ) } /* check backend */ - if( select_backend( &e->e_nname, nosubordinates ) - != be ) - { + bd = select_backend( &e->e_nname, nosubordinates ); + if ( bd != be ) { fprintf( stderr, "%s: line %d: " - "database (%s) not configured to hold \"%s\"\n", + "database #%d (%s) not configured to hold \"%s\"", progname, lineno, - be ? be->be_suffix[0].bv_val : "", + dbnum, + be->be_suffix[0].bv_val, e->e_dn ); - fprintf( stderr, "%s: line %d: " - "database (%s) not configured to hold \"%s\"\n", - progname, lineno, - be ? be->be_nsuffix[0].bv_val : "", - e->e_ndn ); + if ( bd ) { + BackendDB *bdtmp; + int dbidx = 0; + LDAP_STAILQ_FOREACH( bdtmp, &backendDB, be_next ) { + if ( bdtmp == bd ) break; + dbidx++; + } + + assert( bdtmp != NULL ); + + fprintf( stderr, "; did you mean to use database #%d (%s)?", + dbidx, + bd->be_suffix[0].bv_val ); + + } else { + fprintf( stderr, "; no database configured for that naming context" ); + } + fprintf( stderr, "\n" ); rc = EXIT_FAILURE; entry_free( e ); if( continuemode ) continue; diff --git a/servers/slapd/slapcommon.c b/servers/slapd/slapcommon.c index 12856633cd..8cdf545fe4 100644 --- a/servers/slapd/slapcommon.c +++ b/servers/slapd/slapcommon.c @@ -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; @@ -689,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 ); + " (less than the number of configured databases, %d)\n", + nbackends - 1, nbackends ); exit( EXIT_FAILURE ); } else { @@ -705,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); diff --git a/servers/slapd/slapcommon.h b/servers/slapd/slapcommon.h index 3b6821739b..b030da2874 100644 --- a/servers/slapd/slapcommon.h +++ b/servers/slapd/slapcommon.h @@ -34,6 +34,7 @@ enum slaptool { typedef struct tool_vars { Backend *tv_be; + int tv_dbnum; int tv_verbose; int tv_quiet; int tv_update_ctxcsn; @@ -66,6 +67,7 @@ typedef struct tool_vars { extern tool_vars tool_globals; #define be tool_globals.tv_be +#define dbnum tool_globals.tv_dbnum #define verbose tool_globals.tv_verbose #define quiet tool_globals.tv_quiet #define jumpline tool_globals.tv_jumpline -- 2.39.5