Browse Source

Minor code refactoring

Tal Aloni 8 years ago
parent
commit
1b31200dc3

+ 11 - 7
SMBLibrary/Server/SMB1/NTCreateHelper.cs

@@ -21,6 +21,16 @@ namespace SMBLibrary.Server.SMB1
             SMB1Session session = state.GetSession(header.UID);
             bool isExtended = (request.Flags & NTCreateFlags.NT_CREATE_REQUEST_EXTENDED_RESPONSE) > 0;
             string path = request.FileName;
+            FileAccess createAccess = NTFileStoreHelper.ToCreateFileAccess(request.DesiredAccess, request.CreateDisposition);
+            if (share is FileSystemShare)
+            {
+                if (!((FileSystemShare)share).HasAccess(session.UserName, path, createAccess, state.ClientEndPoint))
+                {
+                    header.Status = NTStatus.STATUS_ACCESS_DENIED;
+                    return new ErrorResponse(request.CommandName);
+                }
+            }
+
             if (share is NamedPipeShare)
             {
                 Stream pipeStream = ((NamedPipeShare)share).OpenPipe(path);
@@ -48,13 +58,7 @@ namespace SMBLibrary.Server.SMB1
             else // FileSystemShare
             {
                 FileSystemShare fileSystemShare = (FileSystemShare)share;
-                FileAccess createAccess = NTFileStoreHelper.ToCreateFileAccess(request.DesiredAccess, request.CreateDisposition);
-                if (!fileSystemShare.HasAccess(session.UserName, path, createAccess, state.ClientEndPoint))
-                {
-                    header.Status = NTStatus.STATUS_ACCESS_DENIED;
-                    return new ErrorResponse(request.CommandName);
-                }
-
+                
                 FileSystemEntry entry;
                 NTStatus createStatus = NTFileSystemHelper.CreateFile(out entry, fileSystemShare.FileSystem, path, request.DesiredAccess, request.CreateDisposition, request.CreateOptions, state);
                 if (createStatus != NTStatus.STATUS_SUCCESS)

+ 10 - 6
SMBLibrary/Server/SMB1/OpenAndXHelper.cs

@@ -21,6 +21,16 @@ namespace SMBLibrary.Server.SMB1
             SMB1Session session = state.GetSession(header.UID);
             bool isExtended = (request.Flags & OpenFlags.SMB_OPEN_EXTENDED_RESPONSE) > 0;
             string path = request.FileName;
+            FileAccess fileAccess = ToFileAccess(request.AccessMode.AccessMode);
+            if (share is FileSystemShare)
+            {
+                if (!((FileSystemShare)share).HasAccess(session.UserName, path, fileAccess, state.ClientEndPoint))
+                {
+                    header.Status = NTStatus.STATUS_ACCESS_DENIED;
+                    return new ErrorResponse(request.CommandName);
+                }
+            }
+
             if (share is NamedPipeShare)
             {
                 Stream pipeStream = ((NamedPipeShare)share).OpenPipe(path);
@@ -48,12 +58,6 @@ namespace SMBLibrary.Server.SMB1
             else // FileSystemShare
             {
                 FileSystemShare fileSystemShare = (FileSystemShare)share;
-                FileAccess fileAccess = ToFileAccess(request.AccessMode.AccessMode);
-                if (!fileSystemShare.HasAccess(session.UserName, path, fileAccess, state.ClientEndPoint))
-                {
-                    header.Status = NTStatus.STATUS_ACCESS_DENIED;
-                    return new ErrorResponse(request.CommandName);
-                }
 
                 IFileSystem fileSystem = fileSystemShare.FileSystem;
 

+ 10 - 5
SMBLibrary/Server/SMB2/CreateHelper.cs

@@ -22,6 +22,16 @@ namespace SMBLibrary.Server.SMB2
             {
                 path = @"\" + path;
             }
+
+            FileAccess createAccess = NTFileStoreHelper.ToCreateFileAccess(request.DesiredAccess, request.CreateDisposition);
+            if (share is FileSystemShare)
+            {
+                if (!((FileSystemShare)share).HasAccess(session.UserName, path, createAccess, state.ClientEndPoint))
+                {
+                    return new ErrorResponse(request.CommandName, NTStatus.STATUS_ACCESS_DENIED);
+                }
+            }
+
             if (share is NamedPipeShare)
             {
                 Stream pipeStream = ((NamedPipeShare)share).OpenPipe(path);
@@ -42,11 +52,6 @@ namespace SMBLibrary.Server.SMB2
             else
             {
                 FileSystemShare fileSystemShare = (FileSystemShare)share;
-                FileAccess createAccess = NTFileStoreHelper.ToCreateFileAccess(request.DesiredAccess, request.CreateDisposition);
-                if (!fileSystemShare.HasAccess(session.UserName, path, createAccess, state.ClientEndPoint))
-                {
-                    return new ErrorResponse(request.CommandName, NTStatus.STATUS_ACCESS_DENIED);
-                }
 
                 FileSystemEntry entry;
                 NTStatus createStatus = NTFileSystemHelper.CreateFile(out entry, fileSystemShare.FileSystem, path, request.DesiredAccess, request.CreateDisposition, request.CreateOptions, state);