From: Pierangelo Masarati Date: Sat, 19 May 2007 23:24:46 +0000 (+0000) Subject: import fix to ITS#4958) X-Git-Tag: OPENLDAP_REL_ENG_2_3_36~37 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cb272de32302ace9143820242aeda3be26332d73;p=thirdparty%2Fopenldap.git import fix to ITS#4958) --- diff --git a/CHANGES b/CHANGES index f76c69f0c8..ba315839ad 100644 --- a/CHANGES +++ b/CHANGES @@ -3,8 +3,9 @@ OpenLDAP 2.3 Change Log OpenLDAP 2.3.36 Engineering Fixed slapd error code on Windows (ITS#4945, #4606) Fixed slapd mutex bug after failed startup (ITS#4957) - Fixed slapd-config olcModuleLoad replace (ITS#4921) Fixed slapd-bdb no-op crasher (ITS#4925) + Fixed slapd-config olcModuleLoad replace (ITS#4921) + Fixed slapd-relay crash when no database can be selected (ITS#4958) Fixed slapo-chain RFC3062 passwd exop handling (ITS#4964) Fixed libldap response code handling on rebind (ITS#4924) Fixed libldap SASL_MAX_BUFF_SIZE (ITS#4935) diff --git a/servers/slapd/back-relay/op.c b/servers/slapd/back-relay/op.c index 0c463cc203..9b444d26bf 100644 --- a/servers/slapd/back-relay/op.c +++ b/servers/slapd/back-relay/op.c @@ -60,7 +60,7 @@ relay_back_select_backend( struct slap_op *op, struct slap_rep *rs, int err ) relay_back_info *ri = (relay_back_info *)op->o_bd->be_private; BackendDB *bd = ri->ri_bd; - if ( bd == NULL ) { + if ( bd == NULL && !BER_BVISNULL( &op->o_req_ndn ) ) { bd = select_backend( &op->o_req_ndn, 0, 1 ); if ( bd == op->o_bd ) { if ( err > LDAP_SUCCESS ) { @@ -140,9 +140,9 @@ relay_back_op_unbind( struct slap_op *op, struct slap_rep *rs ) BackendDB *bd; int rc = 1; - bd = ri->ri_bd; + bd = relay_back_select_backend( op, rs, -1 ); if ( bd == NULL ) { - bd = select_backend( &op->o_req_ndn, 0, 1 ); + return rc; } if ( bd && bd->be_unbind ) { @@ -405,7 +405,7 @@ relay_back_op_cancel( struct slap_op *op, struct slap_rep *rs ) BackendDB *bd; int rc = 1; - bd = relay_back_select_backend( op, rs, LDAP_NO_SUCH_OBJECT ); + bd = relay_back_select_backend( op, rs, LDAP_CANNOT_CANCEL ); if ( bd == NULL ) { return 1; }