ITS#10448 slapo-syncprov: free parsed control when operation completes

This commit is contained in:
Howard Chu 2026-02-06 20:00:57 +00:00
parent 6603ce17d9
commit fa3b4ba823

View file

@ -4250,6 +4250,29 @@ syncprov_db_destroy(
return 0;
}
static int
syncprov_ctrl_cleanup( Operation *op, SlapReply *rs )
{
if ( rs->sr_type != REP_RESULT )
return SLAP_CB_CONTINUE;
if ( op->o_controls[slap_cids.sc_LDAPsync] ) {
sync_control *sr = op->o_controls[slap_cids.sc_LDAPsync];
op->o_controls[slap_cids.sc_LDAPsync] = NULL;
if ( sr->sr_state.ctxcsn ) {
ber_bvarray_free_x( sr->sr_state.ctxcsn, op->o_tmpmemctx );
}
if ( sr->sr_state.sids ) {
op->o_tmpfree( sr->sr_state.sids, op->o_tmpmemctx );
}
if ( sr->sr_state.octet_str.bv_val ) {
op->o_tmpfree( sr->sr_state.octet_str.bv_val, op->o_tmpmemctx );
}
op->o_tmpfree( sr, op->o_tmpmemctx );
}
return slap_freeself_cb( op, rs );
}
static int syncprov_parseCtrl (
Operation *op,
SlapReply *rs,
@ -4357,6 +4380,13 @@ static int syncprov_parseCtrl (
op->o_sync_mode |= mode; /* o_sync_mode shares o_sync */
{
slap_callback *cb = op->o_tmpcalloc( 1, sizeof(slap_callback), op->o_tmpmemctx );
cb->sc_cleanup = syncprov_ctrl_cleanup;
cb->sc_next = op->o_callback;
op->o_callback = cb;
}
return LDAP_SUCCESS;
}