]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#4777 fix modlist delete
authorHoward Chu <hyc@openldap.org>
Tue, 12 Dec 2006 19:39:28 +0000 (19:39 +0000)
committerHoward Chu <hyc@openldap.org>
Tue, 12 Dec 2006 19:39:28 +0000 (19:39 +0000)
servers/slapd/overlays/translucent.c

index 126a336318d92565fe6d744ce55634664754a21d..4fc6e1ad1ca4127d1234b57a5f0412be9b37999c 100644 (file)
@@ -302,7 +302,7 @@ static int translucent_modify(Operation *op, SlapReply *rs) {
        translucent_info *ov = on->on_bi.bi_private;
        Entry *e = NULL, *re = NULL;
        Attribute *a, *ax;
-       Modifications *m, *mm;
+       Modifications *m, **mm;
        int del, rc, erc = 0;
        slap_callback cb = { 0 };
 
@@ -343,7 +343,9 @@ static int translucent_modify(Operation *op, SlapReply *rs) {
 
        if(e && rc == LDAP_SUCCESS) {
                Debug(LDAP_DEBUG_TRACE, "=> translucent_modify: found local entry\n", 0, 0, 0);
-               for(m = op->orm_modlist; m; m = m->sml_next) {
+               for(mm = &op->orm_modlist; *mm; ) {
+                       m = *mm;
+                       mm = &m->sml_next;
                        for(a = e->e_attrs; a; a = a->a_next)
                                if(a->a_desc == m->sml_desc) break;
                        if(a) continue;         /* found local attr */
@@ -362,11 +364,9 @@ static int translucent_modify(Operation *op, SlapReply *rs) {
                                Debug(LDAP_DEBUG_TRACE,
                                        "=> translucent_modify: silently dropping delete: %s\n",
                                        m->sml_desc->ad_cname.bv_val, 0, 0);
-                               for(mm = op->orm_modlist; mm->sml_next != m; mm = mm->sml_next);
-                               mm->sml_next = m->sml_next;
+                               *mm = m->sml_next;
                                m->sml_next = NULL;
                                slap_mods_free(m, 1);
-                               m = mm;
                                continue;
                        }
                        m->sml_op = LDAP_MOD_ADD;