]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#10186 overlay response callbacks should ignore op->o_abandon
authorHoward Chu <hyc@openldap.org>
Tue, 5 Mar 2024 16:55:28 +0000 (16:55 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Tue, 26 Mar 2024 17:03:48 +0000 (17:03 +0000)
contrib/slapd-modules/autogroup/autogroup.c
servers/slapd/overlays/memberof.c
servers/slapd/overlays/refint.c

index fa888936d1bb37b566f49fd0388c00ed139065b0..0d73637bf2797aa9e49b7ef948b71c7e797264da 100644 (file)
@@ -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 );
index d76f8f40e4744efdfdfc7ce18d1c4af39171f973..aa3597f3ae6c76c4cf648e351ccdc5eeb3bfd0ae 100644 (file)
@@ -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;
index 75d036035dd17591f199caaa659672d647c3c122..7f63ada0e9d4f864a062b383721235334e686884 100644 (file)
@@ -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 );