]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3/dbwrap_watch: avoid leaking backend db handle in traverses
authorRalph Boehme <slow@samba.org>
Mon, 23 Jun 2025 08:17:32 +0000 (10:17 +0200)
committerRalph Boehme <slow@samba.org>
Tue, 5 Aug 2025 14:52:34 +0000 (14:52 +0000)
Currently in a traverse callback dbwrap_record_get_db() returns the backend db
handle.

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
source3/lib/dbwrap/dbwrap_watch.c

index df931192c21bb5bd59510a69c6985ebaeee44758..e62aba91090ae240b76fe70835c51c02adf8b13c 100644 (file)
@@ -653,6 +653,7 @@ static NTSTATUS dbwrap_watched_delete(struct db_record *rec)
 }
 
 struct dbwrap_watched_traverse_state {
+       struct db_context *db;
        int (*fn)(struct db_record *rec, void *private_data);
        void *private_data;
 };
@@ -672,6 +673,7 @@ static int dbwrap_watched_traverse_fn(struct db_record *rec,
                return 0;
        }
        prec.value_valid = true;
+       prec.db = state->db;
 
        return state->fn(&prec, state->private_data);
 }
@@ -684,7 +686,7 @@ static int dbwrap_watched_traverse(struct db_context *db,
        struct db_watched_ctx *ctx = talloc_get_type_abort(
                db->private_data, struct db_watched_ctx);
        struct dbwrap_watched_traverse_state state = {
-               .fn = fn, .private_data = private_data };
+               .db = db, .fn = fn, .private_data = private_data };
        NTSTATUS status;
        int ret;
 
@@ -704,7 +706,7 @@ static int dbwrap_watched_traverse_read(struct db_context *db,
        struct db_watched_ctx *ctx = talloc_get_type_abort(
                db->private_data, struct db_watched_ctx);
        struct dbwrap_watched_traverse_state state = {
-               .fn = fn, .private_data = private_data };
+               .db = db, .fn = fn, .private_data = private_data };
        NTSTATUS status;
        int ret;