mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-21 03:10:25 +08:00
ITS#5374 don't perform mod_cleanup after a successful response
This commit is contained in:
parent
f26657d81c
commit
09e624ce6a
@ -67,7 +67,6 @@ typedef struct log_info {
|
|||||||
Entry *li_old;
|
Entry *li_old;
|
||||||
log_attr *li_oldattrs;
|
log_attr *li_oldattrs;
|
||||||
int li_success;
|
int li_success;
|
||||||
int li_unlock;
|
|
||||||
ldap_pvt_thread_rmutex_t li_op_rmutex;
|
ldap_pvt_thread_rmutex_t li_op_rmutex;
|
||||||
ldap_pvt_thread_mutex_t li_log_mutex;
|
ldap_pvt_thread_mutex_t li_log_mutex;
|
||||||
} log_info;
|
} log_info;
|
||||||
@ -1339,10 +1338,16 @@ static int accesslog_response(Operation *op, SlapReply *rs) {
|
|||||||
return SLAP_CB_CONTINUE;
|
return SLAP_CB_CONTINUE;
|
||||||
|
|
||||||
if ( lo->mask & LOG_OP_WRITES ) {
|
if ( lo->mask & LOG_OP_WRITES ) {
|
||||||
|
slap_callback *cb;
|
||||||
ldap_pvt_thread_mutex_lock( &li->li_log_mutex );
|
ldap_pvt_thread_mutex_lock( &li->li_log_mutex );
|
||||||
old = li->li_old;
|
old = li->li_old;
|
||||||
li->li_old = NULL;
|
li->li_old = NULL;
|
||||||
li->li_unlock = 0;
|
/* Disarm mod_cleanup */
|
||||||
|
for ( cb = op->o_callback->sc_next; cb; cb = cb->sc_next ) {
|
||||||
|
if ( cb->sc_private == (void *)on )
|
||||||
|
cb->sc_private = NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
ldap_pvt_thread_rmutex_unlock( &li->li_op_rmutex, op->o_tid );
|
ldap_pvt_thread_rmutex_unlock( &li->li_op_rmutex, op->o_tid );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1693,12 +1698,11 @@ accesslog_mod_cleanup( Operation *op, SlapReply *rs )
|
|||||||
{
|
{
|
||||||
slap_callback *sc = op->o_callback;
|
slap_callback *sc = op->o_callback;
|
||||||
slap_overinst *on = sc->sc_private;
|
slap_overinst *on = sc->sc_private;
|
||||||
log_info *li = on->on_bi.bi_private;
|
|
||||||
op->o_callback = sc->sc_next;
|
op->o_callback = sc->sc_next;
|
||||||
|
|
||||||
op->o_tmpfree( sc, op->o_tmpmemctx );
|
op->o_tmpfree( sc, op->o_tmpmemctx );
|
||||||
|
|
||||||
if ( li->li_unlock ) {
|
if ( on ) {
|
||||||
BackendInfo *bi = op->o_bd->bd_info;
|
BackendInfo *bi = op->o_bd->bd_info;
|
||||||
op->o_bd->bd_info = (BackendInfo *)on;
|
op->o_bd->bd_info = (BackendInfo *)on;
|
||||||
accesslog_response( op, rs );
|
accesslog_response( op, rs );
|
||||||
@ -1714,15 +1718,15 @@ accesslog_op_mod( Operation *op, SlapReply *rs )
|
|||||||
log_info *li = on->on_bi.bi_private;
|
log_info *li = on->on_bi.bi_private;
|
||||||
|
|
||||||
if ( li->li_ops & LOG_OP_WRITES ) {
|
if ( li->li_ops & LOG_OP_WRITES ) {
|
||||||
slap_callback *cb = op->o_tmpalloc( sizeof( slap_callback ), op->o_tmpmemctx );
|
slap_callback *cb = op->o_tmpalloc( sizeof( slap_callback ), op->o_tmpmemctx ), *cb2;
|
||||||
cb->sc_cleanup = accesslog_mod_cleanup;
|
cb->sc_cleanup = accesslog_mod_cleanup;
|
||||||
cb->sc_response = NULL;
|
cb->sc_response = NULL;
|
||||||
cb->sc_private = on;
|
cb->sc_private = on;
|
||||||
cb->sc_next = op->o_callback;
|
cb->sc_next = NULL;
|
||||||
op->o_callback = cb;
|
for ( cb2 = op->o_callback; cb2->sc_next; cb2 = cb2->sc_next );
|
||||||
|
cb2->sc_next = cb;
|
||||||
|
|
||||||
ldap_pvt_thread_rmutex_lock( &li->li_op_rmutex, op->o_tid );
|
ldap_pvt_thread_rmutex_lock( &li->li_op_rmutex, op->o_tid );
|
||||||
li->li_unlock = 1;
|
|
||||||
if ( li->li_oldf && ( op->o_tag == LDAP_REQ_DELETE ||
|
if ( li->li_oldf && ( op->o_tag == LDAP_REQ_DELETE ||
|
||||||
op->o_tag == LDAP_REQ_MODIFY ||
|
op->o_tag == LDAP_REQ_MODIFY ||
|
||||||
( op->o_tag == LDAP_REQ_MODRDN && li->li_oldattrs ))) {
|
( op->o_tag == LDAP_REQ_MODRDN && li->li_oldattrs ))) {
|
||||||
|
Loading…
Reference in New Issue
Block a user