]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3/librpc: smbXsrv.idl: add and fill tcon->smb_max_lease_mask
authorRalph Boehme <slow@samba.org>
Fri, 28 Nov 2025 09:57:43 +0000 (10:57 +0100)
committerRalph Boehme <slow@samba.org>
Fri, 17 Jul 2026 10:18:36 +0000 (10:18 +0000)
This adds the following paremetric options

smb1:max lease mask = RWH (default:RWH)
smb2:max lease mask = RWH (default:RWH)

For now keep them as "internal" undocumented parametric options. If we learn
about real world usecases in the future, we can then look into turning them into
documented options.

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Anoop C S <anoopcs@samba.org>
source3/librpc/idl/smbXsrv.idl
source3/smbd/smb1_service.c
source3/smbd/smb2_tcon.c

index e75b97975ea8c5b65a2b056754aaa3cb44ef7e0d..d798af65936a376d13d4409c138ad0d58d911ff7 100644 (file)
@@ -403,6 +403,7 @@ interface smbXsrv
                uint8                                   share_type;
                uint32                                  share_flags;
                uint32                                  capabilities;
+               uint32                                  smb_max_lease_mask;
                [ignore] connection_struct              *compat;
        } smbXsrv_tcon;
 
index 94cc3a042c1f8bacf4ffda8b6601c32c531f234f..5311006526062276555c1f20defd656fec1f1bc7 100644 (file)
@@ -53,6 +53,7 @@ static connection_struct *make_connection_smb1(struct smb_request *req,
        struct smbXsrv_tcon *tcon;
        NTSTATUS status;
        struct connection_struct *conn;
+       const char *lease_mask = NULL;
 
        session_global_id = req->session->global->session_global_id;
        share_name = lp_servicename(talloc_tos(), lp_sub, snum);
@@ -110,8 +111,14 @@ static connection_struct *make_connection_smb1(struct smb_request *req,
                return NULL;
        }
 
+       lease_mask = lp_parm_const_string(SNUM(tcon->compat),
+                                         "smb1",
+                                         "max lease mask",
+                                         "RWH");
+
        tcon->compat = talloc_move(tcon, &conn);
        tcon->status = NT_STATUS_OK;
+       tcon->smb_max_lease_mask = smb2_util_lease_state(lease_mask);
 
        *pstatus = NT_STATUS_OK;
 
index 27a83e47be137d94a50752a36b0ab3fa0d76b0d3..580c126fba5796d9e78ab203326af908c706e21f 100644 (file)
@@ -222,6 +222,7 @@ static NTSTATUS smbd_smb2_tree_connect(struct smbd_smb2_request *req,
        uint32_t session_global_id;
        char *share_name = NULL;
        uint8_t encryption_flags = 0;
+       const char *lease_mask = NULL;
 
        *disconnect = false;
 
@@ -508,6 +509,12 @@ static NTSTATUS smbd_smb2_tree_connect(struct smbd_smb2_request *req,
                }
        }
 
+       lease_mask = lp_parm_const_string(SNUM(tcon->compat),
+                                         "smb2",
+                                         "max lease mask",
+                                         "RWH");
+       tcon->smb_max_lease_mask = smb2_util_lease_state(lease_mask);
+
        *out_share_type = tcon->share_type;
        *out_share_flags = tcon->share_flags;
        *out_capabilities = tcon->capabilities;