]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
Add SOFTADD OP
authorJuan Gomez <gomez@openldap.org>
Tue, 25 May 1999 23:07:05 +0000 (23:07 +0000)
committerJuan Gomez <gomez@openldap.org>
Tue, 25 May 1999 23:07:05 +0000 (23:07 +0000)
servers/slapd/back-ldbm/modify.c

index 3772d423848d3f0162bc3cdd64abcd7a2edbd2dc..8dc96fcafa697cb4ae219bbf7e93d5162e898215 100644 (file)
@@ -113,7 +113,7 @@ int ldbm_internal_modify(
             && (be->be_update_ndn == NULL)) {
 
                /* XXX: It may be wrong, it changes mod time even if 
-                * mod fails!
+                * mod fails! I also Think this is leaking memory...
                 */
                add_lastmods( op, &mods );
 
@@ -137,6 +137,19 @@ int ldbm_internal_modify(
                case LDAP_MOD_REPLACE:
                        err = replace_values( e, mod, op->o_ndn );
                        break;
+               case LDAP_MOD_SOFTADD:
+                       /* Avoid problems in index_add_mods()
+                        * We need to add index if necessary.
+                        */
+                       mod->mod_op = LDAP_MOD_ADD;
+                       if ( (err = add_values( e, mod, op->o_ndn ))
+                               ==  LDAP_TYPE_OR_VALUE_EXISTS ) {
+                               err = LDAP_SUCCESS;
+                               mod->mod_op = LDAP_MOD_SOFTADD;
+                       }
+                       break;
                }
 
                if ( err != LDAP_SUCCESS ) {