From 3c1b07b7d809c4d49b78dddc828a3345df74260a Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Thu, 8 Mar 2012 19:24:09 -0800 Subject: [PATCH] ITS#7200 enforce check for matching serverID URL --- servers/slapd/bconfig.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/servers/slapd/bconfig.c b/servers/slapd/bconfig.c index b76cd26497..63ef8548ab 100644 --- a/servers/slapd/bconfig.c +++ b/servers/slapd/bconfig.c @@ -890,6 +890,7 @@ typedef struct ServerID { } ServerID; static ServerID *sid_list; +static int sid_set; typedef struct voidList { struct voidList *vl_next; @@ -1903,6 +1904,7 @@ sortval_reject: Debug( LDAP_DEBUG_CONFIG, "%s: SID=0x%03x\n", c->log, slap_serverID, 0 ); + sid_set = 1; } si->si_next = NULL; si->si_num = num; @@ -1912,11 +1914,20 @@ sortval_reject: if (( slapMode & SLAP_SERVER_MODE ) && c->argc > 2 ) { Listener *l = config_check_my_url( c->argv[2], lud ); if ( l ) { + if ( sid_set ) { + ldap_free_urldesc( lud ); + snprintf( c->cr_msg, sizeof( c->cr_msg ), + "<%s> multiple server ID URLs matched, only one is allowed", c->argv[0] ); + Debug(LDAP_DEBUG_ANY, "%s: %s %s\n", + c->log, c->cr_msg, c->argv[1] ); + return 1; + } slap_serverID = si->si_num; Debug( LDAP_DEBUG_CONFIG, "%s: SID=0x%03x (listener=%s)\n", c->log, slap_serverID, l->sl_url.bv_val ); + sid_set = 1; } } if ( c->argc > 2 ) @@ -4228,6 +4239,13 @@ done: assert( 0 ); } } + if ( rc == 0 && ( slapMode & SLAP_SERVER_MODE ) && sid_list ) { + if ( !BER_BVISEMPTY( &sid_list->si_url ) && !sid_set ) { + Debug(LDAP_DEBUG_ANY, "read_config: no serverID / URL match found. " + "Check slapd -h arguments.\n", 0,0,0 ); + rc = LDAP_OTHER; + } + } return rc; } -- 2.39.5