]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
vfs: add lease arg to SMB_VFS_DURABLE_RECONNECT()
authorRalph Boehme <slow@samba.org>
Tue, 23 Sep 2025 09:33:43 +0000 (11:33 +0200)
committerRalph Boehme <slow@samba.org>
Fri, 17 Jul 2026 10:18:36 +0000 (10:18 +0000)
This is needed with Persistent Handles to properly deal with reestablishing
leases associated with a Persistend Handle.

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Anoop C S <anoopcs@samba.org>
13 files changed:
examples/VFS/skel_opaque.c
examples/VFS/skel_transparent.c
source3/include/vfs.h
source3/include/vfs_macros.h
source3/modules/vfs_default.c
source3/modules/vfs_error_inject.c
source3/modules/vfs_full_audit.c
source3/modules/vfs_not_implemented.c
source3/modules/vfs_time_audit.c
source3/smbd/durable.c
source3/smbd/proto.h
source3/smbd/smb2_create.c
source3/smbd/vfs.c

index 5d90f6c27cb052adb1f8dd71ace6506de5d970b0..529cbb44aa5992207a8c1f1f166efc988afb6034 100644 (file)
@@ -939,6 +939,7 @@ static NTSTATUS skel_durable_reconnect(struct vfs_handle_struct *handle,
                                       struct smb_request *smb1req,
                                       struct smbXsrv_open *op,
                                       const DATA_BLOB old_cookie,
+                                      const struct smb2_lease *lease,
                                       TALLOC_CTX *mem_ctx,
                                       struct files_struct **fsp,
                                       DATA_BLOB *new_cookie)
index ad85032ba5181c35d694536227cc18588fb540e5..7b716aee0d1fb471d2ce533585e251bfeb4a606d 100644 (file)
@@ -1244,6 +1244,7 @@ static NTSTATUS skel_durable_reconnect(struct vfs_handle_struct *handle,
                                       struct smb_request *smb1req,
                                       struct smbXsrv_open *op,
                                       const DATA_BLOB old_cookie,
+                                      const struct smb2_lease *lease,
                                       TALLOC_CTX *mem_ctx,
                                       struct files_struct **fsp,
                                       DATA_BLOB *new_cookie)
@@ -1252,6 +1253,7 @@ static NTSTATUS skel_durable_reconnect(struct vfs_handle_struct *handle,
                                              smb1req,
                                              op,
                                              old_cookie,
+                                             lease,
                                              mem_ctx,
                                              fsp,
                                              new_cookie);
index a9a121b7b14a0bdbd68e15b80879e7d49a8e644f..6a800d94cde5d6c58278ffcd85ec6f23eaf83b64 100644 (file)
@@ -1352,6 +1352,7 @@ struct vfs_fn_pointers {
                                         struct smb_request *smb1req,
                                         struct smbXsrv_open *op,
                                         const DATA_BLOB old_cookie,
+                                        const struct smb2_lease *lease,
                                         TALLOC_CTX *mem_ctx,
                                         struct files_struct **fsp,
                                         DATA_BLOB *new_cookie);
@@ -1847,6 +1848,7 @@ NTSTATUS smb_vfs_call_durable_reconnect(struct vfs_handle_struct *handle,
                                        struct smb_request *smb1req,
                                        struct smbXsrv_open *op,
                                        const DATA_BLOB old_cookie,
+                                       const struct smb2_lease *lease,
                                        TALLOC_CTX *mem_ctx,
                                        struct files_struct **fsp,
                                        DATA_BLOB *new_cookie);
@@ -2272,6 +2274,7 @@ NTSTATUS vfs_not_implemented_durable_reconnect(struct vfs_handle_struct *handle,
                                               struct smb_request *smb1req,
                                               struct smbXsrv_open *op,
                                               const DATA_BLOB old_cookie,
+                                              const struct smb2_lease *lease,
                                               TALLOC_CTX *mem_ctx,
                                               struct files_struct **fsp,
                                               DATA_BLOB *new_cookie);
index d338ad1537492272ad5f4fc2f1cec9cc28b379de..0e4c5aac8cd22e481dfd7116efa9828f8af404a2 100644 (file)
        smb_vfs_call_durable_disconnect((handle)->next, \
                                        (fsp), (old_cookie), (mem_ctx), (new_cookie))
 
