]> git.sur5r.net Git - openldap/commitdiff
Finishes growing index file fix. Ready for 1.2.4?
authorJuan Gomez <gomez@openldap.org>
Thu, 8 Jul 1999 20:40:03 +0000 (20:40 +0000)
committerJuan Gomez <gomez@openldap.org>
Thu, 8 Jul 1999 20:40:03 +0000 (20:40 +0000)
CHANGES
servers/slapd/back-ldbm/index.c
servers/slapd/back-ldbm/modify.c

diff --git a/CHANGES b/CHANGES
index 9cb33fb865710d0985a1ee9683e2d9b52f2e6833..5dbf027467a7f87637b5826172a522930867238a 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,7 @@ OpenLDAP Change Log
 
 Changes included in OpenLDAP 1.2 Release Engineering
        CVS Tag: OPENLDAP_REL_ENG_1_2
+       Fixed the growing index file problem.
        Added the MDBM to the ldbm backends (memory mapped dbm)
        Fixed slapd to reap back-shell children processes
        Updated README to require BerkeleyDB 2.7.5
index e8ad03c54980223fe028d7ea35dae54e44b3b76d..80ad81b3ad5447c2f58e7dabc1903e0ff0203823 100644 (file)
@@ -88,9 +88,6 @@ index_add_mods(
                                                  id,
                                                  __INDEX_ADD_OP);
                        break;
-               case LDAP_MOD_SOFTADD:  /* SOFTADD means index was there already */
-                       rc = 0;
-                       break;
                case LDAP_MOD_DELETE:
                        rc =  index_change_values( be,
                                                   mods->mod_type,
@@ -98,6 +95,9 @@ index_add_mods(
                                                   id,
                                                   __INDEX_DEL_OP );
                        break;
+               case LDAP_MOD_SOFTADD:  /* SOFTADD means index was there */
+                       rc = 0;
+                       break;
                }
 
                if ( rc != 0 ) {
index 8dc96fcafa697cb4ae219bbf7e93d5162e898215..04e12383c8c2e2f493b4a9f989c39719de910ab8 100644 (file)
@@ -107,6 +107,7 @@ int ldbm_internal_modify(
 {
        int             i, err;
        LDAPMod         *mod;
+       Attribute       *a;
 
        if ( ((be->be_lastmod == ON)
              || ((be->be_lastmod == UNDEFINED)&&(global_lastmod == ON)))
@@ -135,6 +136,19 @@ int ldbm_internal_modify(
                        break;
 
                case LDAP_MOD_REPLACE:
+                       /* Need to remove all values from indexes before they
+                        * are lost.
+                        */
+                       if( e->e_attrs
+                           && ((a = attr_find( e->e_attrs, mod->mod_type ))
+                          != NULL) ) {
+
+                           (void) index_change_values( be,
+                                                       mod->mod_type,
+                                                       a->a_vals,
+                                                       e->e_id,
+                                                       __INDEX_DEL_OP);
+                       }
                        err = replace_values( e, mod, op->o_ndn );
                        break;
                case LDAP_MOD_SOFTADD: