From e88424ebc6b557a10a2be78c7b53fe315b1e447e Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Wed, 3 Jun 2015 07:25:33 +0200 Subject: [PATCH] Added patch to fix opening a readonly file with FILE_WRITE_ATTRIBUTES access (fixes Wine Staging Bug #298). --- debian/changelog | 2 + patches/patchinstall.sh | 2 + ...E_ATTRIBUTES-should-succeed-for-read.patch | 39 +++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 patches/server-File_Permissions/0006-server-FILE_WRITE_ATTRIBUTES-should-succeed-for-read.patch diff --git a/debian/changelog b/debian/changelog index 91a07107..f41f2665 100644 --- a/debian/changelog +++ b/debian/changelog @@ -8,6 +8,8 @@ wine-staging (1.7.45) UNRELEASED; urgency=low * Added patches for FileRenameInformation support (fixes Wine Staging Bug #296). * Added additional tests for behaviour of opening readonly files. + * Added patch to fix opening a readonly file with FILE_WRITE_ATTRIBUTES access + (fixes Wine Staging Bug #298). * Removed patch to fix NULL pointer dereference in get_frame_by_name (identical patch accepted upstream). -- Sebastian Lackner Sun, 31 May 2015 14:46:37 +0200 diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index e9ecfc10..37396d61 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -2973,12 +2973,14 @@ if test "$enable_server_File_Permissions" -eq 1; then patch_apply server-File_Permissions/0003-advapi32-tests-Add-tests-for-ACL-inheritance-in-Crea.patch patch_apply server-File_Permissions/0004-advapi32-tests-Add-ACL-inheritance-tests-for-creatin.patch patch_apply server-File_Permissions/0005-ntdll-tests-Added-tests-for-open-behaviour-on-readon.patch + patch_apply server-File_Permissions/0006-server-FILE_WRITE_ATTRIBUTES-should-succeed-for-read.patch ( echo '+ { "Sebastian Lackner", "server: Allow to open files without any permission bits.", 2 },'; echo '+ { "Sebastian Lackner", "server: When creating new directories temporarily give read-permissions until they are opened.", 1 },'; echo '+ { "Sebastian Lackner", "advapi32/tests: Add tests for ACL inheritance in CreateDirectoryA.", 1 },'; echo '+ { "Sebastian Lackner", "advapi32/tests: Add ACL inheritance tests for creating subdirectories with NtCreateFile.", 1 },'; echo '+ { "Qian Hong", "ntdll/tests: Added tests for open behaviour on readonly files.", 1 },'; + echo '+ { "Sebastian Lackner", "server: FILE_WRITE_ATTRIBUTES should succeed for readonly files.", 1 },'; ) >> "$patchlist" fi diff --git a/patches/server-File_Permissions/0006-server-FILE_WRITE_ATTRIBUTES-should-succeed-for-read.patch b/patches/server-File_Permissions/0006-server-FILE_WRITE_ATTRIBUTES-should-succeed-for-read.patch new file mode 100644 index 00000000..d5cac3a7 --- /dev/null +++ b/patches/server-File_Permissions/0006-server-FILE_WRITE_ATTRIBUTES-should-succeed-for-read.patch @@ -0,0 +1,39 @@ +From ecc446c4822d66b92e1d87e9eea1284ac2c8c35c Mon Sep 17 00:00:00 2001 +From: Sebastian Lackner +Date: Wed, 3 Jun 2015 05:43:31 +0200 +Subject: server: FILE_WRITE_ATTRIBUTES should succeed for readonly files. + +--- + dlls/ntdll/tests/file.c | 2 +- + server/fd.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c +index d365303..8ec367b 100644 +--- a/dlls/ntdll/tests/file.c ++++ b/dlls/ntdll/tests/file.c +@@ -2117,7 +2117,7 @@ static void test_readonly(void) + + status = pNtOpenFile(&handle, FILE_WRITE_ATTRIBUTES, &attr, &io, + FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, FILE_OPEN_FOR_BACKUP_INTENT); +- todo_wine ok(status == STATUS_SUCCESS, "got %#x\n", status); ++ ok(status == STATUS_SUCCESS, "got %#x\n", status); + CloseHandle(handle); + + status = pNtOpenFile(&handle, DELETE, &attr, &io, +diff --git a/server/fd.c b/server/fd.c +index a432ec7..14e98ac 100644 +--- a/server/fd.c ++++ b/server/fd.c +@@ -1810,7 +1810,7 @@ struct fd *open_fd( struct fd *root, const char *name, int flags, mode_t *mode, + else if (errno == EACCES) + { + /* try to change permissions temporarily to open a file descriptor */ +- if (!(access & (FILE_UNIX_WRITE_ACCESS | FILE_UNIX_READ_ACCESS | DELETE)) && ++ if (!(access & ((FILE_UNIX_WRITE_ACCESS | FILE_UNIX_READ_ACCESS | DELETE) & ~FILE_WRITE_ATTRIBUTES)) && + !stat( name, &st ) && st.st_uid == getuid() && + !chmod( name, st.st_mode | S_IRUSR )) + { +-- +2.4.2 +