From 5324b2ab90c761b0167197502d7b80b38865a466 Mon Sep 17 00:00:00 2001 From: Kishikawa Katsumi Date: Mon, 9 Dec 2024 02:26:33 +0900 Subject: [PATCH] Disable packet signing for anonymous login --- Sources/SMBClient/Session.swift | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Sources/SMBClient/Session.swift b/Sources/SMBClient/Session.swift index f12ba3d..716ff36 100644 --- a/Sources/SMBClient/Session.swift +++ b/Sources/SMBClient/Session.swift @@ -5,6 +5,8 @@ public class Session { private var sessionId: UInt64 = 0 private(set) var treeId: UInt32 = 0 + private var isAnonymous = false + private var signingRequired = false private var signingKey: Data? public private(set) var maxTransactSize: UInt32 = 0 @@ -42,6 +44,7 @@ public class Session { session.sessionId = sessionId session.treeId = 0 + session.signingRequired = signingRequired session.signingKey = signingKey session.maxTransactSize = maxTransactSize @@ -77,6 +80,8 @@ public class Session { let data = try await send(request.encoded()) let response = Negotiate.Response(data: data) + signingRequired = response.securityMode.contains(.signingRequired) + maxTransactSize = response.maxTransactSize maxReadSize = response.maxReadSize maxWriteSize = response.maxWriteSize @@ -133,6 +138,8 @@ public class Session { let response = SessionSetup.Response(data: data) sessionId = response.header.sessionId + + isAnonymous = (username ?? "").isEmpty && (password ?? "").isEmpty self.signingKey = signingKey return response @@ -707,7 +714,7 @@ public class Session { } private func sign(_ packet: Data) -> Data { - if let signingKey { + if let signingKey, signingRequired, !isAnonymous { var header = Header(data: packet[..<64]) let payload = packet[64...]