From: Kurt Zeilenga Date: Thu, 25 Oct 2001 16:25:44 +0000 (+0000) Subject: Fix for slap tools replica config crash (ITS#1385) X-Git-Tag: OPENLDAP_REL_ENG_2_0_18~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e6dd55cfa0c9e2bca8fd8e0f7034a4164ae57b9e;p=thirdparty%2Fopenldap.git Fix for slap tools replica config crash (ITS#1385) --- diff --git a/servers/slapd/config.c b/servers/slapd/config.c index 4f6b1d9039..7187559928 100644 --- a/servers/slapd/config.c +++ b/servers/slapd/config.c @@ -953,21 +953,19 @@ read_config( const char *fname ) } else { for ( i = 1; i < cargc; i++ ) { if ( strncasecmp( cargv[i], "suffix=", 7 ) == 0 ) { - char *nsuffix = ch_strdup( cargv[i] + 7 ); - if ( dn_normalize( nsuffix ) != NULL ) { - if ( select_backend( nsuffix, 0 ) == be ) { - charray_add( &be->be_replica[nr]->ri_nsuffix, nsuffix ); - } else { - Debug( LDAP_DEBUG_ANY, - "%s: line %d: suffix \"%s\" in \"replica\" line is not valid for backend (ignored)\n", - fname, lineno, cargv[i] + 7 ); - } - } else { + switch ( add_replica_suffix( be, nr, cargv[i] + 7 ) ) { + case 1: + Debug( LDAP_DEBUG_ANY, + "%s: line %d: suffix \"%s\" in \"replica\" line is not valid for backend (ignored)\n", + fname, lineno, cargv[i] + 7 ); + break; + + case 2: Debug( LDAP_DEBUG_ANY, "%s: line %d: unable to normalize suffix in \"replica\" line (ignored)\n", fname, lineno, 0 ); + break; } - free( nsuffix ); } } } diff --git a/servers/slapd/proto-slap.h b/servers/slapd/proto-slap.h index 54f98354d3..d7a72c83e3 100644 --- a/servers/slapd/proto-slap.h +++ b/servers/slapd/proto-slap.h @@ -471,6 +471,7 @@ LDAP_SLAPD_F (char *) phonetic LDAP_P(( char *s )); * repl.c */ LDAP_SLAPD_F (int) add_replica_info LDAP_P(( Backend *be, const char *host )); +LDAP_SLAPD_F (int) add_replica_suffix LDAP_P(( Backend *be, int nr, const char *suffix )); LDAP_SLAPD_F (void) replog LDAP_P(( Backend *be, Operation *op, char *dn, void *change )); /* diff --git a/servers/slapd/repl.c b/servers/slapd/repl.c index 58a271601d..4c01093b52 100644 --- a/servers/slapd/repl.c +++ b/servers/slapd/repl.c @@ -46,6 +46,30 @@ add_replica_info( return( i ); } +int +add_replica_suffix( + Backend *be, + int nr, + const char *suffix +) +{ + char *nsuffix = ch_strdup( suffix ); + int rc = 0; + + if ( dn_normalize( nsuffix ) != NULL ) { + if ( select_backend( nsuffix, 0 ) == be ) { + charray_add( &be->be_replica[nr]->ri_nsuffix, nsuffix ); + } else { + rc = 1; + } + } else { + rc = 2; + } + free( nsuffix ); + + return( rc ); +} + void replog( Backend *be, diff --git a/servers/slapd/tools/mimic.c b/servers/slapd/tools/mimic.c index 30e94f3f08..c46390abfe 100644 --- a/servers/slapd/tools/mimic.c +++ b/servers/slapd/tools/mimic.c @@ -171,5 +171,25 @@ void slap_mods_free( Modifications *ml ) int add_replica_info( Backend *be, const char *host ) { - return(0); + return 0; +} + +int add_replica_suffix( Backend *be, int nr, const char *suffix ) +{ + return 0; +} + +int parse_limits( Backend *be, const char *fname, int lineno, int argc, char **argv ) +{ + return 0; +} + +int parse_limit( const char *arg, struct slap_limits_set *limit ) +{ + return 0; +} + +int get_limits( Backend *be, const char *ndn, struct slap_limits_set **limit ) +{ + return 0; }