From: Volker Lendecke Date: Wed, 23 Oct 2019 10:19:38 +0000 (+0200) Subject: dbwrap: Don't set rec->value in dbwrap_do_locked() X-Git-Tag: ldb-2.1.0~632 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ca8c23bb42e501d5fe7f47f6c59feb5e7524a0cf;p=thirdparty%2Fsamba.git dbwrap: Don't set rec->value in dbwrap_do_locked() We pass that via the callback now Signed-off-by: Volker Lendecke Reviewed-by: Jeremy Allison --- 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); diff --git a/source3/lib/dbwrap/dbwrap_watch.c b/source3/lib/dbwrap/dbwrap_watch.c index f406be178a3..8246fd925e2 100644 --- a/source3/lib/dbwrap/dbwrap_watch.c +++ b/source3/lib/dbwrap/dbwrap_watch.c @@ -350,9 +350,6 @@ static void dbwrap_watched_do_locked_fn( state->subrec.wrec.num_watchers * SERVER_ID_BUF_LENGTH); SMB_ASSERT(watchers != NULL); state->subrec.wrec.watchers = watchers; - - rec.value = state->subrec.wrec.data; - rec.value_valid = true; } state->fn(&rec, state->subrec.wrec.data, state->private_data);