From: Ralph Boehme Date: Thu, 22 May 2025 15:50:46 +0000 (+0200) Subject: smbtorture: add support for closing a handle when receiving a lease break X-Git-Tag: samba-4.22.2~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=31f4023ce9ffb9a682cdbec540417432221f12a9;p=thirdparty%2Fsamba.git smbtorture: add support for closing a handle when receiving a lease break BUG: https://bugzilla.samba.org/show_bug.cgi?id=15861 Signed-off-by: Ralph Boehme Reviewed-by: Bjoern Jacke (cherry picked from commit d88885b77cd9d86969eac2cd2010ed31e329106a) --- diff --git a/source4/torture/smb2/lease_break_handler.c b/source4/torture/smb2/lease_break_handler.c index b33e0cb31e9..ea0dfc40e26 100644 --- a/source4/torture/smb2/lease_break_handler.c +++ b/source4/torture/smb2/lease_break_handler.c @@ -42,6 +42,17 @@ static void torture_lease_break_callback(struct smb2_request *req) return; } +static void torture_lease_break_close_callback(struct smb2_request *req) +{ + NTSTATUS status; + + status = smb2_close_recv(req, &lease_break_info.close); + if (!NT_STATUS_IS_OK(status)) { + lease_break_info.failures++; + } + return; +} + /* a lease break request handler */ bool torture_lease_handler(struct smb2_transport *transport, const struct smb2_lease_break *lb, @@ -64,6 +75,25 @@ bool torture_lease_handler(struct smb2_transport *transport, lease_break_info.lease_break = *lb; lease_break_info.count++; + if (!smb2_util_handle_empty(lease_break_info.lease_handle) && + (lb->current_lease.lease_state & SMB2_LEASE_HANDLE) && + !(lb->new_lease_state & SMB2_LEASE_HANDLE)) + { + torture_comment(lease_break_info.tctx, + "transport[%p] closing handle\n", + transport); + + ZERO_STRUCT(lease_break_info.close); + lease_break_info.close.in.file.handle = + lease_break_info.lease_handle; + ZERO_STRUCT(lease_break_info.lease_handle); + + req = smb2_close_send(tree, &lease_break_info.close); + req->async.fn = torture_lease_break_close_callback; + req->async.private_data = NULL; + return true; + } + if (lease_break_info.lease_skip_ack) { torture_comment(lease_break_info.tctx, "transport[%p] Skip %s to %s in lease handler\n", diff --git a/source4/torture/smb2/lease_break_handler.h b/source4/torture/smb2/lease_break_handler.h index 5dffbb0f3b8..731ac3a9e12 100644 --- a/source4/torture/smb2/lease_break_handler.h +++ b/source4/torture/smb2/lease_break_handler.h @@ -28,6 +28,10 @@ struct lease_break_info { struct smb2_transport *lease_transport; bool lease_skip_ack; struct smb2_lease_break_ack lease_break_ack; + + struct smb2_handle lease_handle; + struct smb2_close close; + int count; int failures;