From ff13a9c7a0ff1ad5e5796f9b4afbe829cda19212 Mon Sep 17 00:00:00 2001 From: Noriko Hosoi Date: Jun 17 2013 18:43:16 +0000 Subject: Ticket #47391 - deleting and adding userpassword fails to update the password Bug description: Deleting and adding password operation causes the crash since once an entry is written to and retrieved from DB, it does not have unhashed#user#password in the entry any more. The delete userpassword internally invokes delete unhashed existed in the entry. Fix description: Once the internal attribute value pair is stored in an entry extension, the mod for the attribute is changed to the "disabled" mode. Also, this patch adds the stricter check for the NULL reference. https://fedorahosted.org/389/ticket/47391 Reviewed by Nathan (Thank you!!) (cherry picked from commit 4305deeaa41ea8703ebb9ea6529790dd609b3060) --- diff --git a/ldap/servers/slapd/back-ldbm/index.c b/ldap/servers/slapd/back-ldbm/index.c index f90a47c..7769791 100644 --- a/ldap/servers/slapd/back-ldbm/index.c +++ b/ldap/servers/slapd/back-ldbm/index.c @@ -693,7 +693,7 @@ index_add_mods( /* Check if the any values being deleted * also exist in a subtype. */ - for ( j=0; deleted_valueArray[j] != NULL; j++) { + for (j = 0; deleted_valueArray && deleted_valueArray[j]; j++) { if ( valuearray_find(curr_attr, evals, deleted_valueArray[j]) == -1 ) { /* If the equality flag isn't already set, set it */ if (!(flags & BE_INDEX_EQUALITY)) { diff --git a/ldap/servers/slapd/entry.c b/ldap/servers/slapd/entry.c index 8e184a6..7bfe5b1 100644 --- a/ldap/servers/slapd/entry.c +++ b/ldap/servers/slapd/entry.c @@ -3450,6 +3450,7 @@ slapi_entry_apply_mod_extension(Slapi_Entry *e, const LDAPMod *mod, int modcnt) rc = 0; break; } + ((LDAPMod *)mod)->mod_op = LDAP_MOD_IGNORE; /* we don't need it any more */ } } bail: