From cef87460603befa4bbb1e83fcbfb720d0d717e3b Mon Sep 17 00:00:00 2001 From: hyc Date: Sat, 6 Sep 2014 09:14:46 +0100 Subject: [PATCH] ITS#7930 partial fix Only restore op->o_req_dn if no one else changed it on us. --- servers/slapd/back-ldap/chain.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) 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; -- 2.39.5