From f8257daa03d6a378d95118029f20ac709719ddea 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 0545568e60..bd7cb7c552 100644 --- a/servers/slapd/back-ldap/chain.c +++ b/servers/slapd/back-ldap/chain.c @@ -624,6 +624,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 ); @@ -649,9 +654,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 */ @@ -895,14 +897,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 ); } @@ -925,8 +929,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