From a6f4f166f6fdd788b9bdaeb2d340d8ce949c4f1c Mon Sep 17 00:00:00 2001 From: Tal Aloni Date: Tue, 5 Sep 2017 22:39:01 +0300 Subject: [PATCH] SMBServer: SMB1: Return STATUS_BAD_DEVICE_TYPE when applicable --- SMBLibrary/Server/SMB1/TreeConnectHelper.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/SMBLibrary/Server/SMB1/TreeConnectHelper.cs b/SMBLibrary/Server/SMB1/TreeConnectHelper.cs index 213e55c..578a9af 100644 --- a/SMBLibrary/Server/SMB1/TreeConnectHelper.cs +++ b/SMBLibrary/Server/SMB1/TreeConnectHelper.cs @@ -24,6 +24,12 @@ namespace SMBLibrary.Server.SMB1 OptionalSupportFlags supportFlags; if (String.Equals(shareName, NamedPipeShare.NamedPipeShareName, StringComparison.OrdinalIgnoreCase)) { + if (request.Service != ServiceName.AnyType && request.Service != ServiceName.NamedPipe) + { + header.Status = NTStatus.STATUS_BAD_DEVICE_TYPE; + return new ErrorResponse(request.CommandName); + } + share = services; serviceName = ServiceName.NamedPipe; supportFlags = OptionalSupportFlags.SMB_SUPPORT_SEARCH_BITS | OptionalSupportFlags.SMB_CSC_NO_CACHING; @@ -37,6 +43,12 @@ namespace SMBLibrary.Server.SMB1 return new ErrorResponse(request.CommandName); } + if (request.Service != ServiceName.AnyType && request.Service != ServiceName.DiskShare) + { + header.Status = NTStatus.STATUS_BAD_DEVICE_TYPE; + return new ErrorResponse(request.CommandName); + } + serviceName = ServiceName.DiskShare; supportFlags = OptionalSupportFlags.SMB_SUPPORT_SEARCH_BITS | GetCachingSupportFlags(((FileSystemShare)share).CachingPolicy);