From: Howard Chu Date: Thu, 30 Oct 2014 15:00:13 +0000 (+0000) Subject: ITS#7976 fix delta-mmr/accesslog interaction X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=cddf688d2de3e26ad42d0afac72c585042ba58a4;p=openldap ITS#7976 fix delta-mmr/accesslog interaction --- diff --git a/servers/slapd/backover.c b/servers/slapd/backover.c index f5ca6e7252..918dd1701c 100644 --- a/servers/slapd/backover.c +++ b/servers/slapd/backover.c @@ -684,9 +684,14 @@ int overlay_op_walk( } if ( rc == SLAP_CB_BYPASS ) rc = SLAP_CB_CONTINUE; + /* if an overlay halted processing, make sure + * any previously set cleanup handlers are run + */ + if ( rc != SLAP_CB_CONTINUE ) + goto cleanup; bi = oi->oi_orig; - if ( (&bi->bi_op_bind)[ which ] && rc == SLAP_CB_CONTINUE ) { + if ( (&bi->bi_op_bind)[ which ] ) { op->o_bd->bd_info = bi; rc = (&bi->bi_op_bind)[ which ]( op, rs ); } @@ -700,6 +705,7 @@ int overlay_op_walk( */ if ( rc == LDAP_UNWILLING_TO_PERFORM ) { slap_callback *sc_next; +cleanup: for ( ; op->o_callback && op->o_callback->sc_response != over_back_response; op->o_callback = sc_next ) { sc_next = op->o_callback->sc_next; diff --git a/servers/slapd/syncrepl.c b/servers/slapd/syncrepl.c index 836adf1ed6..caab9f58ed 100644 --- a/servers/slapd/syncrepl.c +++ b/servers/slapd/syncrepl.c @@ -2055,8 +2055,11 @@ syncrepl_op_modify( Operation *op, SlapReply *rs ) overlay_entry_release_ov( op, e, 0, on ); } /* equal? Should never happen */ - if ( match == 0 ) + if ( match == 0 ) { + /* tell accesslog this was a failure */ + rs->sr_err = LDAP_TYPE_OR_VALUE_EXISTS; return LDAP_SUCCESS; + } /* mod is older: resolve conflicts... * 1. Save/copy original modlist. Split Replace to Del/Add.