diff --git a/servers/slapd/overlays/memberof.c b/servers/slapd/overlays/memberof.c index c3cc3cfbf02d105a6e801b02dbd0ce63bdc62766..3f07ffb52194f3277f9bb55372ec5653617be5fe 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 2aaffe791860def9c90c42d7ad29c2d325b2df64..4f7a3f6e4575a58b1c78c1bff3a8f116e0320ff5 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; }