From: Howard Chu Date: Fri, 9 Mar 2012 03:24:09 +0000 (-0800) Subject: ITS#7200 enforce check for matching serverID URL X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=b4d403ea310022ca4ffcbf31fa20ead6c754f28d;p=openldap ITS#7200 enforce check for matching serverID URL --- diff --git a/servers/slapd/bconfig.c b/servers/slapd/bconfig.c index a5e28d9258..e277d2e5ef 100644 --- a/servers/slapd/bconfig.c +++ b/servers/slapd/bconfig.c @@ -911,6 +911,7 @@ typedef struct ServerID { } ServerID; static ServerID *sid_list; +static int sid_set; typedef struct voidList { struct voidList *vl_next; @@ -2035,6 +2036,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; @@ -2044,11 +2046,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 ) @@ -4360,6 +4371,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; }