better diagnostics

This commit is contained in:
Pierangelo Masarati 2009-03-05 10:59:34 +00:00
parent 86e048aa33
commit f3014a235d
3 changed files with 44 additions and 17 deletions

View File

@ -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 : "<none>",
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 : "<none>",
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;

View File

@ -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);

View File

@ -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