]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
import fix to ITS#4958)
authorPierangelo Masarati <ando@openldap.org>
Sat, 19 May 2007 23:24:46 +0000 (23:24 +0000)
committerPierangelo Masarati <ando@openldap.org>
Sat, 19 May 2007 23:24:46 +0000 (23:24 +0000)
CHANGES
servers/slapd/back-relay/op.c

diff --git a/CHANGES b/CHANGES
index f76c69f0c83ff1b93a1dfc58d0c1d049a1e89692..ba315839ad5cb93ae2b525cf9cfa6e962b9f0374 100644 (file)
--- 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)
index 0c463cc20318fc6d9518fd543dd05d35297dc1aa..9b444d26bfac3e50fae1d7783bf2467d795536ad 100644 (file)
@@ -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;
        }