default:
/* remember the text before it's freed in ldap_back_op_result */
- if ( lb.lb_text ) {
- ber_memfree_x( lb.lb_text, op->o_tmpmemctx );
+ if ( lb->lb_text ) {
+ ber_memfree_x( lb->lb_text, op->o_tmpmemctx );
}
lb->lb_text = ber_strdup_x( rs->sr_text, op->o_tmpmemctx );
return rs->sr_err;
const char *text = NULL;
const char *matched;
BerVarray ref;
+ slap_mask_t flags = 0;
struct berval ndn = op->o_ndn;
int sr_err = rs->sr_err;
ref = rs->sr_ref;
rs->sr_ref = NULL;
+ flags = rs->sr_flags & (REP_MATCHED_MUSTBEFREED | REP_REF_MUSTBEFREED);
+ rs->sr_flags &= ~flags;
+
/* we need this to know if back-ldap returned any result */
lb.lb_lc = lc;
sc2.sc_next = sc->sc_next;
rs->sr_text = text;
rs->sr_matched = matched;
rs->sr_ref = ref;
+ rs->sr_flags |= flags;
}
#ifdef LDAP_CONTROL_X_CHAINING_BEHAVIOR
break;
rs->sr_text = text;
rs->sr_matched = matched;
rs->sr_ref = ref;
+ rs->sr_flags |= flags;
+
op->o_bd = bd;
op->o_callback = sc;
op->o_ndn = ndn;