]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
smbd: add smbXsrv_open_global_traverse_per_rec_persistent_read()
authorRalph Boehme <slow@samba.org>
Sun, 6 May 2018 06:49:33 +0000 (08:49 +0200)
committerRalph Boehme <slow@samba.org>
Fri, 17 Jul 2026 10:18:37 +0000 (10:18 +0000)
This can be used to traverse persistent handles.

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Anoop C S <anoopcs@samba.org>
source3/smbd/smbXsrv_open.c
source3/smbd/smbXsrv_open.h

index f97a692084835b807d59f27df459c9e895bb8614..048d6679ec8ece08aee65761170d206e43472e2a 100644 (file)
@@ -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;
+}
index a0b30fae76b70ee7e9fede35d6a2663178dd3442..74cbed476d347dddbab70988959cace9f2ce1da7 100644 (file)
@@ -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,