diff --git a/Sources/SMBClient/Session.swift b/Sources/SMBClient/Session.swift index 7c2cc3c..b495548 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 @@ -76,6 +79,8 @@ public class Session { let response = try await send(request) + signingRequired = response.securityMode.contains(.signingRequired) + maxTransactSize = response.maxTransactSize maxReadSize = response.maxReadSize maxWriteSize = response.maxWriteSize @@ -131,6 +136,8 @@ public class Session { let response = try await send(request) sessionId = response.header.sessionId + + isAnonymous = (username ?? "").isEmpty && (password ?? "").isEmpty self.signingKey = signingKey return response @@ -682,7 +689,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...]