From: Howard Chu Date: Tue, 5 Mar 2024 16:55:28 +0000 (+0000) Subject: ITS#10186 overlay response callbacks should ignore op->o_abandon X-Git-Tag: OPENLDAP_REL_ENG_2_5_18~20 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8deecaf30eb51e39403263d40da5bf8de350f414;p=thirdparty%2Fopenldap.git ITS#10186 overlay response callbacks should ignore op->o_abandon --- diff --git a/contrib/slapd-modules/autogroup/autogroup.c b/contrib/slapd-modules/autogroup/autogroup.c index fa888936d1..0d73637bf2 100644 --- a/contrib/slapd-modules/autogroup/autogroup.c +++ b/contrib/slapd-modules/autogroup/autogroup.c @@ -150,6 +150,7 @@ autogroup_add_member_to_group( Operation *op, BerValue *dn, BerValue *ndn, autog o.orm_no_opattrs = 1; o.o_managedsait = SLAP_CONTROL_CRITICAL; o.o_relax = SLAP_CONTROL_CRITICAL; + o.o_abandon = 0; oex.oe_key = (void *)&autogroup; LDAP_SLIST_INSERT_HEAD( &o.o_extra, &oex, oe_next ); @@ -206,6 +207,7 @@ autogroup_add_member_values_to_group( Operation *op, struct berval *dn, autogrou o.orm_no_opattrs = 1; o.o_managedsait = SLAP_CONTROL_CRITICAL; o.o_relax = SLAP_CONTROL_CRITICAL; + o.o_abandon = 0; oex.oe_key = (void *)&autogroup; LDAP_SLIST_INSERT_HEAD( &o.o_extra, &oex, oe_next ); @@ -279,6 +281,7 @@ autogroup_delete_member_from_group( Operation *op, BerValue *dn, BerValue *ndn, o.o_permissive_modify = 1; o.o_dont_replicate = 1; o.orm_no_opattrs = 1; + o.o_abandon = 0; oex.oe_key = (void *)&autogroup; LDAP_SLIST_INSERT_HEAD( &o.o_extra, &oex, oe_next ); @@ -335,6 +338,7 @@ autogroup_delete_member_values_from_group( Operation *op, struct berval *dn, aut o.orm_no_opattrs = 1; o.o_managedsait = SLAP_CONTROL_CRITICAL; o.o_relax = SLAP_CONTROL_CRITICAL; + o.o_abandon = 0; oex.oe_key = (void *)&autogroup; LDAP_SLIST_INSERT_HEAD( &o.o_extra, &oex, oe_next ); @@ -502,6 +506,10 @@ autogroup_add_members_from_filter( Operation *op, Entry *e, autogroup_entry_t *a Debug(LDAP_DEBUG_TRACE, "==> autogroup_add_members_from_filter <%s>\n", age->age_dn.bv_val ); + /* if modify isn't set, we're pre-op and should honor abandon flag */ + if ( op->o_abandon && !modify ) + return 0; + o.ors_attrsonly = 0; o.o_tag = LDAP_REQ_SEARCH; @@ -520,6 +528,7 @@ autogroup_add_members_from_filter( Operation *op, Entry *e, autogroup_entry_t *a o.ors_slimit = SLAP_NO_LIMIT; o.ors_attrs = agf->agf_anlist ? agf->agf_anlist : slap_anlist_no_attrs; o.o_do_not_cache = 1; + o.o_abandon = 0; agg.agg_group = age; agg.agg_filter = agf; @@ -562,6 +571,7 @@ autogroup_add_members_from_filter( Operation *op, Entry *e, autogroup_entry_t *a o.o_permissive_modify = 1; o.o_dont_replicate = 1; o.orm_no_opattrs = 1; + o.o_abandon = 0; oex.oe_key = (void *)&autogroup; LDAP_SLIST_INSERT_HEAD( &o.o_extra, &oex, oe_next ); diff --git a/servers/slapd/overlays/memberof.c b/servers/slapd/overlays/memberof.c index d76f8f40e4..aa3597f3ae 100644 --- a/servers/slapd/overlays/memberof.c +++ b/servers/slapd/overlays/memberof.c @@ -385,6 +385,10 @@ memberof_value_modify( op2.orm_no_opattrs = 1; op2.o_dont_replicate = 1; + /* main op has already completed if we got here, so even + * if its abandon flag was set we must complete as well. */ + op2.o_abandon = 0; + if ( !BER_BVISNULL( &mo->mo_ndn ) ) { ml = &mod[ mcnt ]; ml->sml_numvals = 1; diff --git a/servers/slapd/overlays/refint.c b/servers/slapd/overlays/refint.c index 75d036035d..7f63ada0e9 100644 --- a/servers/slapd/overlays/refint.c +++ b/servers/slapd/overlays/refint.c @@ -603,6 +603,7 @@ refint_repair( op->o_ndn = op->o_bd->be_rootndn; cache = op->o_do_not_cache; op->o_do_not_cache = 1; + op->o_abandon = 0; /* search */ rc = op->o_bd->be_search( op, &rs );