mirror of
https://git.openldap.org/openldap/openldap.git
synced 2026-01-07 15:41:24 -05:00
ITS#8698 Defer policy checker cleanup if it's a pw extop
This commit is contained in:
parent
0df931b98b
commit
51c444b065
1 changed files with 30 additions and 2 deletions
|
|
@ -2326,6 +2326,21 @@ ppolicy_mod_cb( Operation *op, SlapReply *rs )
|
|||
return SLAP_CB_CONTINUE;
|
||||
}
|
||||
|
||||
static int
|
||||
ppolicy_text_cleanup( Operation *op, SlapReply *rs )
|
||||
{
|
||||
slap_callback *sc = op->o_callback;
|
||||
|
||||
if ( rs->sr_text == sc->sc_private ) {
|
||||
rs->sr_text = NULL;
|
||||
}
|
||||
free( sc->sc_private );
|
||||
|
||||
op->o_callback = sc->sc_next;
|
||||
op->o_tmpfree( sc, op->o_tmpmemctx );
|
||||
return SLAP_CB_CONTINUE;
|
||||
}
|
||||
|
||||
static int
|
||||
ppolicy_modify( Operation *op, SlapReply *rs )
|
||||
{
|
||||
|
|
@ -3083,8 +3098,21 @@ return_results:
|
|||
}
|
||||
send_ldap_result( op, rs );
|
||||
if ( free_txt ) {
|
||||
free( (char *)txt );
|
||||
rs->sr_text = NULL;
|
||||
if ( is_pwdexop ) {
|
||||
slap_callback *cb;
|
||||
cb = op->o_tmpcalloc( sizeof(ppbind)+sizeof(slap_callback),
|
||||
1, op->o_tmpmemctx );
|
||||
|
||||
/* Setup a callback so we can free the text when sent */
|
||||
cb->sc_cleanup = ppolicy_text_cleanup;
|
||||
cb->sc_private = (void *)txt;
|
||||
overlay_callback_after_backover( op, cb, 1 );
|
||||
} else {
|
||||
if ( rs->sr_text == txt ) {
|
||||
rs->sr_text = NULL;
|
||||
}
|
||||
free( (char *)txt );
|
||||
}
|
||||
}
|
||||
if ( send_ctrl ) {
|
||||
if ( is_pwdexop ) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue