]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
smbd: Add session_global_id and tcon_global_id to smbXsrv_open_global0
authorRalph Boehme <slow@samba.org>
Thu, 10 Jul 2025 11:10:42 +0000 (13:10 +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/librpc/idl/smbXsrv.idl
source3/smbd/smbXsrv_open.c

index a5b30493ed9153c3fb6217d2fe290f67e4fad5c8..af7335e1d2a405f02e9cdbb41e8b596750190f2e 100644 (file)
@@ -422,6 +422,8 @@ interface smbXsrv
 
        typedef struct {
                server_id                               server_id;
+               hyper                                   session_global_id;
+               uint32                                  tcon_global_id;
                uint32                                  open_global_id;
                hyper                                   open_persistent_id;
                hyper                                   open_volatile_id;
index 99fe9a2b814880d04832c782d0ef239162f61773..cd85440e909f8dd36615d03bfb09bd4003c6c0cb 100644 (file)
@@ -635,6 +635,8 @@ NTSTATUS smbXsrv_open_create(struct smbXsrv_connection *conn,
        global->server_id = messaging_server_id(conn->client->msg_ctx);
        global->open_time = now;
        global->open_owner = *current_sid;
+       global->session_global_id = session->global->session_global_id;
+       global->tcon_global_id = tcon->global->tcon_global_id;
        if (conn->protocol >= PROTOCOL_SMB2_10) {
                global->client_guid = conn->smb2.client.guid;
        }
@@ -943,6 +945,8 @@ NTSTATUS smbXsrv_open_close(struct smbXsrv_open *op, NTTIME now)
 
        op->status = NT_STATUS_FILE_CLOSED;
        global->disconnect_time = now;
+       global->session_global_id = 0;
+       global->tcon_global_id = 0;
        server_id_set_disconnected(&global->server_id);
 
        status = dbwrap_do_locked(
@@ -1234,6 +1238,8 @@ NTSTATUS smb2srv_open_lookup_replay_cache(struct smbXsrv_connection *conn,
 }
 
 struct smb2srv_open_recreate_state {
+       struct smbXsrv_session *session;
+       struct smbXsrv_tcon *tcon;
        struct smbXsrv_open *op;
        const struct GUID *client_guid;
        const struct GUID *create_guid;
@@ -1308,6 +1314,8 @@ static void smb2srv_open_recreate_fn(
 
        global->open_volatile_id = state->op->local_id;
        global->server_id = state->me;
+       global->session_global_id = state->session->global->session_global_id;
+       global->tcon_global_id = state->tcon->global->tcon_global_id;
 
        state->status = smbXsrv_open_global_store(rec, key, oldval, global);
        if (!NT_STATUS_IS_OK(state->status)) {
@@ -1333,6 +1341,8 @@ NTSTATUS smb2srv_open_recreate(struct smbXsrv_connection *conn,
 {
        struct smbXsrv_open_table *table = conn->client->open_table;
        struct smb2srv_open_recreate_state state = {
+               .session = session,
+               .tcon = tcon,
                .client_guid = &conn->client->global->client_guid,
                .create_guid = create_guid,
                .lease_key = lease_key,