From d80ddd54286c83d00a89aac11d844cd75bbde752 Mon Sep 17 00:00:00 2001 From: Nathan Kinder Date: Fri, 20 Jun 2008 15:10:00 +0000 Subject: Resolves: 452169 Summary: Indexing code needs to use new entry copy to search for subtypes when deleting an attribute value. --- ldap/servers/slapd/back-ldbm/index.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/ldap/servers/slapd/back-ldbm/index.c b/ldap/servers/slapd/back-ldbm/index.c index 344f33f1..92e973ce 100644 --- a/ldap/servers/slapd/back-ldbm/index.c +++ b/ldap/servers/slapd/back-ldbm/index.c @@ -652,13 +652,21 @@ index_add_mods( * BE_INDEX_EQUALITY flag so the equality index is * removed. */ - slapi_entry_attr_find( olde->ep_entry, mods[i]->mod_type, &curr_attr); - for (j = 0; mods_valueArray[j] != NULL; j++ ) { - if ( valuearray_find(curr_attr, evals, mods_valueArray[j]) == -1 ) { - if (!(flags & BE_INDEX_EQUALITY)) { - flags |= BE_INDEX_EQUALITY; + slapi_entry_attr_find( newe->ep_entry, mods[i]->mod_type, &curr_attr); + if (curr_attr) { + for (j = 0; mods_valueArray[j] != NULL; j++ ) { + if ( valuearray_find(curr_attr, evals, mods_valueArray[j]) == -1 ) { + if (!(flags & BE_INDEX_EQUALITY)) { + flags |= BE_INDEX_EQUALITY; + } } } + } else { + /* If we didn't find the attribute in the new + * entry, we should remove the equality index. */ + if (!(flags & BE_INDEX_EQUALITY)) { + flags |= BE_INDEX_EQUALITY; + } } rc = index_addordel_values_sv( be, basetype, -- cgit