]> git.sur5r.net Git - openldap/commitdiff
definitely fix NOOP in back-bdb
authorPierangelo Masarati <ando@openldap.org>
Sat, 31 Aug 2002 17:03:42 +0000 (17:03 +0000)
committerPierangelo Masarati <ando@openldap.org>
Sat, 31 Aug 2002 17:03:42 +0000 (17:03 +0000)
servers/slapd/back-bdb/modify.c
servers/slapd/back-bdb/modrdn.c

index bc50253073c24f89dcbab5b214b438b081886910..965bb0b0980dc13d514741dd9d355f3062397343 100644 (file)
@@ -166,9 +166,10 @@ int bdb_modify_internal(
                        e->e_ocflags = 0;
                }
 
-               /* check if modified attribute was indexed */
+               /* check if modified attribute was indexed
+                * but not in case of NOOP... */
                err = bdb_index_is_indexed( be, mod->sm_desc );
-               if ( err == LDAP_SUCCESS ) {
+               if ( err == LDAP_SUCCESS && !op->o_noop ) {
                        ap = attr_find( save_attrs, mod->sm_desc );
                        if ( ap ) ap->a_flags |= SLAP_ATTR_IXDEL;
 
@@ -179,17 +180,23 @@ int bdb_modify_internal(
 
        /* check that the entry still obeys the schema */
        rc = entry_schema_check( be, e, save_attrs, text, textbuf, textlen );
-       if ( rc != LDAP_SUCCESS ) {
+       if ( rc != LDAP_SUCCESS || op->o_noop ) {
                attrs_free( e->e_attrs );
                e->e_attrs = save_attrs;
+
+               if ( rc != LDAP_SUCCESS ) {
 #ifdef NEW_LOGGING
-                               LDAP_LOG ( OPERATION, ERR, 
-                                       "bdb_modify_internal: entry failed schema check %s\n", 
-                                       *text, 0, 0 );
+                       LDAP_LOG ( OPERATION, ERR, "bdb_modify_internal: "
+                               "entry failed schema check %s\n", 
+                               *text, 0, 0 );
 #else
-               Debug( LDAP_DEBUG_ANY, "entry failed schema check: %s\n",
-                       *text, 0, 0 );
+                       Debug( LDAP_DEBUG_ANY,
+                               "entry failed schema check: %s\n",
+                               *text, 0, 0 );
 #endif
+               }
+
+               /* if NOOP then silently revert to saved attrs */
                return rc;
        }
 
index 56bc41d28eda682bc2a99e81e342834c412aa7d6..54b6de974e690179b9d1611de3692751a5cbc93e 100644 (file)
@@ -752,7 +752,9 @@ retry:      /* transaction retry */
                        op->o_noop ? " (no-op)" : "", e->e_id, e->e_dn );
 #endif
                text = NULL;
-               bdb_cache_entry_commit( e );
+               if ( !noop ) {
+                       bdb_cache_entry_commit( e );
+               }
 
        } else {
 #ifdef NEW_LOGGING