From 0e13519191e7f467ed8fa4d0bc12c8a7acd824dd Mon Sep 17 00:00:00 2001 From: Pierangelo Masarati Date: Sat, 9 Sep 2006 17:01:28 +0000 Subject: [PATCH] ld may legitimately be NULL if another operation freed it because of a failure while binding --- servers/slapd/back-meta/search.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/servers/slapd/back-meta/search.c b/servers/slapd/back-meta/search.c index 6b39b491b5..95f3cd3fb1 100644 --- a/servers/slapd/back-meta/search.c +++ b/servers/slapd/back-meta/search.c @@ -113,6 +113,24 @@ meta_search_dobind_init( return retcode; } + if ( msc->msc_ld == NULL ) { + /* for some reason (e.g. because formerly in "binding" + * state, with eventual connection expiration or invalidation, + * it was not initialized as expected */ + rc = meta_back_init_one_conn( op, rs, *mcp, candidate, + LDAP_BACK_CONN_ISPRIV( *mcp ), LDAP_BACK_DONTSEND ); + switch ( rc ) { + case LDAP_SUCCESS: + break; + + case LDAP_SERVER_DOWN: + goto down; + + default: + goto other; + } + } + /* NOTE: this obsoletes pseudorootdn */ if ( op->o_conn != NULL && !op->o_do_not_cache && @@ -156,8 +174,6 @@ meta_search_dobind_init( } } - assert( msc->msc_ld != NULL ); - rc = ldap_sasl_bind( msc->msc_ld, binddn.bv_val, LDAP_SASL_SIMPLE, &cred, NULL, NULL, &candidates[ candidate ].sr_msgid ); switch ( rc ) { @@ -180,6 +196,7 @@ down:; } /* fall thru */ +other:; default: rs->sr_err = rc; rc = slap_map_api2result( rs ); -- 2.39.5