-#define SMB_VFS_DURABLE_RECONNECT(conn, smb1req, op, old_cookie, mem_ctx, fsp, new_cookie) \
+#define SMB_VFS_DURABLE_RECONNECT(conn, smb1req, op, old_cookie, lease, mem_ctx, fsp, new_cookie) \
        smb_vfs_call_durable_reconnect((conn)->vfs_handles, \
-                                      (smb1req), (op), (old_cookie), \
+                                      (smb1req), (op), (old_cookie), (lease), \
                                       (mem_ctx), (fsp), (new_cookie))
-#define SMB_VFS_NEXT_DURABLE_RECONNECT(handle, smb1req, op, old_cookie, mem_ctx, fsp, new_cookie) \
+#define SMB_VFS_NEXT_DURABLE_RECONNECT(handle, smb1req, op, old_cookie, lease, mem_ctx, fsp, new_cookie) \
        smb_vfs_call_durable_reconnect((handle)->next, \
-                                       (smb1req), (op), (old_cookie), \
+                                       (smb1req), (op), (old_cookie), (lease), \
                                        (mem_ctx), (fsp), (new_cookie))
 
 #define SMB_VFS_FREADDIR_ATTR(fsp, mem_ctx, attr_data) \
index c34a0384ded32cb32462cf70ce781bccf6cef00b..0c4835c7a721f0edb051473f637f10b2249c876a 100644 (file)
@@ -4043,12 +4043,13 @@ static NTSTATUS vfswrap_durable_reconnect(struct vfs_handle_struct *handle,
                                          struct smb_request *smb1req,
                                          struct smbXsrv_open *op,
                                          const DATA_BLOB old_cookie,
+                                         const struct smb2_lease *lease,
                                          TALLOC_CTX *mem_ctx,
                                          struct files_struct **fsp,
                                          DATA_BLOB *new_cookie)
 {
        return vfs_default_durable_reconnect(handle->conn, smb1req, op,
-                                            old_cookie, mem_ctx,
+                                            old_cookie, lease, mem_ctx,
                                             fsp, new_cookie);
 }
 
index dcf0de0a2d961febfa21b1a95f9a348a708f330e..1bf34597de8b323be802a9679fa3c96b896af7f5 100644 (file)
@@ -209,6 +209,7 @@ static NTSTATUS vfs_error_inject_durable_reconnect(struct vfs_handle_struct *han
                                                   struct smb_request *smb1req,
                                                   struct smbXsrv_open *op,
                                                   const DATA_BLOB old_cookie,
+                                                  const struct smb2_lease *lease,
                                                   TALLOC_CTX *mem_ctx,
                                                   struct files_struct **fsp,
                                                   DATA_BLOB *new_cookie)
@@ -229,6 +230,7 @@ static NTSTATUS vfs_error_inject_durable_reconnect(struct vfs_handle_struct *han
                                                      smb1req,
                                                      op,
                                                      old_cookie,
+                                                     lease,
                                                      mem_ctx,
                                                      fsp,
                                                      new_cookie);
@@ -258,6 +260,7 @@ static NTSTATUS vfs_error_inject_durable_reconnect(struct vfs_handle_struct *han
                                                      smb1req,
                                                      op,
                                                      old_cookie,
+                                                     lease,
                                                      mem_ctx,
                                                      fsp,
                                                      new_cookie);
@@ -274,6 +277,7 @@ static NTSTATUS vfs_error_inject_durable_reconnect(struct vfs_handle_struct *han
                                              smb1req,
                                              op,
                                              modified_cookie,
+                                             lease,
                                              mem_ctx,
                                              fsp,
                                              new_cookie);
index 1b65e714eb5690bbac74bf3ef3e4e97a0d66b39e..7d2d1e76ffa8033a07598c70e04f1b983d1d9550 100644 (file)
@@ -3099,6 +3099,7 @@ static NTSTATUS smb_full_audit_durable_reconnect(
                                struct smb_request *smb1req,
                                struct smbXsrv_open *op,
                                const DATA_BLOB old_cookie,
+                               const struct smb2_lease *lease,
                                TALLOC_CTX *mem_ctx,
                                struct files_struct **fsp,
                                DATA_BLOB *new_cookie)
@@ -3109,6 +3110,7 @@ static NTSTATUS smb_full_audit_durable_reconnect(
                                        smb1req,
                                        op,
                                        old_cookie,
+                                       lease,
                                        mem_ctx,
                                        fsp,
                                        new_cookie);
