SMB1: set SMB_CSC_NO_CACHING on IPC share

This commit is contained in:
Tal Aloni 2017-02-26 17:11:51 +02:00
parent 4390f2e1a0
commit 1d532ed758

View file

@ -21,15 +21,18 @@ namespace SMBLibrary.Server.SMB1
string shareName = ServerPathUtils.GetShareName(request.Path);
ISMBShare share;
ServiceName serviceName;
OptionalSupportFlags supportFlags;
if (String.Equals(shareName, NamedPipeShare.NamedPipeShareName, StringComparison.InvariantCultureIgnoreCase))
{
share = services;
serviceName = ServiceName.NamedPipe;
supportFlags = OptionalSupportFlags.SMB_SUPPORT_SEARCH_BITS | OptionalSupportFlags.SMB_CSC_NO_CACHING;
}
else
{
share = shares.GetShareFromName(shareName);
serviceName = ServiceName.DiskShare;
supportFlags = OptionalSupportFlags.SMB_SUPPORT_SEARCH_BITS | OptionalSupportFlags.SMB_CSC_CACHE_MANUAL_REINT;
if (share == null)
{
header.Status = NTStatus.STATUS_OBJECT_PATH_NOT_FOUND;
@ -51,27 +54,27 @@ namespace SMBLibrary.Server.SMB1
header.TID = treeID.Value;
if (isExtended)
{
return CreateTreeConnectResponseExtended(serviceName);
return CreateTreeConnectResponseExtended(serviceName, supportFlags);
}
else
{
return CreateTreeConnectResponse(serviceName);
return CreateTreeConnectResponse(serviceName, supportFlags);
}
}
private static TreeConnectAndXResponse CreateTreeConnectResponse(ServiceName serviceName)
private static TreeConnectAndXResponse CreateTreeConnectResponse(ServiceName serviceName, OptionalSupportFlags supportFlags)
{
TreeConnectAndXResponse response = new TreeConnectAndXResponse();
response.OptionalSupport = OptionalSupportFlags.SMB_SUPPORT_SEARCH_BITS;
response.OptionalSupport = supportFlags;
response.NativeFileSystem = String.Empty;
response.Service = serviceName;
return response;
}
private static TreeConnectAndXResponseExtended CreateTreeConnectResponseExtended(ServiceName serviceName)
private static TreeConnectAndXResponseExtended CreateTreeConnectResponseExtended(ServiceName serviceName, OptionalSupportFlags supportFlags)
{
TreeConnectAndXResponseExtended response = new TreeConnectAndXResponseExtended();
response.OptionalSupport = OptionalSupportFlags.SMB_SUPPORT_SEARCH_BITS;
response.OptionalSupport = supportFlags;
response.MaximalShareAccessRights.File = FileAccessMask.FILE_READ_DATA | FileAccessMask.FILE_WRITE_DATA | FileAccessMask.FILE_APPEND_DATA |
FileAccessMask.FILE_READ_EA | FileAccessMask.FILE_WRITE_EA |
FileAccessMask.FILE_EXECUTE |