From c350b51a63a12dfe98f468e123e1c4cef76ab42d Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Wed, 9 Oct 2013 04:58:37 -0700 Subject: [PATCH] ITS#7710 fix for non-replicated internal ops Their completion was making slap_graduate_commit_csn() cleanup their parent op's CSN, thus preventing that CSN from propagating to any consumers. --- servers/slapd/overlays/memberof.c | 4 ++++ servers/slapd/overlays/refint.c | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/servers/slapd/overlays/memberof.c b/servers/slapd/overlays/memberof.c index c3cc3cfbf0..3f07ffb521 100644 --- a/servers/slapd/overlays/memberof.c +++ b/servers/slapd/overlays/memberof.c @@ -341,6 +341,7 @@ memberof_value_modify( memberof_t *mo = (memberof_t *)on->on_bi.bi_private; Operation op2 = *op; + unsigned long opid = op->o_opid; SlapReply rs2 = { REP_RESULT }; slap_callback cb = { NULL, slap_null_cb, NULL, NULL }; Modifications mod[ 2 ] = { { { 0 } } }, *ml; @@ -358,6 +359,7 @@ memberof_value_modify( op2.orm_modlist = NULL; /* Internal ops, never replicate these */ + op2.o_opid = 0; /* shared with op, saved above */ op2.orm_no_opattrs = 1; op2.o_dont_replicate = 1; @@ -472,6 +474,8 @@ memberof_value_modify( slap_mods_free( ml, 1 ); } } + /* restore original opid */ + op->o_opid = opid; /* FIXME: if old_group_ndn doesn't exist, both delete __and__ * add will fail; better split in two operations, although diff --git a/servers/slapd/overlays/refint.c b/servers/slapd/overlays/refint.c index 2aaffe7918..4f7a3f6e45 100644 --- a/servers/slapd/overlays/refint.c +++ b/servers/slapd/overlays/refint.c @@ -527,6 +527,7 @@ refint_repair( dependent_data *dp; SlapReply rs = {REP_RESULT}; Operation op2; + unsigned long opid; int rc; op->o_callback->sc_response = refint_search_cb; @@ -565,6 +566,7 @@ refint_repair( * */ + opid = op2.o_opid; op2 = *op; for ( dp = rq->attrs; dp; dp = dp->next ) { SlapReply rs2 = {REP_RESULT}; @@ -587,6 +589,7 @@ refint_repair( /* Internal ops, never replicate these */ op2.orm_no_opattrs = 1; op2.o_dont_replicate = 1; + op2.o_opid = 0; /* Set our ModifiersName */ if ( SLAP_LASTMOD( op->o_bd ) ) { @@ -686,6 +689,7 @@ refint_repair( op2.o_tmpfree( m, op2.o_tmpmemctx ); } } + op2.o_opid = opid; return 0; } -- 2.39.5