index c256e2ba4570506bb694c7b978ca8ce88f0ec518..7004229a1900984cb52a747f4437f6b74fd43ed4 100644 (file)
@@ -1032,6 +1032,7 @@ NTSTATUS vfs_not_implemented_durable_reconnect(struct vfs_handle_struct *handle,
                                               struct smb_request *smb1req,
                                               struct smbXsrv_open *op,
                                               const DATA_BLOB old_cookie,
+                                              const struct smb2_lease *lease,
                                               TALLOC_CTX *mem_ctx,
                                               struct files_struct **fsp,
                                               DATA_BLOB *new_cookie)
index a834902b3e46df0fe5c57efd59ccea2bfb751ce1..6f0853c5c2b602acb3dd7f1017e2f52dbb985241 100644 (file)
@@ -2639,6 +2639,7 @@ static NTSTATUS smb_time_audit_durable_reconnect(struct vfs_handle_struct *handl
                                                 struct smb_request *smb1req,
                                                 struct smbXsrv_open *op,
                                                 const DATA_BLOB old_cookie,
+                                                const struct smb2_lease *lease,
                                                 TALLOC_CTX *mem_ctx,
                                                 struct files_struct **fsp,
                                                 DATA_BLOB *new_cookie)
@@ -2649,7 +2650,7 @@ static NTSTATUS smb_time_audit_durable_reconnect(struct vfs_handle_struct *handl
 
        clock_gettime_mono(&ts1);
        result = SMB_VFS_NEXT_DURABLE_RECONNECT(handle, smb1req, op, old_cookie,
-                                               mem_ctx, fsp, new_cookie);
+                                               lease, mem_ctx, fsp, new_cookie);
        clock_gettime_mono(&ts2);
        timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
 
index 5feb68b37aae914a202874980a1758428968b814..22479ba56ec31e9ff7f4ab3b64d2a8c970f60961 100644 (file)
@@ -788,6 +788,7 @@ NTSTATUS vfs_default_durable_reconnect(struct connection_struct *conn,
                                       struct smb_request *smb1req,
                                       struct smbXsrv_open *op,
                                       const DATA_BLOB old_cookie,
+                                      const struct smb2_lease *lease,
                                       TALLOC_CTX *mem_ctx,
                                       files_struct **result,
                                       DATA_BLOB *new_cookie)
index 02492817dad726bd06dc2bfffa88cc95f7d5d2d8..08772a91acbd2ecb3c91590acf607a4595ecbffc 100644 (file)
@@ -1202,6 +1202,7 @@ NTSTATUS vfs_default_durable_reconnect(struct connection_struct *conn,
                                       struct smb_request *smb1req,
                                       struct smbXsrv_open *op,
                                       const DATA_BLOB old_cookie,
+                                      const struct smb2_lease *lease,
                                       TALLOC_CTX *mem_ctx,
                                       files_struct **result,
                                       DATA_BLOB *new_cookie);
index 7f61514defc0d851af271d7a66fbbc7291131ee1..a3a1edb00bacea6cef2813657f16af2147934ec4 100644 (file)
@@ -1138,6 +1138,7 @@ static struct tevent_req *smbd_smb2_create_send(TALLOC_CTX *mem_ctx,
                                                   smb1req,
                                                   state->op, /* smbXsrv_open input */
                                                   state->op->global->backend_cookie,
+                                                  state->lease_ptr,
                                                   state->op, /* TALLOC_CTX */
                                                   &state->result,
                                                   &new_cookie);
index 9f7b2cb40bf2a376cd12163cd59a10a22a1b49c5..e7f3f68b158808d8e5353714d370d50028c8c3f7 100644 (file)
@@ -2472,13 +2472,14 @@ NTSTATUS smb_vfs_call_durable_reconnect(struct vfs_handle_struct *handle,
                                        struct smb_request *smb1req,
                                        struct smbXsrv_open *op,
                                        const DATA_BLOB old_cookie,
+                                       const struct smb2_lease *lease,
                                        TALLOC_CTX *mem_ctx,
                                        struct files_struct **fsp,
                                        DATA_BLOB *new_cookie)
 {
        VFS_FIND(durable_reconnect);
        return handle->fns->durable_reconnect_fn(handle, smb1req, op,
-                                                old_cookie, mem_ctx, fsp,
+                                                old_cookie, lease, mem_ctx, fsp,
                                                 new_cookie);
 }