]> git.sur5r.net Git - openldap/commitdiff
ITS#7778 fix regression from #7329
authorHoward Chu <hyc@openldap.org>
Mon, 13 Jan 2014 19:26:46 +0000 (11:26 -0800)
committerHoward Chu <hyc@openldap.org>
Mon, 13 Jan 2014 19:26:46 +0000 (11:26 -0800)
servers/slapd/back-bdb/modify.c
servers/slapd/back-mdb/modify.c

index 3cab8770eea34e91ac93e0f023e875bf4a458f4c..a2d7ec03b10180cf630029b191ca1d49aceaa167 100644 (file)
@@ -389,6 +389,7 @@ int bdb_modify_internal(
                                        ap->a_nvals,
                                        e->e_id, SLAP_INDEX_ADD_OP );
                        } else {
+                               int found = 0;
                                /* if this was only an add, we only need to index
                                 * the added values.
                                 */
@@ -396,6 +397,7 @@ int bdb_modify_internal(
                                        struct berval *vals;
                                        if ( ml->sml_desc != ap->a_desc || !ml->sml_numvals )
                                                continue;
+                                       found = 1;
                                        switch( ml->sml_op ) {
                                        case LDAP_MOD_ADD:
                                        case LDAP_MOD_REPLACE:
@@ -415,6 +417,15 @@ int bdb_modify_internal(
                                        if ( rc )
                                                break;
                                }
+                               /* This attr was affected by a modify of a subtype, so
+                                * there was no direct match in the modlist. Just readd
+                                * all of its values.
+                                */
+                               if ( !found ) {
+                                       rc = bdb_index_values( op, tid, ap->a_desc,
+                                               ap->a_nvals,
+                                               e->e_id, SLAP_INDEX_ADD_OP );
+                               }
                        }
                        if ( rc != LDAP_SUCCESS ) {
                                Debug( LDAP_DEBUG_ANY,
index 44805b6e4e25f21856c48a5a57d375489ab13b12..529be7194c44ce8ea06f2f3eba569c417c81ce3b 100644 (file)
@@ -389,6 +389,7 @@ int mdb_modify_internal(
                                        ap->a_nvals,
                                        e->e_id, SLAP_INDEX_ADD_OP );
                        } else {
+                               int found = 0;
                                /* if this was only an add, we only need to index
                                 * the added values.
                                 */
@@ -396,6 +397,7 @@ int mdb_modify_internal(
                                        struct berval *vals;
                                        if ( ml->sml_desc != ap->a_desc || !ml->sml_numvals )
                                                continue;
+                                       found = 1;
                                        switch( ml->sml_op ) {
                                        case LDAP_MOD_ADD:
                                        case LDAP_MOD_REPLACE:
@@ -415,6 +417,15 @@ int mdb_modify_internal(
                                        if ( rc )
                                                break;
                                }
+                               /* This attr was affected by a modify of a subtype, so
+                                * there was no direct match in the modlist. Just readd
+                                * all of its values.
+                                */
+                               if ( !found ) {
+                                       rc = mdb_index_values( op, tid, ap->a_desc,
+                                               ap->a_nvals,
+                                               e->e_id, SLAP_INDEX_ADD_OP );
+                               }
                        }
                        if ( rc != LDAP_SUCCESS ) {
                                Debug( LDAP_DEBUG_ANY,