From 642a7d9a7bfbe5876076045b955a6b5b641d0985 Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Tue, 19 Jan 2016 18:46:23 -0800 Subject: [PATCH] dll: FspAccessCheckEx --- src/dll/create.c | 8 +++++--- tst/winfsp-tests/create-test.c | 5 +++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/dll/create.c b/src/dll/create.c index e702b586..6d64295b 100644 --- a/src/dll/create.c +++ b/src/dll/create.c @@ -60,7 +60,9 @@ FSP_API NTSTATUS FspAccessCheckEx(FSP_FILE_SYSTEM *FileSystem, DWORD FileAttributes; PSECURITY_DESCRIPTOR SecurityDescriptor = 0; SIZE_T SecurityDescriptorSize; - DWORD PrivilegeSetLength = 0; + UINT8 PrivilegeSetBuf[sizeof(PRIVILEGE_SET) + 15 * sizeof(LUID_AND_ATTRIBUTES)]; + PPRIVILEGE_SET PrivilegeSet = (PVOID)PrivilegeSetBuf; + DWORD PrivilegeSetLength = sizeof PrivilegeSetBuf; DWORD TraverseAccess; BOOL AccessStatus; @@ -104,7 +106,7 @@ FSP_API NTSTATUS FspAccessCheckEx(FSP_FILE_SYSTEM *FileSystem, if (0 < SecurityDescriptorSize) { if (AccessCheck(SecurityDescriptor, (HANDLE)Request->Req.Create.AccessToken, FILE_TRAVERSE, - &FspFileGenericMapping, 0, &PrivilegeSetLength, &TraverseAccess, &AccessStatus)) + &FspFileGenericMapping, PrivilegeSet, &PrivilegeSetLength, &TraverseAccess, &AccessStatus)) Result = AccessStatus ? STATUS_SUCCESS : STATUS_ACCESS_DENIED; else Result = FspNtStatusFromWin32(GetLastError()); @@ -124,7 +126,7 @@ FSP_API NTSTATUS FspAccessCheckEx(FSP_FILE_SYSTEM *FileSystem, if (0 < SecurityDescriptorSize) { if (AccessCheck(SecurityDescriptor, (HANDLE)Request->Req.Create.AccessToken, DesiredAccess, - &FspFileGenericMapping, 0, &PrivilegeSetLength, PGrantedAccess, &AccessStatus)) + &FspFileGenericMapping, PrivilegeSet, &PrivilegeSetLength, PGrantedAccess, &AccessStatus)) Result = AccessStatus ? STATUS_SUCCESS : STATUS_ACCESS_DENIED; else Result = FspNtStatusFromWin32(GetLastError()); diff --git a/tst/winfsp-tests/create-test.c b/tst/winfsp-tests/create-test.c index fb92f469..ec38439b 100644 --- a/tst/winfsp-tests/create-test.c +++ b/tst/winfsp-tests/create-test.c @@ -25,6 +25,11 @@ void create_dotest(ULONG Flags, PWSTR Prefix) ASSERT(INVALID_HANDLE_VALUE != Handle); CloseHandle(Handle); + Handle = CreateFileW(FilePath, + GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); + ASSERT(INVALID_HANDLE_VALUE != Handle); + CloseHandle(Handle); + memfs_stop(memfs); }