]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
lib/dbwrap: don't alter the record on failure in db_rbt_store()
authorStefan Metzmacher <metze@samba.org>
Wed, 30 May 2012 14:50:06 +0000 (16:50 +0200)
committerStefan Metzmacher <metze@samba.org>
Wed, 30 May 2012 22:53:19 +0000 (00:53 +0200)
metze

lib/dbwrap/dbwrap_rbt.c

index a87b85fe276f7455b23026045bbea9f71e904742..2cc52b1da61597ca9d005e0aaa460248733cad3d 100644 (file)
@@ -121,7 +121,17 @@ static NTSTATUS db_rbt_store(struct db_record *rec, TDB_DATA data, int flag)
                        rec_priv->node->valuesize = data.dsize;
                        return NT_STATUS_OK;
                }
+       }
+
+       node = (struct db_rbt_node *)talloc_size(db_ctx,
+               offsetof(struct db_rbt_node, data) + rec->key.dsize
+               + data.dsize);
+
+       if (node == NULL) {
+               return NT_STATUS_NO_MEMORY;
+       }
 
+       if (rec_priv->node != NULL) {
                /*
                 * We need to delete the key from the tree and start fresh,
                 * there's not enough space in the existing record
@@ -135,15 +145,6 @@ static NTSTATUS db_rbt_store(struct db_record *rec, TDB_DATA data, int flag)
                 */
        }
 
-       node = (struct db_rbt_node *)talloc_size(db_ctx,
-               offsetof(struct db_rbt_node, data) + rec->key.dsize
-               + data.dsize);
-
-       if (node == NULL) {
-               TALLOC_FREE(rec_priv->node);
-               return NT_STATUS_NO_MEMORY;
-       }
-
        ZERO_STRUCT(node->rb_node);
 
        node->keysize = rec->key.dsize;