From e6f9a449cd76332193174f4ed4fb945daa163339 Mon Sep 17 00:00:00 2001 From: Zebediah Figura Date: Mon, 10 Oct 2022 22:27:34 -0500 Subject: [PATCH] Rebase against 16c6c249a5134de2422fbd3471ead7425c968301. --- ...retrieving-DOS-attributes-in-fd_-get.patch | 122 ------------- ...storing-DOS-attributes-in-NtSetInfor.patch | 160 ------------------ ...storing-DOS-attributes-in-NtCreateFi.patch | 154 ----------------- patches/ntdll-DOS_Attributes/definition | 2 + ...-support-for-creating-reparse-points.patch | 28 +-- ...t-for-testing-for-reparse-points-wit.patch | 22 +-- patches/ntdll-Junction_Points/definition | 1 - patches/patchinstall.sh | 46 +---- ...ement-ISpObjectTokenEnumBuilder-Item.patch | 20 ++- ...-sapi-Implement-ISpObjectToken-GetId.patch | 114 ------------- patches/server-Stored_ACLs/definition | 1 - ...plement-NewMenu-with-new-folder-item.patch | 22 +-- staging/upstream-commit | 2 +- 13 files changed, 58 insertions(+), 636 deletions(-) delete mode 100644 patches/ntdll-DOS_Attributes/0001-ntdll-Implement-retrieving-DOS-attributes-in-fd_-get.patch delete mode 100644 patches/ntdll-DOS_Attributes/0003-ntdll-Implement-storing-DOS-attributes-in-NtSetInfor.patch delete mode 100644 patches/ntdll-DOS_Attributes/0004-ntdll-Implement-storing-DOS-attributes-in-NtCreateFi.patch delete mode 100644 patches/sapi-iteration-tokens/0006-sapi-Implement-ISpObjectToken-GetId.patch diff --git a/patches/ntdll-DOS_Attributes/0001-ntdll-Implement-retrieving-DOS-attributes-in-fd_-get.patch b/patches/ntdll-DOS_Attributes/0001-ntdll-Implement-retrieving-DOS-attributes-in-fd_-get.patch deleted file mode 100644 index b1ebb38e..00000000 --- a/patches/ntdll-DOS_Attributes/0001-ntdll-Implement-retrieving-DOS-attributes-in-fd_-get.patch +++ /dev/null @@ -1,122 +0,0 @@ -From 80cb1bf9077b1e754fc2f3426229733c3417c397 Mon Sep 17 00:00:00 2001 -From: "Erich E. Hoover" -Date: Tue, 19 Aug 2014 22:10:49 -0600 -Subject: [PATCH] ntdll: Implement retrieving DOS attributes in - [fd_]get_file_info(). - ---- - configure.ac | 12 ++++++++++++ - dlls/ntdll/unix/file.c | 39 ++++++++++++++++++++++++++++++++++++++- - 2 files changed, 50 insertions(+), 1 deletion(-) - -diff --git a/configure.ac b/configure.ac -index c68c5975e63..84efc670ca4 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -64,6 +64,7 @@ AC_ARG_WITH(unwind, AS_HELP_STRING([--without-unwind],[do not use the libunwi - AC_ARG_WITH(usb, AS_HELP_STRING([--without-usb],[do not use the libusb library])) - AC_ARG_WITH(v4l2, AS_HELP_STRING([--without-v4l2],[do not use v4l2 (video capture)])) - AC_ARG_WITH(vulkan, AS_HELP_STRING([--without-vulkan],[do not use Vulkan])) -+AC_ARG_WITH(xattr, AS_HELP_STRING([--without-xattr],[do not use xattr (security attributes support)])) - AC_ARG_WITH(xcomposite,AS_HELP_STRING([--without-xcomposite],[do not use the Xcomposite extension]), - [if test "x$withval" = "xno"; then ac_cv_header_X11_extensions_Xcomposite_h=no; fi]) - AC_ARG_WITH(xcursor, AS_HELP_STRING([--without-xcursor],[do not use the Xcursor extension]), -@@ -634,6 +635,17 @@ AC_CHECK_HEADERS([libprocstat.h],,, - #include - #endif]) - -+if test "x$with_xattr" != "xno" -+then -+ AC_CHECK_HEADERS(attr/xattr.h, [HAVE_XATTR=1]) -+fi -+if test "x$with_xattr" = "xyes" -+then -+ WINE_ERROR_WITH(xattr,[test "x$HAVE_XATTR" = "x"],[xattr ${notice_platform}development files \ -+not found. Wine will be built without extended attribute support, which probably isn't what you \ -+want. You will need to install ${notice_platform}development packages of libattr at the very least.]) -+fi -+ - dnl **** Check for working dll **** - - AC_SUBST(DLLFLAGS,"") -diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c -index a29b5cbb980..1ae4645c6fb 100644 ---- a/dlls/ntdll/unix/file.c -+++ b/dlls/ntdll/unix/file.c -@@ -98,6 +98,9 @@ - #ifdef HAVE_SYS_STATFS_H - #include - #endif -+#ifdef HAVE_ATTR_XATTR_H -+#include -+#endif - #include - #include - -@@ -355,6 +358,20 @@ NTSTATUS errno_to_status( int err ) - } - } - -+#ifndef XATTR_USER_PREFIX -+#define XATTR_USER_PREFIX "user." -+#endif -+ -+static int xattr_get( const char *path, const char *name, void *value, size_t size ) -+{ -+#if defined(HAVE_ATTR_XATTR_H) -+ return getxattr( path, name, value, size ); -+#else -+ errno = ENOSYS; -+ return -1; -+#endif -+} -+ - /* get space from the current directory data buffer, allocating a new one if necessary */ - static void *get_dir_data_space( struct dir_data *data, unsigned int size ) - { -@@ -1436,6 +1453,22 @@ static BOOL append_entry( struct dir_data *data, const char *long_name, - } - - -+/* Match the Samba conventions for storing DOS file attributes */ -+#define SAMBA_XATTR_DOS_ATTRIB XATTR_USER_PREFIX "DOSATTRIB" -+/* We are only interested in some attributes, the others have corresponding Unix attributes */ -+#define XATTR_ATTRIBS_MASK (FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM) -+ -+/* decode the xattr-stored DOS attributes */ -+static inline int get_file_xattr( char *hexattr, int attrlen ) -+{ -+ if (attrlen > 2 && hexattr[0] == '0' && hexattr[1] == 'x') -+ { -+ hexattr[attrlen] = 0; -+ return strtol( hexattr+2, NULL, 16 ) & XATTR_ATTRIBS_MASK; -+ } -+ return 0; -+} -+ - /* fetch the attributes of a file */ - static inline ULONG get_file_attributes( const struct stat *st ) - { -@@ -1479,7 +1512,8 @@ static int fd_get_file_info( int fd, unsigned int options, struct stat *st, ULON - static int get_file_info( const char *path, struct stat *st, ULONG *attr ) - { - char *parent_path; -- int ret; -+ char hexattr[11]; -+ int len, ret; - - *attr = 0; - ret = lstat( path, st ); -@@ -1505,6 +1539,9 @@ static int get_file_info( const char *path, struct stat *st, ULONG *attr ) - free( parent_path ); - } - *attr |= get_file_attributes( st ); -+ len = xattr_get( path, SAMBA_XATTR_DOS_ATTRIB, hexattr, sizeof(hexattr)-1 ); -+ if (len == -1) return ret; -+ *attr |= get_file_xattr( hexattr, len ); - return ret; - } - --- -2.34.1 - diff --git a/patches/ntdll-DOS_Attributes/0003-ntdll-Implement-storing-DOS-attributes-in-NtSetInfor.patch b/patches/ntdll-DOS_Attributes/0003-ntdll-Implement-storing-DOS-attributes-in-NtSetInfor.patch deleted file mode 100644 index a4ff3290..00000000 --- a/patches/ntdll-DOS_Attributes/0003-ntdll-Implement-storing-DOS-attributes-in-NtSetInfor.patch +++ /dev/null @@ -1,160 +0,0 @@ -From 49f8ae15c8065c9133e0c08eaba68049cdb85e0b Mon Sep 17 00:00:00 2001 -From: "Erich E. Hoover" -Date: Wed, 20 Aug 2014 00:08:52 -0600 -Subject: [PATCH] ntdll: Implement storing DOS attributes in - NtSetInformationFile. - ---- - dlls/ntdll/tests/file.c | 8 ++--- - dlls/ntdll/unix/file.c | 74 ++++++++++++++++++++++++++++++----------- - 2 files changed, 58 insertions(+), 24 deletions(-) - -diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c -index 4014b395b56..ad718fab828 100644 ---- a/dlls/ntdll/tests/file.c -+++ b/dlls/ntdll/tests/file.c -@@ -1401,7 +1401,7 @@ static void test_file_basic_information(void) - memset(&fbi, 0, sizeof(fbi)); - res = pNtQueryInformationFile(h, &io, &fbi, sizeof fbi, FileBasicInformation); - ok ( res == STATUS_SUCCESS, "can't get attributes\n"); -- todo_wine ok ( (fbi.FileAttributes & attrib_mask) == FILE_ATTRIBUTE_SYSTEM, "attribute %lx not FILE_ATTRIBUTE_SYSTEM\n", fbi.FileAttributes ); -+ ok ( (fbi.FileAttributes & attrib_mask) == FILE_ATTRIBUTE_SYSTEM, "attribute %lx not FILE_ATTRIBUTE_SYSTEM (ok in old linux without xattr)\n", fbi.FileAttributes ); - - /* Then HIDDEN */ - memset(&fbi, 0, sizeof(fbi)); -@@ -1414,7 +1414,7 @@ static void test_file_basic_information(void) - memset(&fbi, 0, sizeof(fbi)); - res = pNtQueryInformationFile(h, &io, &fbi, sizeof fbi, FileBasicInformation); - ok ( res == STATUS_SUCCESS, "can't get attributes\n"); -- todo_wine ok ( (fbi.FileAttributes & attrib_mask) == FILE_ATTRIBUTE_HIDDEN, "attribute %lx not FILE_ATTRIBUTE_HIDDEN\n", fbi.FileAttributes ); -+ ok ( (fbi.FileAttributes & attrib_mask) == FILE_ATTRIBUTE_HIDDEN, "attribute %lx not FILE_ATTRIBUTE_HIDDEN (ok in old linux without xattr)\n", fbi.FileAttributes ); - - /* Check NORMAL last of all (to make sure we can clear attributes) */ - memset(&fbi, 0, sizeof(fbi)); -@@ -1471,7 +1471,7 @@ static void test_file_all_information(void) - memset(&fai_buf.fai, 0, sizeof(fai_buf.fai)); - res = pNtQueryInformationFile(h, &io, &fai_buf.fai, sizeof fai_buf, FileAllInformation); - ok ( res == STATUS_SUCCESS, "can't get attributes, res %x\n", res); -- todo_wine ok ( (fai_buf.fai.BasicInformation.FileAttributes & attrib_mask) == FILE_ATTRIBUTE_SYSTEM, "attribute %lx not FILE_ATTRIBUTE_SYSTEM\n", fai_buf.fai.BasicInformation.FileAttributes ); -+ ok ( (fai_buf.fai.BasicInformation.FileAttributes & attrib_mask) == FILE_ATTRIBUTE_SYSTEM, "attribute %lx not FILE_ATTRIBUTE_SYSTEM (ok in old linux without xattr)\n", fai_buf.fai.BasicInformation.FileAttributes ); - - /* Then HIDDEN */ - memset(&fai_buf.fai.BasicInformation, 0, sizeof(fai_buf.fai.BasicInformation)); -@@ -1484,7 +1484,7 @@ static void test_file_all_information(void) - memset(&fai_buf.fai, 0, sizeof(fai_buf.fai)); - res = pNtQueryInformationFile(h, &io, &fai_buf.fai, sizeof fai_buf, FileAllInformation); - ok ( res == STATUS_SUCCESS, "can't get attributes\n"); -- todo_wine ok ( (fai_buf.fai.BasicInformation.FileAttributes & attrib_mask) == FILE_ATTRIBUTE_HIDDEN, "attribute %lx not FILE_ATTRIBUTE_HIDDEN\n", fai_buf.fai.BasicInformation.FileAttributes ); -+ ok ( (fai_buf.fai.BasicInformation.FileAttributes & attrib_mask) == FILE_ATTRIBUTE_HIDDEN, "attribute %lx not FILE_ATTRIBUTE_HIDDEN (ok in old linux without xattr)\n", fai_buf.fai.BasicInformation.FileAttributes ); - - /* Check NORMAL last of all (to make sure we can clear attributes) */ - memset(&fai_buf.fai.BasicInformation, 0, sizeof(fai_buf.fai.BasicInformation)); -diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c -index a3520898d57..cd53ca36238 100644 ---- a/dlls/ntdll/unix/file.c -+++ b/dlls/ntdll/unix/file.c -@@ -362,6 +362,26 @@ NTSTATUS errno_to_status( int err ) - #define XATTR_USER_PREFIX "user." - #endif - -+static int xattr_fremove( int filedes, const char *name ) -+{ -+#if defined(HAVE_ATTR_XATTR_H) -+ return fremovexattr( filedes, name ); -+#else -+ errno = ENOSYS; -+ return -1; -+#endif -+} -+ -+static int xattr_fset( int filedes, const char *name, void *value, size_t size ) -+{ -+#if defined(HAVE_ATTR_XATTR_H) -+ return fsetxattr( filedes, name, value, size, 0 ); -+#else -+ errno = ENOSYS; -+ return -1; -+#endif -+} -+ - static int xattr_get( const char *path, const char *name, void *value, size_t size ) - { - #if defined(HAVE_ATTR_XATTR_H) -@@ -1508,6 +1528,39 @@ static int fd_get_file_info( int fd, unsigned int options, struct stat *st, ULON - } - - -+/* set the stat info and file attributes for a file (by file descriptor) */ -+NTSTATUS fd_set_file_info( int fd, ULONG attr ) -+{ -+ char hexattr[11]; -+ struct stat st; -+ -+ if (fstat( fd, &st ) == -1) return errno_to_status( errno ); -+ if (attr & FILE_ATTRIBUTE_READONLY) -+ { -+ if (S_ISDIR( st.st_mode)) -+ WARN("FILE_ATTRIBUTE_READONLY ignored for directory.\n"); -+ else -+ st.st_mode &= ~0222; /* clear write permission bits */ -+ } -+ else -+ { -+ /* add write permission only where we already have read permission */ -+ st.st_mode |= (0600 | ((st.st_mode & 044) >> 1)) & (~start_umask); -+ } -+ if (fchmod( fd, st.st_mode ) == -1) return errno_to_status( errno ); -+ attr &= ~FILE_ATTRIBUTE_NORMAL; /* do not store everything, but keep everything Samba can use */ -+ if (attr != 0) -+ { -+ int len; -+ -+ len = sprintf( hexattr, "0x%x", attr ); -+ xattr_fset( fd, SAMBA_XATTR_DOS_ATTRIB, hexattr, len ); -+ } -+ else -+ xattr_fremove( fd, SAMBA_XATTR_DOS_ATTRIB ); -+ return STATUS_SUCCESS; -+} -+ - /* get the stat info and file attributes for a file (by name) */ - static int get_file_info( const char *path, struct stat *st, ULONG *attr ) - { -@@ -4359,7 +4412,6 @@ NTSTATUS WINAPI NtSetInformationFile( HANDLE handle, IO_STATUS_BLOCK *io, - case FileBasicInformation: - if (len >= sizeof(FILE_BASIC_INFORMATION)) - { -- struct stat st; - const FILE_BASIC_INFORMATION *info = ptr; - LARGE_INTEGER mtime, atime; - -@@ -4373,25 +4425,7 @@ NTSTATUS WINAPI NtSetInformationFile( HANDLE handle, IO_STATUS_BLOCK *io, - status = set_file_times( fd, &mtime, &atime ); - - if (status == STATUS_SUCCESS && info->FileAttributes) -- { -- if (fstat( fd, &st ) == -1) status = errno_to_status( errno ); -- else -- { -- if (info->FileAttributes & FILE_ATTRIBUTE_READONLY) -- { -- if (S_ISDIR( st.st_mode)) -- WARN("FILE_ATTRIBUTE_READONLY ignored for directory.\n"); -- else -- st.st_mode &= ~0222; /* clear write permission bits */ -- } -- else -- { -- /* add write permission only where we already have read permission */ -- st.st_mode |= (0600 | ((st.st_mode & 044) >> 1)) & (~start_umask); -- } -- if (fchmod( fd, st.st_mode ) == -1) status = errno_to_status( errno ); -- } -- } -+ status = fd_set_file_info( fd, info->FileAttributes ); - - if (needs_close) close( fd ); - } --- -2.35.1 - diff --git a/patches/ntdll-DOS_Attributes/0004-ntdll-Implement-storing-DOS-attributes-in-NtCreateFi.patch b/patches/ntdll-DOS_Attributes/0004-ntdll-Implement-storing-DOS-attributes-in-NtCreateFi.patch deleted file mode 100644 index 056e8815..00000000 --- a/patches/ntdll-DOS_Attributes/0004-ntdll-Implement-storing-DOS-attributes-in-NtCreateFi.patch +++ /dev/null @@ -1,154 +0,0 @@ -From 2f6ec5b1accc1ac275bcb4edeb44c15e271d2f72 Mon Sep 17 00:00:00 2001 -From: "Erich E. Hoover" -Date: Wed, 20 Aug 2014 15:28:00 -0600 -Subject: [PATCH] ntdll: Implement storing DOS attributes in NtCreateFile. - ---- - dlls/ntdll/tests/directory.c | 24 ++++++++--------- - dlls/ntdll/unix/file.c | 51 ++++++++++++++++++++++++++++++++---- - 2 files changed, 57 insertions(+), 18 deletions(-) - -diff --git a/dlls/ntdll/tests/directory.c b/dlls/ntdll/tests/directory.c -index 77b17a50037..07211ebf5de 100644 ---- a/dlls/ntdll/tests/directory.c -+++ b/dlls/ntdll/tests/directory.c -@@ -56,7 +56,6 @@ static NTSTATUS (WINAPI *pRtlWow64EnableFsRedirectionEx)( ULONG disable, ULONG * - - /* The attribute sets to test */ - static struct testfile_s { -- BOOL todo; /* set if it doesn't work on wine yet */ - BOOL attr_done; /* set if attributes were tested for this file already */ - const DWORD attr; /* desired attribute */ - WCHAR name[20]; /* filename to use */ -@@ -64,16 +63,16 @@ static struct testfile_s { - const char *description; /* for error messages */ - int nfound; /* How many were found (expect 1) */ - } testfiles[] = { -- { 0, 0, FILE_ATTRIBUTE_NORMAL, {'l','o','n','g','f','i','l','e','n','a','m','e','.','t','m','p'}, "normal" }, -- { 0, 0, FILE_ATTRIBUTE_NORMAL, {'n','.','t','m','p',}, "normal" }, -- { 1, 0, FILE_ATTRIBUTE_HIDDEN, {'h','.','t','m','p',}, "hidden" }, -- { 1, 0, FILE_ATTRIBUTE_SYSTEM, {'s','.','t','m','p',}, "system" }, -- { 0, 0, FILE_ATTRIBUTE_DIRECTORY, {'d','.','t','m','p',}, "directory" }, -- { 0, 0, FILE_ATTRIBUTE_NORMAL, {0xe9,'a','.','t','m','p'}, "normal" }, -- { 0, 0, FILE_ATTRIBUTE_NORMAL, {0xc9,'b','.','t','m','p'}, "normal" }, -- { 0, 0, FILE_ATTRIBUTE_NORMAL, {'e','a','.','t','m','p'}, "normal" }, -- { 0, 0, FILE_ATTRIBUTE_DIRECTORY, {'.'}, ". directory" }, -- { 0, 0, FILE_ATTRIBUTE_DIRECTORY, {'.','.'}, ".. directory" } -+ { 0, FILE_ATTRIBUTE_NORMAL, {'l','o','n','g','f','i','l','e','n','a','m','e','.','t','m','p'}, "normal" }, -+ { 0, FILE_ATTRIBUTE_NORMAL, {'n','.','t','m','p',}, "normal" }, -+ { 0, FILE_ATTRIBUTE_HIDDEN, {'h','.','t','m','p',}, "hidden" }, -+ { 0, FILE_ATTRIBUTE_SYSTEM, {'s','.','t','m','p',}, "system" }, -+ { 0, FILE_ATTRIBUTE_DIRECTORY, {'d','.','t','m','p',}, "directory" }, -+ { 0, FILE_ATTRIBUTE_NORMAL, {0xe9,'a','.','t','m','p'}, "normal" }, -+ { 0, FILE_ATTRIBUTE_NORMAL, {0xc9,'b','.','t','m','p'}, "normal" }, -+ { 0, FILE_ATTRIBUTE_NORMAL, {'e','a','.','t','m','p'}, "normal" }, -+ { 0, FILE_ATTRIBUTE_DIRECTORY, {'.'}, ". directory" }, -+ { 0, FILE_ATTRIBUTE_DIRECTORY, {'.','.'}, ".. directory" } - }; - static const int test_dir_count = ARRAY_SIZE(testfiles); - static const int max_test_dir_size = ARRAY_SIZE(testfiles) + 5; /* size of above plus some for .. etc */ -@@ -163,8 +162,7 @@ static void tally_test_file(FILE_BOTH_DIRECTORY_INFORMATION *dir_info) - if (namelen != len || memcmp(nameW, testfiles[i].name, len*sizeof(WCHAR))) - continue; - if (!testfiles[i].attr_done) { -- todo_wine_if (testfiles[i].todo) -- ok (attrib == (testfiles[i].attr & attribmask), "file %s: expected %s (%lx), got %lx (is your linux new enough?)\n", wine_dbgstr_w(testfiles[i].name), testfiles[i].description, testfiles[i].attr, attrib); -+ ok (attrib == (testfiles[i].attr & attribmask), "file %s: expected %s (%lx), got %lx (is your linux new enough?)\n", wine_dbgstr_w(testfiles[i].name), testfiles[i].description, testfiles[i].attr, attrib); - testfiles[i].attr_done = TRUE; - } - testfiles[i].nfound++; -diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c -index cd53ca36238..185db877d55 100644 ---- a/dlls/ntdll/unix/file.c -+++ b/dlls/ntdll/unix/file.c -@@ -392,6 +392,26 @@ static int xattr_get( const char *path, const char *name, void *value, size_t si - #endif - } - -+static int xattr_remove( const char *path, const char *name ) -+{ -+#if defined(HAVE_ATTR_XATTR_H) -+ return removexattr( path, name ); -+#else -+ errno = ENOSYS; -+ return -1; -+#endif -+} -+ -+static int xattr_set( const char *path, const char *name, void *value, size_t size ) -+{ -+#if defined(HAVE_ATTR_XATTR_H) -+ return setxattr( path, name, value, size, 0 ); -+#else -+ errno = ENOSYS; -+ return -1; -+#endif -+} -+ - /* get space from the current directory data buffer, allocating a new one if necessary */ - static void *get_dir_data_space( struct dir_data *data, unsigned int size ) - { -@@ -3786,6 +3806,20 @@ static NTSTATUS unmount_device( HANDLE handle ) - return status; - } - -+NTSTATUS set_file_info( const char *path, ULONG attr ) -+{ -+ char hexattr[11]; -+ int len; -+ -+ /* Note: unix mode already set when called this way */ -+ attr &= ~FILE_ATTRIBUTE_NORMAL; /* do not store everything, but keep everything Samba can use */ -+ len = sprintf( hexattr, "0x%x", attr ); -+ if (attr != 0) -+ xattr_set( path, SAMBA_XATTR_DOS_ATTRIB, hexattr, len ); -+ else -+ xattr_remove( path, SAMBA_XATTR_DOS_ATTRIB ); -+ return STATUS_SUCCESS; -+} - - /****************************************************************************** - * open_unix_file -@@ -3871,13 +3905,14 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU - status = STATUS_SUCCESS; - } - -- if (status == STATUS_SUCCESS) -+ if (status != STATUS_SUCCESS) - { -- status = open_unix_file( handle, unix_name, access, &new_attr, attributes, -- sharing, disposition, options, ea_buffer, ea_length ); -- free( unix_name ); -+ WARN( "%s not found (%x)\n", debugstr_us(attr->ObjectName), io->u.Status ); -+ return status; - } -- else WARN( "%s not found (%x)\n", debugstr_us(attr->ObjectName), status ); -+ -+ status = open_unix_file( handle, unix_name, access, &new_attr, attributes, -+ sharing, disposition, options, ea_buffer, ea_length ); - - if (status == STATUS_SUCCESS) - { -@@ -3899,6 +3934,11 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU - io->Information = FILE_OVERWRITTEN; - break; - } -+ if (io->Information == FILE_CREATED) -+ { -+ /* set any DOS extended attributes */ -+ set_file_info( unix_name, attributes ); -+ } - } - else if (status == STATUS_TOO_MANY_OPENED_FILES) - { -@@ -3907,6 +3947,7 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU - } - - free( nt_name.Buffer ); -+ free( unix_name ); - return io->u.Status = status; - } - --- -2.35.1 - diff --git a/patches/ntdll-DOS_Attributes/definition b/patches/ntdll-DOS_Attributes/definition index 48c34b30..47cebc0a 100644 --- a/patches/ntdll-DOS_Attributes/definition +++ b/patches/ntdll-DOS_Attributes/definition @@ -1,2 +1,4 @@ Fixes: [9158] Support for DOS hidden/system file attributes Fixes: [15679] cygwin symlinks not working in wine +# Hopefully in the process of upstreaming. +Disabled: true \ No newline at end of file diff --git a/patches/ntdll-Junction_Points/0001-ntdll-Add-support-for-creating-reparse-points.patch b/patches/ntdll-Junction_Points/0001-ntdll-Add-support-for-creating-reparse-points.patch index 1dc7e9b3..23fb0756 100644 --- a/patches/ntdll-Junction_Points/0001-ntdll-Add-support-for-creating-reparse-points.patch +++ b/patches/ntdll-Junction_Points/0001-ntdll-Add-support-for-creating-reparse-points.patch @@ -1,4 +1,4 @@ -From 6209b270e6f2a7913a95f6c1da18c11e2e2a73a5 Mon Sep 17 00:00:00 2001 +From 98350beb9209a2fdb1caeaf9ca6cf508ab2b4d80 Mon Sep 17 00:00:00 2001 From: "Erich E. Hoover" Date: Thu, 16 Jan 2014 20:56:49 -0700 Subject: [PATCH] ntdll: Add support for creating reparse points. @@ -15,10 +15,10 @@ Signed-off-by: Erich E. Hoover create mode 100644 include/ntifs.h diff --git a/configure.ac b/configure.ac -index 3ea4c2afe0a..d0ec1d837c3 100644 +index 41a29cee398..167839c5793 100644 --- a/configure.ac +++ b/configure.ac -@@ -2030,6 +2030,8 @@ AC_CHECK_FUNCS(\ +@@ -2025,6 +2025,8 @@ AC_CHECK_FUNCS(\ prctl \ proc_pidinfo \ sched_yield \ @@ -41,7 +41,7 @@ index 3b1cdb54f9f..6eb4690f8e0 100644 EXTRADLLFLAGS = -nodefaultlibs -Wl,--image-base,0x7bc00000 x86_64_EXTRADLLFLAGS = -nodefaultlibs -Wl,--image-base,0x170000000 diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c -index 4b142f241e5..5f6cb223951 100644 +index ddc864b3588..2baacaa9bc3 100644 --- a/dlls/ntdll/tests/file.c +++ b/dlls/ntdll/tests/file.c @@ -38,6 +38,7 @@ @@ -217,19 +217,19 @@ index 4b142f241e5..5f6cb223951 100644 test_mailslot_name(); } diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c -index d103e3195b5..3fb4ded846c 100644 +index 604ca866890..58310fd8504 100644 --- a/dlls/ntdll/unix/file.c +++ b/dlls/ntdll/unix/file.c -@@ -35,6 +35,8 @@ - #include +@@ -36,6 +36,8 @@ #include + #include #include +#include +#include #include #include #ifdef HAVE_MNTENT_H -@@ -127,6 +129,7 @@ +@@ -121,6 +123,7 @@ #include "wine/list.h" #include "wine/debug.h" #include "unix_private.h" @@ -237,7 +237,7 @@ index d103e3195b5..3fb4ded846c 100644 WINE_DEFAULT_DEBUG_CHANNEL(file); WINE_DECLARE_DEBUG_CHANNEL(winediag); -@@ -138,6 +141,12 @@ WINE_DECLARE_DEBUG_CHANNEL(winediag); +@@ -132,6 +135,12 @@ WINE_DECLARE_DEBUG_CHANNEL(winediag); #undef EXT2_IOC_GETFLAGS #undef EXT4_CASEFOLD_FL @@ -250,7 +250,7 @@ index d103e3195b5..3fb4ded846c 100644 #ifdef linux /* We want the real kernel dirent structure, not the libc one */ -@@ -239,6 +248,95 @@ static const BOOL is_case_sensitive = FALSE; +@@ -236,6 +245,95 @@ static const BOOL is_case_sensitive = FALSE; static pthread_mutex_t dir_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t mnt_mutex = PTHREAD_MUTEX_INITIALIZER; @@ -346,7 +346,7 @@ index d103e3195b5..3fb4ded846c 100644 /* check if a given Unicode char is OK in a DOS short name */ static inline BOOL is_invalid_dos_char( WCHAR ch ) { -@@ -1574,6 +1672,28 @@ static inline ULONG get_file_attributes( const struct stat *st ) +@@ -1540,6 +1638,28 @@ static int parse_samba_dos_attrib_data( char *data, int len ) } @@ -375,7 +375,7 @@ index d103e3195b5..3fb4ded846c 100644 static BOOL fd_is_mount_point( int fd, const struct stat *st ) { struct stat parent; -@@ -3313,6 +3433,179 @@ done: +@@ -3303,6 +3423,179 @@ done: } @@ -555,7 +555,7 @@ index d103e3195b5..3fb4ded846c 100644 /****************************************************************************** * lookup_unix_name * -@@ -6060,6 +6353,13 @@ NTSTATUS WINAPI NtFsControlFile( HANDLE handle, HANDLE event, PIO_APC_ROUTINE ap +@@ -6052,6 +6345,13 @@ NTSTATUS WINAPI NtFsControlFile( HANDLE handle, HANDLE event, PIO_APC_ROUTINE ap break; } @@ -570,7 +570,7 @@ index d103e3195b5..3fb4ded846c 100644 TRACE("FSCTL_SET_SPARSE: Ignoring request\n"); io->Information = 0; diff --git a/include/Makefile.in b/include/Makefile.in -index 70134a7bcb7..bdddf5426fe 100644 +index 1c04f9a298b..7a2c9f96c1b 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -563,6 +563,7 @@ SOURCES = \ diff --git a/patches/ntdll-Junction_Points/0004-ntdll-Add-support-for-testing-for-reparse-points-wit.patch b/patches/ntdll-Junction_Points/0004-ntdll-Add-support-for-testing-for-reparse-points-wit.patch index dc1bab7f..597bb8dd 100644 --- a/patches/ntdll-Junction_Points/0004-ntdll-Add-support-for-testing-for-reparse-points-wit.patch +++ b/patches/ntdll-Junction_Points/0004-ntdll-Add-support-for-testing-for-reparse-points-wit.patch @@ -1,4 +1,4 @@ -From f93a10fd26b694aa0df49f032844f9ddd34c632d Mon Sep 17 00:00:00 2001 +From e64115c5421f37bbc426455d338d16ccb60ac9b2 Mon Sep 17 00:00:00 2001 From: "Erich E. Hoover" Date: Thu, 16 Jan 2014 21:01:25 -0700 Subject: [PATCH] ntdll: Add support for testing for reparse points with @@ -7,11 +7,11 @@ Subject: [PATCH] ntdll: Add support for testing for reparse points with Signed-off-by: Erich E. Hoover --- dlls/ntdll/tests/file.c | 5 +++++ - dlls/ntdll/unix/file.c | 25 ++++++++++++++++++++----- - 2 files changed, 25 insertions(+), 5 deletions(-) + dlls/ntdll/unix/file.c | 26 +++++++++++++++++++++----- + 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c -index 54f7c7fc860..7fa50ec59a6 100644 +index 2641197130b..4a18bd5c01a 100644 --- a/dlls/ntdll/tests/file.c +++ b/dlls/ntdll/tests/file.c @@ -5469,6 +5469,11 @@ static void test_reparse_points(void) @@ -27,10 +27,10 @@ index 54f7c7fc860..7fa50ec59a6 100644 HeapFree(GetProcessHeap(), 0, buffer); buffer_len = sizeof(*buffer) + 2*32767; diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c -index af390214624..201eeab7013 100644 +index 0b2987bf140..92dcd7775d6 100644 --- a/dlls/ntdll/unix/file.c +++ b/dlls/ntdll/unix/file.c -@@ -1788,10 +1788,20 @@ static int fd_get_file_info( int fd, unsigned int options, struct stat *st, ULON +@@ -1755,11 +1755,22 @@ static int fd_get_file_info( int fd, unsigned int options, struct stat *st, ULON *attr = 0; ret = fstat( fd, st ); if (ret == -1) return ret; @@ -38,6 +38,7 @@ index af390214624..201eeab7013 100644 /* consider mount points to be reparse points (IO_REPARSE_TAG_MOUNT_POINT) */ if ((options & FILE_OPEN_REPARSE_POINT) && fd_is_mount_point( fd, st )) *attr |= FILE_ATTRIBUTE_REPARSE_POINT; + + if (S_ISLNK( st->st_mode )) + { + BOOL is_dir; @@ -49,10 +50,11 @@ index af390214624..201eeab7013 100644 + st->st_mode = (st->st_mode & ~S_IFMT) | (is_dir ? S_IFDIR : S_IFREG); + } + *attr |= get_file_attributes( st ); - return ret; - } - -@@ -1841,10 +1851,15 @@ static int get_file_info( const char *path, struct stat *st, ULONG *attr ) ++ + attr_len = xattr_fget( fd, SAMBA_XATTR_DOS_ATTRIB, attr_data, sizeof(attr_data)-1 ); + if (attr_len != -1) + *attr |= parse_samba_dos_attrib_data( attr_data, attr_len ); +@@ -1828,10 +1839,15 @@ static int get_file_info( const char *path, struct stat *st, ULONG *attr ) if (ret == -1) return ret; if (S_ISLNK( st->st_mode )) { diff --git a/patches/ntdll-Junction_Points/definition b/patches/ntdll-Junction_Points/definition index 41813921..ed7aae2b 100644 --- a/patches/ntdll-Junction_Points/definition +++ b/patches/ntdll-Junction_Points/definition @@ -1,5 +1,4 @@ Fixes: [12401] NET Framework 2.0, 3.0, 4.0 installers and other apps that make use of GAC API for managed assembly installation on NTFS filesystems need reparse point/junction API support (FSCTL_SET_REPARSE_POINT/FSCTL_GET_REPARSE_POINT) Fixes: [44948] Multiple apps (Spine (Mod starter for Gothic), MS Office 365 installer) need CreateSymbolicLinkW implementation -Depends: ntdll-DOS_Attributes Depends: ntdll-NtQueryEaFile Depends: ntdll-Serial_Port_Detection diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index ae9576d4..32028cd6 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -51,7 +51,7 @@ usage() # Get the upstream commit sha upstream_commit() { - echo "2a4ec7dafc7ee38108f6a9f626a7c39e6b6777e0" + echo "16c6c249a5134de2422fbd3471ead7425c968301" } # Show version information @@ -132,7 +132,6 @@ patch_enable_all () enable_ntdll_APC_Performance="$1" enable_ntdll_Builtin_Prot="$1" enable_ntdll_CriticalSection="$1" - enable_ntdll_DOS_Attributes="$1" enable_ntdll_Exception="$1" enable_ntdll_ForceBottomUpAlloc="$1" enable_ntdll_HashLinks="$1" @@ -416,9 +415,6 @@ patch_enable () ntdll-CriticalSection) enable_ntdll_CriticalSection="$2" ;; - ntdll-DOS_Attributes) - enable_ntdll_DOS_Attributes="$2" - ;; ntdll-Exception) enable_ntdll_Exception="$2" ;; @@ -1208,13 +1204,9 @@ if test "$enable_shell32_Progress_Dialog" -eq 1; then fi if test "$enable_server_Stored_ACLs" -eq 1; then - if test "$enable_ntdll_DOS_Attributes" -gt 1; then - abort "Patchset ntdll-DOS_Attributes disabled, but server-Stored_ACLs depends on that." - fi if test "$enable_server_File_Permissions" -gt 1; then abort "Patchset server-File_Permissions disabled, but server-Stored_ACLs depends on that." fi - enable_ntdll_DOS_Attributes=1 enable_server_File_Permissions=1 fi @@ -1301,16 +1293,12 @@ if test "$enable_eventfd_synchronization" -eq 1; then fi if test "$enable_ntdll_Junction_Points" -eq 1; then - if test "$enable_ntdll_DOS_Attributes" -gt 1; then - abort "Patchset ntdll-DOS_Attributes disabled, but ntdll-Junction_Points depends on that." - fi if test "$enable_ntdll_NtQueryEaFile" -gt 1; then abort "Patchset ntdll-NtQueryEaFile disabled, but ntdll-Junction_Points depends on that." fi if test "$enable_ntdll_Serial_Port_Detection" -gt 1; then abort "Patchset ntdll-Serial_Port_Detection disabled, but ntdll-Junction_Points depends on that." fi - enable_ntdll_DOS_Attributes=1 enable_ntdll_NtQueryEaFile=1 enable_ntdll_Serial_Port_Detection=1 fi @@ -1677,25 +1665,6 @@ if test "$enable_dsound_EAX" -eq 1; then patch_apply dsound-EAX/0023-dsound-Fake-success-for-EAX-Set-Buffer-ListenerPrope.patch fi -# Patchset ntdll-DOS_Attributes -# | -# | This patchset fixes the following Wine bugs: -# | * [#9158] Support for DOS hidden/system file attributes -# | * [#15679] cygwin symlinks not working in wine -# | -# | Modified files: -# | * configure.ac, dlls/ntdll/tests/directory.c, dlls/ntdll/tests/file.c, dlls/ntdll/unix/file.c -# | -if test "$enable_ntdll_DOS_Attributes" -eq 1; then - patch_apply ntdll-DOS_Attributes/0001-ntdll-Implement-retrieving-DOS-attributes-in-fd_-get.patch - patch_apply ntdll-DOS_Attributes/0003-ntdll-Implement-storing-DOS-attributes-in-NtSetInfor.patch - patch_apply ntdll-DOS_Attributes/0004-ntdll-Implement-storing-DOS-attributes-in-NtCreateFi.patch - patch_apply ntdll-DOS_Attributes/0005-libport-Add-support-for-Mac-OS-X-style-extended-attr.patch - patch_apply ntdll-DOS_Attributes/0006-libport-Add-support-for-FreeBSD-style-extended-attri.patch - patch_apply ntdll-DOS_Attributes/0007-ntdll-Perform-the-Unix-style-hidden-file-check-withi.patch - patch_apply ntdll-DOS_Attributes/0008-ntdll-Always-store-SAMBA_XATTR_DOS_ATTRIB-when-path-.patch -fi - # Patchset ntdll-NtQueryEaFile # | # | Modified files: @@ -1720,7 +1689,7 @@ fi # Patchset ntdll-Junction_Points # | # | This patchset has the following (direct or indirect) dependencies: -# | * ntdll-DOS_Attributes, ntdll-NtQueryEaFile, ntdll-Serial_Port_Detection +# | * ntdll-NtQueryEaFile, ntdll-Serial_Port_Detection # | # | This patchset fixes the following Wine bugs: # | * [#12401] NET Framework 2.0, 3.0, 4.0 installers and other apps that make use of GAC API for managed assembly @@ -1797,8 +1766,8 @@ fi # Patchset eventfd_synchronization # | # | This patchset has the following (direct or indirect) dependencies: -# | * ntdll-DOS_Attributes, ntdll-NtQueryEaFile, ntdll-Serial_Port_Detection, ntdll-Junction_Points, server-PeekMessage, -# | server-Realtime_Priority, server-Signal_Thread +# | * ntdll-NtQueryEaFile, ntdll-Serial_Port_Detection, ntdll-Junction_Points, server-PeekMessage, server-Realtime_Priority, +# | server-Signal_Thread # | # | This patchset fixes the following Wine bugs: # | * [#36692] Many multi-threaded applications have poor performance due to heavy use of synchronization primitives @@ -2577,14 +2546,13 @@ fi # | * [#51775] sapi: Allow iteration of Token objects. # | # | Modified files: -# | * dlls/sapi/sapi.rgs, dlls/sapi/tests/token.c, dlls/sapi/token.c +# | * dlls/sapi/sapi.rgs, dlls/sapi/token.c # | if test "$enable_sapi_iteration_tokens" -eq 1; then patch_apply sapi-iteration-tokens/0001-sapi-Implement-ISpRegDataKey-CreateKey.patch patch_apply sapi-iteration-tokens/0003-sapi-Implement-ISpRegDataKey-GetStringValue.patch patch_apply sapi-iteration-tokens/0004-sapi-EnumTokens-setup-enumeration-members.patch patch_apply sapi-iteration-tokens/0005-sapi-Implement-ISpObjectTokenEnumBuilder-Item.patch - patch_apply sapi-iteration-tokens/0006-sapi-Implement-ISpObjectToken-GetId.patch patch_apply sapi-iteration-tokens/0007-sapi-Implement-ISpObjectToken-OpenKey.patch patch_apply sapi-iteration-tokens/0008-sapi-Add-default-voice-registry-key.patch patch_apply sapi-iteration-tokens/0009-sapi-Return-dump-object-in-ISpObjectTokenEnumBuilder.patch @@ -2605,7 +2573,7 @@ fi # Patchset server-File_Permissions # | # | This patchset has the following (direct or indirect) dependencies: -# | * ntdll-DOS_Attributes, ntdll-NtQueryEaFile, ntdll-Serial_Port_Detection, ntdll-Junction_Points +# | * ntdll-NtQueryEaFile, ntdll-Serial_Port_Detection, ntdll-Junction_Points # | # | Modified files: # | * dlls/advapi32/tests/security.c, dlls/ntdll/tests/file.c, server/fd.c @@ -2623,7 +2591,7 @@ fi # Patchset server-Stored_ACLs # | # | This patchset has the following (direct or indirect) dependencies: -# | * ntdll-DOS_Attributes, ntdll-NtQueryEaFile, ntdll-Serial_Port_Detection, ntdll-Junction_Points, server-File_Permissions +# | * ntdll-NtQueryEaFile, ntdll-Serial_Port_Detection, ntdll-Junction_Points, server-File_Permissions # | # | This patchset fixes the following Wine bugs: # | * [#33576] Support for stored file ACLs diff --git a/patches/sapi-iteration-tokens/0005-sapi-Implement-ISpObjectTokenEnumBuilder-Item.patch b/patches/sapi-iteration-tokens/0005-sapi-Implement-ISpObjectTokenEnumBuilder-Item.patch index 69cc1f22..c25345db 100644 --- a/patches/sapi-iteration-tokens/0005-sapi-Implement-ISpObjectTokenEnumBuilder-Item.patch +++ b/patches/sapi-iteration-tokens/0005-sapi-Implement-ISpObjectTokenEnumBuilder-Item.patch @@ -1,17 +1,17 @@ -From 9642c43791d10664565e11fb11f9e6165eb4cef6 Mon Sep 17 00:00:00 2001 +From 8e0713bfe03d37f19c2645a67b05024a86df0af8 Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes Date: Wed, 22 Sep 2021 19:01:44 +1000 -Subject: [PATCH 5/8] sapi: Implement ISpObjectTokenEnumBuilder Item +Subject: [PATCH] sapi: Implement ISpObjectTokenEnumBuilder Item --- - dlls/sapi/token.c | 67 ++++++++++++++++++++++++++++++++++++----------- - 1 file changed, 52 insertions(+), 15 deletions(-) + dlls/sapi/token.c | 69 ++++++++++++++++++++++++++++++++++++----------- + 1 file changed, 53 insertions(+), 16 deletions(-) diff --git a/dlls/sapi/token.c b/dlls/sapi/token.c -index 6bf66bc0d5b..d16478d0064 100644 +index c16572ff1f2..eb6d746cb04 100644 --- a/dlls/sapi/token.c +++ b/dlls/sapi/token.c -@@ -64,6 +64,19 @@ static struct token_enum *impl_from_ISpObjectTokenEnumBuilder( ISpObjectTokenEnu +@@ -64,6 +64,20 @@ static struct token_enum *impl_from_ISpObjectTokenEnumBuilder( ISpObjectTokenEnu return CONTAINING_RECORD( iface, struct token_enum, ISpObjectTokenEnumBuilder_iface ); } @@ -21,6 +21,7 @@ index 6bf66bc0d5b..d16478d0064 100644 + LONG ref; + + HKEY token_key; ++ WCHAR *token_id; +}; + +static struct object_token *impl_from_ISpObjectToken( ISpObjectToken *iface ) @@ -31,7 +32,7 @@ index 6bf66bc0d5b..d16478d0064 100644 static HRESULT WINAPI data_key_QueryInterface( ISpRegDataKey *iface, REFIID iid, void **obj ) { struct data_key *This = impl_from_ISpRegDataKey( iface ); -@@ -725,8 +738,45 @@ static HRESULT WINAPI token_enum_Clone( ISpObjectTokenEnumBuilder *iface, +@@ -725,8 +739,45 @@ static HRESULT WINAPI token_enum_Clone( ISpObjectTokenEnumBuilder *iface, static HRESULT WINAPI token_enum_Item( ISpObjectTokenEnumBuilder *iface, ULONG index, ISpObjectToken **token ) { @@ -79,7 +80,7 @@ index 6bf66bc0d5b..d16478d0064 100644 } static HRESULT WINAPI token_enum_GetCount( ISpObjectTokenEnumBuilder *iface, -@@ -837,19 +887,6 @@ HRESULT token_enum_create( IUnknown *outer, REFIID iid, void **obj ) +@@ -838,20 +889,6 @@ HRESULT token_enum_create( IUnknown *outer, REFIID iid, void **obj ) return hr; } @@ -89,6 +90,7 @@ index 6bf66bc0d5b..d16478d0064 100644 - LONG ref; - - HKEY token_key; +- WCHAR *token_id; -}; - -static struct object_token *impl_from_ISpObjectToken( ISpObjectToken *iface ) @@ -100,5 +102,5 @@ index 6bf66bc0d5b..d16478d0064 100644 REFIID iid, void **obj ) { -- -2.33.0 +2.35.1 diff --git a/patches/sapi-iteration-tokens/0006-sapi-Implement-ISpObjectToken-GetId.patch b/patches/sapi-iteration-tokens/0006-sapi-Implement-ISpObjectToken-GetId.patch deleted file mode 100644 index 2ace9f07..00000000 --- a/patches/sapi-iteration-tokens/0006-sapi-Implement-ISpObjectToken-GetId.patch +++ /dev/null @@ -1,114 +0,0 @@ -From 614d8a2d74f7b5e7fdd2739741dc0fc42e57eebd Mon Sep 17 00:00:00 2001 -From: Alistair Leslie-Hughes -Date: Wed, 22 Sep 2021 19:01:44 +1000 -Subject: [PATCH] sapi: Implement ISpObjectToken GetId - ---- - dlls/sapi/tests/token.c | 7 ++++--- - dlls/sapi/token.c | 27 ++++++++++++++++++++++++--- - 2 files changed, 28 insertions(+), 6 deletions(-) - -diff --git a/dlls/sapi/tests/token.c b/dlls/sapi/tests/token.c -index 9473d56b4d1..260e059127d 100644 ---- a/dlls/sapi/tests/token.c -+++ b/dlls/sapi/tests/token.c -@@ -185,11 +185,11 @@ static void test_object_token(void) - ok( hr == S_OK, "got %08lx\n", hr ); - - hr = ISpObjectToken_GetId( token, NULL ); -- todo_wine ok( hr == SPERR_UNINITIALIZED, "got %08lx\n", hr ); -+ ok( hr == SPERR_UNINITIALIZED, "got %08lx\n", hr ); - - tempW = (LPWSTR)0xdeadbeef; - hr = ISpObjectToken_GetId( token, &tempW ); -- todo_wine ok( hr == SPERR_UNINITIALIZED, "got %08lx\n", hr ); -+ ok( hr == SPERR_UNINITIALIZED, "got %08lx\n", hr ); - ok( tempW == (LPWSTR)0xdeadbeef, "got %s\n", wine_dbgstr_w(tempW) ); - - hr = ISpObjectToken_GetCategory( token, NULL ); -@@ -220,7 +220,7 @@ static void test_object_token(void) - ok( hr == SPERR_ALREADY_INITIALIZED, "got %08lx\n", hr ); - - hr = ISpObjectToken_GetId( token, NULL ); -- todo_wine ok( hr == E_POINTER, "got %08lx\n", hr ); -+ ok( hr == E_POINTER, "got %08lx\n", hr ); - - hr = ISpObjectToken_GetCategory( token, NULL ); - todo_wine ok( hr == E_POINTER, "got %08lx\n", hr ); -@@ -297,6 +297,7 @@ static void test_object_token(void) - ISpObjectToken_Release( token ); - } - -+ - START_TEST(token) - { - CoInitialize( NULL ); -diff --git a/dlls/sapi/token.c b/dlls/sapi/token.c -index a514b2995b4..e0fbf200d65 100644 ---- a/dlls/sapi/token.c -+++ b/dlls/sapi/token.c -@@ -70,6 +70,7 @@ struct object_token - LONG ref; - - HKEY token_key; -+ WCHAR *token_id; - }; - - static struct object_token *impl_from_ISpObjectToken( ISpObjectToken *iface ) -@@ -765,7 +766,6 @@ static HRESULT WINAPI token_enum_Item( ISpObjectTokenEnumBuilder *iface, - ret = RegOpenKeyExW (This->key, subkey, 0, KEY_READ, &key); - if (ret != ERROR_SUCCESS) - return HRESULT_FROM_WIN32(ret); -- heap_free(subkey); - - hr = token_create( NULL, &IID_ISpObjectToken, (void**)&subtoken ); - if (FAILED(hr)) -@@ -773,6 +773,7 @@ static HRESULT WINAPI token_enum_Item( ISpObjectTokenEnumBuilder *iface, - - object = impl_from_ISpObjectToken( subtoken ); - object->token_key = key; -+ object->token_id = subkey; - - *token = subtoken; - -@@ -927,6 +928,7 @@ static ULONG WINAPI token_Release( ISpObjectToken *iface ) - if (!ref) - { - if (This->token_key) RegCloseKey( This->token_key ); -+ heap_free(This->token_id); - heap_free( This ); - } - -@@ -1053,8 +1055,27 @@ static HRESULT WINAPI token_SetId( ISpObjectToken *iface, - static HRESULT WINAPI token_GetId( ISpObjectToken *iface, - LPWSTR *token_id ) - { -- FIXME( "stub\n" ); -- return E_NOTIMPL; -+ struct object_token *This = impl_from_ISpObjectToken( iface ); -+ -+ TRACE( "%p, %p\n", This, token_id); -+ -+ if (!This->token_key) -+ return SPERR_UNINITIALIZED; -+ -+ if (!token_id) -+ return E_POINTER; -+ -+ if (!This->token_id) -+ { -+ FIXME("Loading default category not supported.\n"); -+ return E_POINTER; -+ } -+ *token_id = CoTaskMemAlloc( (wcslen(This->token_id) + 1) * sizeof(WCHAR)); -+ if (!*token_id) -+ return E_OUTOFMEMORY; -+ -+ wcscpy(*token_id, This->token_id); -+ return S_OK; - } - - static HRESULT WINAPI token_GetCategory( ISpObjectToken *iface, --- -2.34.1 - diff --git a/patches/server-Stored_ACLs/definition b/patches/server-Stored_ACLs/definition index 03222c47..58aa48f2 100644 --- a/patches/server-Stored_ACLs/definition +++ b/patches/server-Stored_ACLs/definition @@ -1,3 +1,2 @@ -Depends: ntdll-DOS_Attributes Depends: server-File_Permissions Fixes: [33576] Support for stored file ACLs diff --git a/patches/shell32-NewMenu_Interface/0001-shell32-Implement-NewMenu-with-new-folder-item.patch b/patches/shell32-NewMenu_Interface/0001-shell32-Implement-NewMenu-with-new-folder-item.patch index 2554d470..0d6ec925 100644 --- a/patches/shell32-NewMenu_Interface/0001-shell32-Implement-NewMenu-with-new-folder-item.patch +++ b/patches/shell32-NewMenu_Interface/0001-shell32-Implement-NewMenu-with-new-folder-item.patch @@ -1,4 +1,4 @@ -From ad46f8fd4e3d8e064606922e9f6fe8f9bbc1450f Mon Sep 17 00:00:00 2001 +From 69b8c9461157d1b988ec039c4f7e7a467cb9e951 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Sun, 16 Aug 2015 17:34:22 +0200 Subject: [PATCH] shell32: Implement NewMenu with new folder item. @@ -21,10 +21,10 @@ Correct header issue when compiling i386 (var_arg) create mode 100644 dlls/shell32/shellnew.c diff --git a/dlls/shell32/Makefile.in b/dlls/shell32/Makefile.in -index eeb6cd63d60..619b33837ab 100644 +index 9e2395126fc..3bba1b0e3fd 100644 --- a/dlls/shell32/Makefile.in +++ b/dlls/shell32/Makefile.in -@@ -29,6 +29,7 @@ C_SRCS = \ +@@ -28,6 +28,7 @@ C_SRCS = \ shelldispatch.c \ shellitem.c \ shelllink.c \ @@ -33,7 +33,7 @@ index eeb6cd63d60..619b33837ab 100644 shellord.c \ shellpath.c \ diff --git a/dlls/shell32/shell32_classes.idl b/dlls/shell32/shell32_classes.idl -index 22ef49ae5c7..699ad1a2f03 100644 +index dc65ed3728d..c5f4215196f 100644 --- a/dlls/shell32/shell32_classes.idl +++ b/dlls/shell32/shell32_classes.idl @@ -86,6 +86,11 @@ coclass KnownFolderManager { interface IKnownFolderManager; } @@ -49,7 +49,7 @@ index 22ef49ae5c7..699ad1a2f03 100644 threading(apartment), uuid(00bb2763-6a77-11d0-a535-00c04fd7d062) diff --git a/dlls/shell32/shell32_main.h b/dlls/shell32/shell32_main.h -index ca93293e50b..073bb7e9b2b 100644 +index 7bb26e46a6e..f539a1b1e00 100644 --- a/dlls/shell32/shell32_main.h +++ b/dlls/shell32/shell32_main.h @@ -101,6 +101,7 @@ HRESULT WINAPI RecycleBin_Constructor(IUnknown * pUnkOuter, REFIID riif, LPVOID @@ -58,8 +58,8 @@ index ca93293e50b..073bb7e9b2b 100644 HRESULT WINAPI KnownFolderManager_Constructor(IUnknown *pUnkOuter, REFIID riid, LPVOID *ppv) DECLSPEC_HIDDEN; +HRESULT WINAPI NewMenu_Constructor(IUnknown *outer, REFIID riid, LPVOID *ppv) DECLSPEC_HIDDEN; HRESULT WINAPI IFileOperation_Constructor(IUnknown *outer, REFIID riid, void **out) DECLSPEC_HIDDEN; - extern HRESULT CPanel_GetIconLocationW(LPCITEMIDLIST, LPWSTR, UINT, int*) DECLSPEC_HIDDEN; - HRESULT WINAPI CPanel_ExtractIconA(LPITEMIDLIST pidl, LPCSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize) DECLSPEC_HIDDEN; + HRESULT WINAPI ActiveDesktop_Constructor(IUnknown *outer, REFIID riid, void **out) DECLSPEC_HIDDEN; + diff --git a/dlls/shell32/shellnew.c b/dlls/shell32/shellnew.c new file mode 100644 index 00000000000..ba31b3787f8 @@ -564,7 +564,7 @@ index 00000000000..ba31b3787f8 + return hr; +} diff --git a/dlls/shell32/shellole.c b/dlls/shell32/shellole.c -index 7cd46ba2d98..7265e1660ac 100644 +index 589e5c5170a..2984e691c17 100644 --- a/dlls/shell32/shellole.c +++ b/dlls/shell32/shellole.c @@ -72,6 +72,7 @@ static const struct { @@ -576,10 +576,10 @@ index 7cd46ba2d98..7265e1660ac 100644 {&CLSID_QueryAssociations, QueryAssociations_Constructor}, {&CLSID_RecycleBin, RecycleBin_Constructor}, diff --git a/dlls/shell32/tests/shlview.c b/dlls/shell32/tests/shlview.c -index b405a84bc19..4870dc11bcf 100644 +index a83f3137509..2781c2152f9 100644 --- a/dlls/shell32/tests/shlview.c +++ b/dlls/shell32/tests/shlview.c -@@ -1479,7 +1479,6 @@ static void test_newmenu(void) +@@ -1478,7 +1478,6 @@ static void test_newmenu(void) HRESULT hr; hr = CoCreateInstance(&CLSID_NewMenu, NULL, CLSCTX_INPROC_SERVER, &IID_IUnknown, (void **)&unk); @@ -587,7 +587,7 @@ index b405a84bc19..4870dc11bcf 100644 ok(hr == S_OK, "Failed to create NewMenu object, hr %#lx.\n", hr); if (hr != S_OK) { -@@ -1491,6 +1490,14 @@ static void test_newmenu(void) +@@ -1490,6 +1489,14 @@ static void test_newmenu(void) ok(hr == S_OK, "Failed to get IShellExtInit, hr %#lx.\n", hr); IUnknown_Release(unk2); diff --git a/staging/upstream-commit b/staging/upstream-commit index 8c667d4a..4ecc201f 100644 --- a/staging/upstream-commit +++ b/staging/upstream-commit @@ -1 +1 @@ -2a4ec7dafc7ee38108f6a9f626a7c39e6b6777e0 +16c6c249a5134de2422fbd3471ead7425c968301