From: Howard Chu Date: Tue, 12 Dec 2006 19:39:28 +0000 (+0000) Subject: ITS#4777 fix modlist delete X-Git-Tag: OPENLDAP_REL_ENG_2_4_4ALPHA~8^2~387 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=499c9369e1e8eaa39a7bc1babd70cd71ddbfc8d3;p=thirdparty%2Fopenldap.git ITS#4777 fix modlist delete --- diff --git a/servers/slapd/overlays/translucent.c b/servers/slapd/overlays/translucent.c index 126a336318..4fc6e1ad1c 100644 --- a/servers/slapd/overlays/translucent.c +++ b/servers/slapd/overlays/translucent.c @@ -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;