summaryrefslogtreecommitdiff
path: root/lib/dbwrap
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2019-10-23 12:19:38 +0200
committerJeremy Allison <jra@samba.org>2019-11-22 23:57:46 +0000
commitca8c23bb42e501d5fe7f47f6c59feb5e7524a0cf (patch)
tree917642bce18aa0fa0f294495c9ed41a27cdad4fb /lib/dbwrap
parentffe4933c776bc89ab8a6bb09f74288b8bf7b1310 (diff)
downloadsamba-ca8c23bb42e501d5fe7f47f6c59feb5e7524a0cf.tar.gz
dbwrap: Don't set rec->value in dbwrap_do_locked()
We pass that via the callback now Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
Diffstat (limited to 'lib/dbwrap')
-rw-r--r--lib/dbwrap/dbwrap.c6
-rw-r--r--lib/dbwrap/dbwrap_tdb.c8
2 files changed, 10 insertions, 4 deletions
diff --git a/lib/dbwrap/dbwrap.c b/lib/dbwrap/dbwrap.c
index 33f0b91ea03..baab0338088 100644
--- a/lib/dbwrap/dbwrap.c
+++ b/lib/dbwrap/dbwrap.c
@@ -562,6 +562,12 @@ NTSTATUS dbwrap_do_locked(struct db_context *db, TDB_DATA key,
return NT_STATUS_NO_MEMORY;
}
+ /*
+ * Invalidate rec->value, nobody shall assume it's set from
+ * within dbwrap_do_locked().
+ */
+ rec->value_valid = false;
+
fn(rec, rec->value, private_data);
TALLOC_FREE(rec);
diff --git a/lib/dbwrap/dbwrap_tdb.c b/lib/dbwrap/dbwrap_tdb.c
index e855f1ed2d6..74b895a7736 100644
--- a/lib/dbwrap/dbwrap_tdb.c
+++ b/lib/dbwrap/dbwrap_tdb.c
@@ -214,14 +214,14 @@ static NTSTATUS db_tdb_do_locked(struct db_context *db, TDB_DATA key,
rec = (struct db_record) {
.db = db, .key = key,
- .value = (struct TDB_DATA) { .dptr = buf,
- .dsize = talloc_get_size(buf) },
- .value_valid = true,
+ .value_valid = false,
.storev = db_tdb_storev, .delete_rec = db_tdb_delete,
.private_data = ctx
};
- fn(&rec, rec.value, private_data);
+ fn(&rec,
+ (TDB_DATA) { .dptr = buf, .dsize = talloc_get_size(buf) },
+ private_data);
tdb_chainunlock(ctx->wtdb->tdb, key);