]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
smbd: return replay-cache records in smbXsrv_open_global_traverse()
authorRalph Boehme <slow@samba.org>
Fri, 11 Jul 2025 04:30:15 +0000 (06:30 +0200)
committerRalph Boehme <slow@samba.org>
Tue, 5 Aug 2025 14:52:34 +0000 (14:52 +0000)
Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
source3/smbd/smbXsrv_open.c
source3/smbd/smbXsrv_open.h
source3/utils/net_serverid.c

index 1a3ab1aba97bae2a5164c340ad809c8bc2dba692..56e94c6f4d61d97f3547c0c52d0b5553c595bb19 100644 (file)
@@ -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)
 {
index 6d40ce38d436157aae5c508352ba7a27a6f5d21b..9e41afc4146369d75aea773618a80df1597e77a5 100644 (file)
@@ -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);
 
index 25c7b04a07e1976784d95afd9b07991671712f3f..6b575b806cc1588dbe6aa7cb3f2284b681eee1b4 100644 (file)
@@ -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 =