From: Ralph Boehme Date: Sun, 6 May 2018 06:49:33 +0000 (+0200) Subject: smbd: add smbXsrv_open_global_traverse_per_rec_persistent_read() X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=18e37a2b46a654c71194c9a0637524478bcd86ea;p=thirdparty%2Fsamba.git smbd: add smbXsrv_open_global_traverse_per_rec_persistent_read() This can be used to traverse persistent handles. Signed-off-by: Ralph Boehme Reviewed-by: Anoop C S --- diff --git a/source3/smbd/smbXsrv_open.c b/source3/smbd/smbXsrv_open.c index f97a6920848..048d6679ec8 100644 --- a/source3/smbd/smbXsrv_open.c +++ b/source3/smbd/smbXsrv_open.c @@ -1684,3 +1684,36 @@ NTSTATUS smbXsrv_replay_cleanup(const struct GUID *client_guid, } return status; } + +NTSTATUS smbXsrv_open_global_traverse_per_rec_persistent_read( + int (*fn)(struct db_record *rec, + struct smbXsrv_open_global0 *global, + TDB_DATA *rc_open_global_key, + void *private_data), + void *private_data) +{ + + NTSTATUS status; + int count = 0; + struct smbXsrv_open_global_traverse_state state = { + .fn = fn, + .private_data = private_data, + }; + + become_root(); + status = smbXsrv_open_global_init(); + if (!NT_STATUS_IS_OK(status)) { + unbecome_root(); + DEBUG(0, ("Failed to initialize open_global: %s\n", + nt_errstr(status))); + return status; + } + unbecome_root(); + + status = dbwrap_traverse_per_rec_persistent_read( + smbXsrv_open_global_db_ctx, + smbXsrv_open_global_traverse_fn, + &state, + &count); + return status; +} diff --git a/source3/smbd/smbXsrv_open.h b/source3/smbd/smbXsrv_open.h index a0b30fae76b..74cbed476d3 100644 --- a/source3/smbd/smbXsrv_open.h +++ b/source3/smbd/smbXsrv_open.h @@ -83,6 +83,12 @@ NTSTATUS smbXsrv_open_global_traverse( TDB_DATA *rc_open_global_key, void *private_data), void *private_data); +NTSTATUS smbXsrv_open_global_traverse_per_rec_persistent_read( + int (*fn)(struct db_record *rec, + struct smbXsrv_open_global0 *global, + TDB_DATA *rc_open_global_key, + void *private_data), + void *private_data); NTSTATUS smbXsrv_open_cleanup(uint64_t persistent_id); NTSTATUS smbXsrv_replay_cleanup(const struct GUID *client_guid,