dll: FspAccessCheckEx: fix #190

This commit is contained in:
Bill Zissimopoulos 2018-10-19 21:41:52 -07:00
parent 0de00e872f
commit a292cd4d73
No known key found for this signature in database
GPG Key ID: 3D4F95D52C7B3EA3

View File

@ -341,26 +341,25 @@ FSP_API NTSTATUS FspAccessCheckEx(FSP_FILE_SYSTEM *FileSystem,
if (Request->Req.Create.UserMode) if (Request->Req.Create.UserMode)
{ {
if (0 != (FileAttributes & FILE_ATTRIBUTE_READONLY)) if (FILE_ATTRIBUTE_READONLY == (FileAttributes & (FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_DIRECTORY)) &&
(DesiredAccess & (FILE_WRITE_DATA | FILE_APPEND_DATA | FILE_ADD_SUBDIRECTORY | FILE_DELETE_CHILD)))
{ {
if (DesiredAccess & Result = STATUS_ACCESS_DENIED;
(FILE_WRITE_DATA | FILE_APPEND_DATA | FILE_ADD_SUBDIRECTORY | FILE_DELETE_CHILD)) goto exit;
{ }
Result = STATUS_ACCESS_DENIED;
goto exit; if (FILE_ATTRIBUTE_READONLY == (FileAttributes & FILE_ATTRIBUTE_READONLY) &&
} Request->Req.Create.CreateOptions & FILE_DELETE_ON_CLOSE)
if (Request->Req.Create.CreateOptions & FILE_DELETE_ON_CLOSE) {
{ Result = STATUS_CANNOT_DELETE;
Result = STATUS_CANNOT_DELETE; goto exit;
goto exit;
}
} }
if (0 == SecurityDescriptorSize) if (0 == SecurityDescriptorSize)
*PGrantedAccess = (MAXIMUM_ALLOWED & DesiredAccess) ? *PGrantedAccess = (MAXIMUM_ALLOWED & DesiredAccess) ?
FspFileGenericMapping.GenericAll : DesiredAccess; FspFileGenericMapping.GenericAll : DesiredAccess;
if (0 != (FileAttributes & FILE_ATTRIBUTE_READONLY) && if (FILE_ATTRIBUTE_READONLY == (FileAttributes & (FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_DIRECTORY)) &&
0 != (MAXIMUM_ALLOWED & DesiredAccess)) 0 != (MAXIMUM_ALLOWED & DesiredAccess))
*PGrantedAccess &= ~(FILE_WRITE_DATA | FILE_APPEND_DATA | *PGrantedAccess &= ~(FILE_WRITE_DATA | FILE_APPEND_DATA |
FILE_ADD_SUBDIRECTORY | FILE_DELETE_CHILD); FILE_ADD_SUBDIRECTORY | FILE_DELETE_CHILD);