]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
dbwrap: Don't set rec->value in dbwrap_do_locked()
authorVolker Lendecke <vl@samba.org>
Wed, 23 Oct 2019 10:19:38 +0000 (12:19 +0200)
committerJeremy Allison <jra@samba.org>
Fri, 22 Nov 2019 23:57:46 +0000 (23:57 +0000)
We pass that via the callback now

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
lib/dbwrap/dbwrap.c
lib/dbwrap/dbwrap_tdb.c
source3/lib/dbwrap/dbwrap_watch.c

index 33f0b91ea03011d91ee5722f5ccb57273d47993d..baab0338088daf29e2e50fc8d2f22579319ac50c 100644 (file)
@@ -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);
index e855f1ed2d615d63d120d835eef64b12fc06e4ba..74b895a7736af66cfd6f09f258182fc839f77aab 100644 (file)
@@ -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);
 
index f406be178a3046628a771491e07e7cb99532d24b..8246fd925e2bba2b553eb94f862339fcf1d72e29 100644 (file)
@@ -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);