From: Ralph Boehme Date: Fri, 11 Jul 2025 04:30:15 +0000 (+0200) Subject: smbd: return replay-cache records in smbXsrv_open_global_traverse() X-Git-Tag: tdb-1.4.14~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fdb3e0206f1a46a81ed93b91cdb8f51ec6ab1c63;p=thirdparty%2Fsamba.git smbd: return replay-cache records in smbXsrv_open_global_traverse() Signed-off-by: Ralph Boehme Reviewed-by: Stefan Metzmacher --- diff --git a/source3/smbd/smbXsrv_open.c b/source3/smbd/smbXsrv_open.c index 1a3ab1aba97..56e94c6f4d6 100644 --- a/source3/smbd/smbXsrv_open.c +++ b/source3/smbd/smbXsrv_open.c @@ -1455,6 +1455,7 @@ fail: struct smbXsrv_open_global_traverse_state { int (*fn)(struct db_record *rec, struct smbXsrv_open_global0 *global, + TDB_DATA *rc_open_global_key, void *private_data); void *private_data; }; @@ -1469,13 +1470,22 @@ static int smbXsrv_open_global_traverse_fn(struct db_record *rec, void *data) NTSTATUS status; int ret = -1; + /* + * Currently expected fixed size of the replay cache record is the + * size of the open_global record's key and the expected size of + * the key is 32 bytes (client GUID + create GUID). + */ + if ((key.dsize == 32) && (val.dsize == sizeof(uint32_t))) { + return state->fn(rec, NULL, &val, state->private_data); + } + status = smbXsrv_open_global_parse_record( talloc_tos(), key, val, &global); if (!NT_STATUS_IS_OK(status)) { return -1; } - ret = state->fn(rec, global, state->private_data); + ret = state->fn(rec, global, NULL, state->private_data); talloc_free(global); return ret; } @@ -1483,6 +1493,7 @@ static int smbXsrv_open_global_traverse_fn(struct db_record *rec, void *data) NTSTATUS smbXsrv_open_global_traverse( int (*fn)(struct db_record *rec, struct smbXsrv_open_global0 *global, + TDB_DATA *rc_open_global_key, void *private_data), void *private_data) { diff --git a/source3/smbd/smbXsrv_open.h b/source3/smbd/smbXsrv_open.h index 6d40ce38d43..9e41afc4146 100644 --- a/source3/smbd/smbXsrv_open.h +++ b/source3/smbd/smbXsrv_open.h @@ -74,6 +74,7 @@ struct db_record; NTSTATUS smbXsrv_open_global_traverse( int (*fn)(struct db_record *rec, struct smbXsrv_open_global0 *global, + TDB_DATA *rc_open_global_key, void *private_data), void *private_data); diff --git a/source3/utils/net_serverid.c b/source3/utils/net_serverid.c index 25c7b04a07e..6b575b806cc 100644 --- a/source3/utils/net_serverid.c +++ b/source3/utils/net_serverid.c @@ -235,6 +235,7 @@ done: static int wipedbs_traverse_open(struct db_record *db_rec, struct smbXsrv_open_global0 *open, + TDB_DATA *open_global_key, void *wipedbs_state) { struct wipedbs_state *state =