From: hyc Date: Sat, 6 Sep 2014 08:14:46 +0000 (+0100) Subject: ITS#7930 partial fix X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=18d94709841df6b6fbeda8c3f583fc4fc04fc388;p=openldap ITS#7930 partial fix Only restore op->o_req_dn if no one else changed it on us. --- diff --git a/servers/slapd/back-ldap/chain.c b/servers/slapd/back-ldap/chain.c index 93bad4e4b3..14a93abcb6 100644 --- a/servers/slapd/back-ldap/chain.c +++ b/servers/slapd/back-ldap/chain.c @@ -626,6 +626,11 @@ cleanup:; } further_cleanup:; + if ( op->o_req_dn.bv_val == pdn.bv_val ) { + op->o_req_dn = odn; + op->o_req_ndn = ondn; + } + if ( free_dn ) { op->o_tmpfree( pdn.bv_val, op->o_tmpmemctx ); op->o_tmpfree( ndn.bv_val, op->o_tmpmemctx ); @@ -651,9 +656,6 @@ further_cleanup:; rc = rs2.sr_err; } - op->o_req_dn = odn; - op->o_req_ndn = ondn; - #ifdef LDAP_CONTROL_X_CHAINING_BEHAVIOR (void)chaining_control_remove( op, &ctrls ); #endif /* LDAP_CONTROL_X_CHAINING_BEHAVIOR */ @@ -897,14 +899,16 @@ cleanup:; } further_cleanup:; + if ( op->o_req_dn.bv_val == pdn.bv_val ) { + op->o_req_dn = odn; + op->o_req_ndn = ondn; + } + if ( free_dn ) { op->o_tmpfree( pdn.bv_val, op->o_tmpmemctx ); op->o_tmpfree( ndn.bv_val, op->o_tmpmemctx ); } - op->o_req_dn = odn; - op->o_req_ndn = ondn; - if ( tmp_oq_search.rs_filter != NULL ) { filter_free_x( op, tmp_oq_search.rs_filter, 1 ); } @@ -927,8 +931,6 @@ further_cleanup:; (void)chaining_control_remove( op, &ctrls ); #endif /* LDAP_CONTROL_X_CHAINING_BEHAVIOR */ - op->o_req_dn = odn; - op->o_req_ndn = ondn; rs->sr_type = REP_SEARCHREF; rs->sr_entry = save_entry; rs->sr_flags = save_flags;