From a44a43769b06fbf5606e3f05224ffe84acc87e54 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Fri, 27 Oct 2017 23:42:26 +0200 Subject: [PATCH] Rebase against d0f2361170d140ad2510bb26ad187d30fd1c1afa. --- ...-support-for-creating-processes-usin.patch | 72 +++++++++---------- ...ct-error-code-for-non-network-paths-.patch | 14 ++-- ...-thread-to-initialize-COM-for-custom.patch | 18 ++--- patches/patchinstall.sh | 2 +- 4 files changed, 53 insertions(+), 53 deletions(-) diff --git a/patches/advapi32-Token_Integrity_Level/0010-server-Implement-support-for-creating-processes-usin.patch b/patches/advapi32-Token_Integrity_Level/0010-server-Implement-support-for-creating-processes-usin.patch index 03c4c587..7e5ce1c7 100644 --- a/patches/advapi32-Token_Integrity_Level/0010-server-Implement-support-for-creating-processes-usin.patch +++ b/patches/advapi32-Token_Integrity_Level/0010-server-Implement-support-for-creating-processes-usin.patch @@ -1,4 +1,4 @@ -From 9709db4e722195a70c5950b78b445c71eac495af Mon Sep 17 00:00:00 2001 +From 2993a76ec1711bb3ea1e889289f8d129f17ae2a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Sun, 6 Aug 2017 02:08:05 +0200 Subject: server: Implement support for creating processes using a token. @@ -14,10 +14,10 @@ Subject: server: Implement support for creating processes using a token. 7 files changed, 59 insertions(+), 21 deletions(-) diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c -index cacdcb3b621..3ae9d175a79 100644 +index c3dcd1349b3..69a026d5441 100644 --- a/dlls/kernel32/process.c +++ b/dlls/kernel32/process.c -@@ -2064,7 +2064,7 @@ static NTSTATUS create_struct_sd(PSECURITY_DESCRIPTOR nt_sd, struct security_des +@@ -2051,7 +2051,7 @@ static NTSTATUS create_struct_sd(PSECURITY_DESCRIPTOR nt_sd, struct security_des * Create a new process. If hFile is a valid handle we have an exe * file, otherwise it is a Winelib app. */ @@ -26,7 +26,7 @@ index cacdcb3b621..3ae9d175a79 100644 LPCWSTR cur_dir, LPSECURITY_ATTRIBUTES psa, LPSECURITY_ATTRIBUTES tsa, BOOL inherit, DWORD flags, LPSTARTUPINFOW startup, LPPROCESS_INFORMATION info, LPCSTR unixdir, -@@ -2210,6 +2210,7 @@ static BOOL create_process( HANDLE hFile, LPCWSTR filename, LPWSTR cmd_line, LPW +@@ -2197,6 +2197,7 @@ static BOOL create_process( HANDLE hFile, LPCWSTR filename, LPWSTR cmd_line, LPW req->info_size = startup_info_size; req->env_size = (env_end - env) * sizeof(WCHAR); req->process_sd_size = process_sd_size; @@ -34,7 +34,7 @@ index cacdcb3b621..3ae9d175a79 100644 wine_server_add_data( req, startup_info, startup_info_size ); wine_server_add_data( req, env, (env_end - env) * sizeof(WCHAR) ); -@@ -2310,7 +2311,7 @@ error: +@@ -2297,7 +2298,7 @@ error: * * Create a new VDM process for a 16-bit or DOS application. */ @@ -43,7 +43,7 @@ index cacdcb3b621..3ae9d175a79 100644 LPSECURITY_ATTRIBUTES psa, LPSECURITY_ATTRIBUTES tsa, BOOL inherit, DWORD flags, LPSTARTUPINFOW startup, LPPROCESS_INFORMATION info, LPCSTR unixdir, -@@ -2334,7 +2335,7 @@ static BOOL create_vdm_process( LPCWSTR filename, LPWSTR cmd_line, LPWSTR env, L +@@ -2321,7 +2322,7 @@ static BOOL create_vdm_process( LPCWSTR filename, LPWSTR cmd_line, LPWSTR env, L return FALSE; } sprintfW(new_cmd_line, argsW, winevdmW, buffer, cmd_line); @@ -52,7 +52,7 @@ index cacdcb3b621..3ae9d175a79 100644 flags, startup, info, unixdir, binary_info, exec_only ); HeapFree( GetProcessHeap(), 0, new_cmd_line ); return ret; -@@ -2346,7 +2347,7 @@ static BOOL create_vdm_process( LPCWSTR filename, LPWSTR cmd_line, LPWSTR env, L +@@ -2333,7 +2334,7 @@ static BOOL create_vdm_process( LPCWSTR filename, LPWSTR cmd_line, LPWSTR env, L * * Create a new cmd shell process for a .BAT file. */ @@ -61,7 +61,7 @@ index cacdcb3b621..3ae9d175a79 100644 LPSECURITY_ATTRIBUTES psa, LPSECURITY_ATTRIBUTES tsa, BOOL inherit, DWORD flags, LPSTARTUPINFOW startup, LPPROCESS_INFORMATION info ) -@@ -2371,8 +2372,8 @@ static BOOL create_cmd_process( LPCWSTR filename, LPWSTR cmd_line, LPVOID env, L +@@ -2358,8 +2359,8 @@ static BOOL create_cmd_process( LPCWSTR filename, LPWSTR cmd_line, LPVOID env, L strcpyW( newcmdline, comspec ); strcatW( newcmdline, slashcW ); strcatW( newcmdline, cmd_line ); @@ -72,7 +72,7 @@ index cacdcb3b621..3ae9d175a79 100644 HeapFree( GetProcessHeap(), 0, newcmdline ); return ret; } -@@ -2482,7 +2483,9 @@ BOOL WINAPI CreateProcessInternalW( HANDLE token, LPCWSTR app_name, LPWSTR cmd_l +@@ -2469,7 +2470,9 @@ BOOL WINAPI CreateProcessInternalW( HANDLE token, LPCWSTR app_name, LPWSTR cmd_l TRACE("app %s cmdline %s\n", debugstr_w(app_name), debugstr_w(cmd_line) ); @@ -83,10 +83,10 @@ index cacdcb3b621..3ae9d175a79 100644 if (new_token) FIXME("No support for returning created process token\n"); if (!(tidy_cmdline = get_file_name( app_name, cmd_line, name, sizeof(name)/sizeof(WCHAR), -@@ -2540,20 +2543,20 @@ BOOL WINAPI CreateProcessInternalW( HANDLE token, LPCWSTR app_name, LPWSTR cmd_l +@@ -2527,20 +2530,20 @@ BOOL WINAPI CreateProcessInternalW( HANDLE token, LPCWSTR app_name, LPWSTR cmd_l debugstr_w(name), (binary_info.flags & BINARY_FLAG_64BIT) ? 64 : 32, - binary_info.res_start, binary_info.res_end, binary_info.arch, - (binary_info.flags & BINARY_FLAG_FAKEDLL) ? ", fakedll" : "" ); + wine_dbgstr_longlong(binary_info.res_start), wine_dbgstr_longlong(binary_info.res_end), + binary_info.arch, (binary_info.flags & BINARY_FLAG_FAKEDLL) ? ", fakedll" : "" ); - retv = create_process( hFile, name, tidy_cmdline, envW, cur_dir, process_attr, thread_attr, + retv = create_process( token, hFile, name, tidy_cmdline, envW, cur_dir, process_attr, thread_attr, inherit, flags, startup_info, info, unixdir, &binary_info, FALSE ); @@ -107,7 +107,7 @@ index cacdcb3b621..3ae9d175a79 100644 inherit, flags, startup_info, info, unixdir, &binary_info, FALSE ); break; case BINARY_UNKNOWN: -@@ -2565,7 +2568,7 @@ BOOL WINAPI CreateProcessInternalW( HANDLE token, LPCWSTR app_name, LPWSTR cmd_l +@@ -2552,7 +2555,7 @@ BOOL WINAPI CreateProcessInternalW( HANDLE token, LPCWSTR app_name, LPWSTR cmd_l TRACE( "starting %s as DOS binary\n", debugstr_w(name) ); binary_info.type = BINARY_DOS; binary_info.arch = IMAGE_FILE_MACHINE_I386; @@ -116,7 +116,7 @@ index cacdcb3b621..3ae9d175a79 100644 inherit, flags, startup_info, info, unixdir, &binary_info, FALSE ); break; -@@ -2573,7 +2576,7 @@ BOOL WINAPI CreateProcessInternalW( HANDLE token, LPCWSTR app_name, LPWSTR cmd_l +@@ -2560,7 +2563,7 @@ BOOL WINAPI CreateProcessInternalW( HANDLE token, LPCWSTR app_name, LPWSTR cmd_l if (!strcmpiW( p, batW ) || !strcmpiW( p, cmdW ) ) { TRACE( "starting %s as batch binary\n", debugstr_w(name) ); @@ -125,10 +125,10 @@ index cacdcb3b621..3ae9d175a79 100644 inherit, flags, startup_info, info ); break; } -@@ -2692,12 +2695,12 @@ static void exec_process( LPCWSTR name ) - TRACE( "starting %s as Win%d binary (%p-%p, arch %04x)\n", +@@ -2680,12 +2683,12 @@ static void exec_process( LPCWSTR name ) debugstr_w(name), (binary_info.flags & BINARY_FLAG_64BIT) ? 64 : 32, - binary_info.res_start, binary_info.res_end, binary_info.arch ); + wine_dbgstr_longlong(binary_info.res_start), wine_dbgstr_longlong(binary_info.res_end), + binary_info.arch ); - create_process( hFile, name, GetCommandLineW(), NULL, NULL, NULL, NULL, + create_process( NULL, hFile, name, GetCommandLineW(), NULL, NULL, NULL, NULL, FALSE, 0, &startup_info, &info, NULL, &binary_info, TRUE ); @@ -140,7 +140,7 @@ index cacdcb3b621..3ae9d175a79 100644 FALSE, 0, &startup_info, &info, NULL, &binary_info, TRUE ); break; case BINARY_UNKNOWN: -@@ -2711,7 +2714,7 @@ static void exec_process( LPCWSTR name ) +@@ -2699,7 +2702,7 @@ static void exec_process( LPCWSTR name ) case BINARY_WIN16: case BINARY_DOS: TRACE( "starting %s as Win16/DOS binary\n", debugstr_w(name) ); @@ -150,10 +150,10 @@ index cacdcb3b621..3ae9d175a79 100644 break; default: diff --git a/server/process.c b/server/process.c -index 74675d343b4..ef2452fb8fb 100644 +index 81cea2f1baa..7d2206f2744 100644 --- a/server/process.c +++ b/server/process.c -@@ -501,7 +501,7 @@ static void start_sigkill_timer( struct process *process ) +@@ -496,7 +496,7 @@ static void start_sigkill_timer( struct process *process ) /* create a new process and its main thread */ /* if the function fails the fd is closed */ @@ -162,7 +162,7 @@ index 74675d343b4..ef2452fb8fb 100644 { struct process *process; struct thread *thread = NULL; -@@ -571,7 +571,7 @@ struct thread *create_process( int fd, struct thread *parent_thread, int inherit +@@ -567,7 +567,7 @@ struct thread *create_process( int fd, struct thread *parent_thread, int inherit : alloc_handle_table( process, 0 ); /* Note: for security reasons, starting a new process does not attempt * to use the current impersonation token for the new process */ @@ -171,7 +171,7 @@ index 74675d343b4..ef2452fb8fb 100644 process->affinity = parent->affinity; } if (!process->handles || !process->token) goto error; -@@ -1160,6 +1160,7 @@ DECL_HANDLER(new_process) +@@ -1147,6 +1147,7 @@ DECL_HANDLER(new_process) struct startup_info *info; struct thread *thread; struct process *process; @@ -179,7 +179,7 @@ index 74675d343b4..ef2452fb8fb 100644 struct process *parent = current->process; int socket_fd = thread_get_inflight_fd( current, req->socket_fd ); const struct security_descriptor *process_sd = NULL, *thread_sd = NULL; -@@ -1195,9 +1196,27 @@ DECL_HANDLER(new_process) +@@ -1182,9 +1183,27 @@ DECL_HANDLER(new_process) return; } @@ -208,7 +208,7 @@ index 74675d343b4..ef2452fb8fb 100644 return; } -@@ -1205,6 +1224,7 @@ DECL_HANDLER(new_process) +@@ -1192,6 +1211,7 @@ DECL_HANDLER(new_process) if (!(info = alloc_object( &startup_info_ops ))) { close( socket_fd ); @@ -216,7 +216,7 @@ index 74675d343b4..ef2452fb8fb 100644 return; } info->exe_file = NULL; -@@ -1287,7 +1307,7 @@ DECL_HANDLER(new_process) +@@ -1274,7 +1294,7 @@ DECL_HANDLER(new_process) } } @@ -225,7 +225,7 @@ index 74675d343b4..ef2452fb8fb 100644 process = thread->process; process->startup_info = (struct startup_info *)grab_object( info ); -@@ -1369,6 +1389,7 @@ DECL_HANDLER(new_process) +@@ -1356,6 +1376,7 @@ DECL_HANDLER(new_process) } done: @@ -234,10 +234,10 @@ index 74675d343b4..ef2452fb8fb 100644 } diff --git a/server/process.h b/server/process.h -index 262eb59627b..fcb45d8d676 100644 +index 78e88ec350a..313c36ab241 100644 --- a/server/process.h +++ b/server/process.h -@@ -115,7 +115,7 @@ struct process_snapshot +@@ -114,7 +114,7 @@ struct process_snapshot extern unsigned int alloc_ptid( void *ptr ); extern void free_ptid( unsigned int id ); extern void *get_ptid_entry( unsigned int id ); @@ -247,10 +247,10 @@ index 262eb59627b..fcb45d8d676 100644 extern struct thread *get_process_first_thread( struct process *process ); extern struct process *get_process_from_id( process_id_t id ); diff --git a/server/protocol.def b/server/protocol.def -index e5b598259f7..7106cdb6f04 100644 +index 1ea129fec08..95513fef6c3 100644 --- a/server/protocol.def +++ b/server/protocol.def -@@ -767,6 +767,7 @@ struct rawinput_device +@@ -739,6 +739,7 @@ struct rawinput_device data_size_t info_size; /* size of startup info */ data_size_t env_size; /* size of the environment */ data_size_t process_sd_size;/* size of the process security descriptor */ @@ -259,10 +259,10 @@ index e5b598259f7..7106cdb6f04 100644 VARARG(env,unicode_str,env_size); /* environment for new process */ VARARG(process_sd,security_descriptor,process_sd_size); /* security descriptor to set on the process */ diff --git a/server/request.c b/server/request.c -index 83e608917f8..23760cdeb98 100644 +index 6120bc550ff..a648c306496 100644 --- a/server/request.c +++ b/server/request.c -@@ -571,7 +571,7 @@ static void master_socket_poll_event( struct fd *fd, int event ) +@@ -570,7 +570,7 @@ static void master_socket_poll_event( struct fd *fd, int event ) int client = accept( get_unix_fd( master_socket->fd ), (struct sockaddr *) &dummy, &len ); if (client == -1) return; fcntl( client, F_SETFL, O_NONBLOCK ); @@ -285,10 +285,10 @@ index 21e90ccf23f..32dfe5f8db9 100644 static inline const ACE_HEADER *ace_next( const ACE_HEADER *ace ) { diff --git a/server/token.c b/server/token.c -index 385ea3bbfda..c507294b49d 100644 +index 49e84362a83..f6b6165d7a9 100644 --- a/server/token.c +++ b/server/token.c -@@ -851,6 +851,12 @@ int token_assign_label( struct token *token, PSID label ) +@@ -843,6 +843,12 @@ int token_assign_label( struct token *token, PSID label ) return ret; } @@ -301,7 +301,7 @@ index 385ea3bbfda..c507294b49d 100644 struct token *token_create_admin( void ) { struct token *token = NULL; -@@ -1278,6 +1284,11 @@ const SID *token_get_primary_group( struct token *token ) +@@ -1269,6 +1275,11 @@ const SID *token_get_primary_group( struct token *token ) return token->primary_group; } @@ -314,5 +314,5 @@ index 385ea3bbfda..c507294b49d 100644 { GENERIC_MAPPING mapping; -- -2.13.1 +2.14.2 diff --git a/patches/mpr-WNetGetUniversalNameW/0001-mpr-Return-correct-error-code-for-non-network-paths-.patch b/patches/mpr-WNetGetUniversalNameW/0001-mpr-Return-correct-error-code-for-non-network-paths-.patch index f8b5dfc3..df152f92 100644 --- a/patches/mpr-WNetGetUniversalNameW/0001-mpr-Return-correct-error-code-for-non-network-paths-.patch +++ b/patches/mpr-WNetGetUniversalNameW/0001-mpr-Return-correct-error-code-for-non-network-paths-.patch @@ -1,4 +1,4 @@ -From 09b4c584ce6017ae0887edf18d989807c40bec4e Mon Sep 17 00:00:00 2001 +From 700f06e65a7f0aa474d40ad238138866e2c51ca0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Sun, 18 Oct 2015 03:27:41 +0200 Subject: mpr: Return correct error code for non network paths and @@ -14,7 +14,7 @@ Signed-off-by: Michael Müller 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/dlls/mpr/tests/mpr.c b/dlls/mpr/tests/mpr.c -index 364ac2cc601..19097b8a286 100644 +index a6af1b57f8d..1b16369d514 100644 --- a/dlls/mpr/tests/mpr.c +++ b/dlls/mpr/tests/mpr.c @@ -101,25 +101,23 @@ static void test_WNetGetRemoteName(void) @@ -37,7 +37,7 @@ index 364ac2cc601..19097b8a286 100644 - todo_wine{ if(drive_type == DRIVE_REMOTE) + todo_wine - ok(ret == WN_BAD_VALUE, "WNetGetUniversalNameA failed: %08x\n", ret); + ok(ret == WN_BAD_VALUE || ret == WN_MORE_DATA, "WNetGetUniversalNameA failed: %08x\n", ret); else ok(ret == WN_NOT_CONNECTED || ret == WN_NO_NET_OR_BAD_PATH, "(%s) WNetGetUniversalNameA gave wrong error: %u\n", driveA, ret); @@ -52,7 +52,7 @@ index 364ac2cc601..19097b8a286 100644 - todo_wine { if(drive_type == DRIVE_REMOTE) + todo_wine - ok(ret == WN_BAD_POINTER, "WNetGetUniversalNameA failed: %08x\n", ret); + ok(ret == WN_BAD_POINTER || ret == WN_BAD_VALUE, "WNetGetUniversalNameA failed: %08x\n", ret); else ok(ret == WN_NOT_CONNECTED || ret == WN_BAD_VALUE, "(%s) WNetGetUniversalNameA gave wrong error: %u\n", driveA, ret); @@ -61,10 +61,10 @@ index 364ac2cc601..19097b8a286 100644 fail_size = sizeof(driveA) / sizeof(char) - 1; ret = WNetGetUniversalNameA(driveA, REMOTE_NAME_INFO_LEVEL, diff --git a/dlls/mpr/wnet.c b/dlls/mpr/wnet.c -index cbbc1bdfb04..1514d014e8b 100644 +index 7b24693e0e8..78759ecb152 100644 --- a/dlls/mpr/wnet.c +++ b/dlls/mpr/wnet.c -@@ -2345,7 +2345,7 @@ DWORD WINAPI WNetGetUniversalNameA ( LPCSTR lpLocalPath, DWORD dwInfoLevel, +@@ -2348,7 +2348,7 @@ DWORD WINAPI WNetGetUniversalNameA ( LPCSTR lpLocalPath, DWORD dwInfoLevel, break; } case REMOTE_NAME_INFO_LEVEL: @@ -74,5 +74,5 @@ index cbbc1bdfb04..1514d014e8b 100644 default: -- -2.13.1 +2.14.2 diff --git a/patches/msi-Dummy_Thread/0001-msi-Create-dummy-thread-to-initialize-COM-for-custom.patch b/patches/msi-Dummy_Thread/0001-msi-Create-dummy-thread-to-initialize-COM-for-custom.patch index ec1c5be0..1bc0063b 100644 --- a/patches/msi-Dummy_Thread/0001-msi-Create-dummy-thread-to-initialize-COM-for-custom.patch +++ b/patches/msi-Dummy_Thread/0001-msi-Create-dummy-thread-to-initialize-COM-for-custom.patch @@ -1,4 +1,4 @@ -From 246ebe70f4b1ffb5a41098045c0a29be6055d7dd Mon Sep 17 00:00:00 2001 +From 314e990c95edd137695f81edb0ce138615cd11b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Mon, 26 Jun 2017 16:18:09 +0200 Subject: msi: Create dummy thread to initialize COM for custom actions. @@ -8,7 +8,7 @@ Subject: msi: Create dummy thread to initialize COM for custom actions. 1 file changed, 48 insertions(+) diff --git a/dlls/msi/action.c b/dlls/msi/action.c -index 24ada643035..178e3949ee2 100644 +index 58a831e7e63..e440ee77fd9 100644 --- a/dlls/msi/action.c +++ b/dlls/msi/action.c @@ -160,6 +160,13 @@ static const WCHAR szWriteEnvironmentStrings[] = @@ -25,7 +25,7 @@ index 24ada643035..178e3949ee2 100644 static INT ui_actionstart(MSIPACKAGE *package, LPCWSTR action, LPCWSTR description, LPCWSTR template) { WCHAR query[] = {'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ', -@@ -7946,6 +7953,42 @@ static UINT ACTION_PerformActionSequence(MSIPACKAGE *package, UINT seq) +@@ -7968,6 +7975,42 @@ static UINT ACTION_PerformActionSequence(MSIPACKAGE *package, UINT seq) return rc; } @@ -68,15 +68,15 @@ index 24ada643035..178e3949ee2 100644 /**************************************************** * TOP level entry points *****************************************************/ -@@ -7956,6 +7999,7 @@ UINT MSI_InstallPackage( MSIPACKAGE *package, LPCWSTR szPackagePath, +@@ -7978,6 +8021,7 @@ UINT MSI_InstallPackage( MSIPACKAGE *package, LPCWSTR szPackagePath, static const WCHAR szDisableRollback[] = {'D','I','S','A','B','L','E','R','O','L','L','B','A','C','K',0}; static const WCHAR szAction[] = {'A','C','T','I','O','N',0}; - WCHAR *reinstall, *remove, *patch, *productcode, *action; + WCHAR *reinstall = NULL, *productcode, *action; + struct dummy_thread thread_info = {NULL, NULL, NULL}; UINT rc; DWORD len = 0; -@@ -8023,6 +8067,8 @@ UINT MSI_InstallPackage( MSIPACKAGE *package, LPCWSTR szPackagePath, +@@ -8034,6 +8078,8 @@ UINT MSI_InstallPackage( MSIPACKAGE *package, LPCWSTR szPackagePath, msi_adjust_privilege_properties( package ); msi_set_context( package ); @@ -85,15 +85,15 @@ index 24ada643035..178e3949ee2 100644 productcode = msi_dup_property( package->db, szProductCode ); if (strcmpiW( productcode, package->ProductCode )) { -@@ -8059,6 +8105,8 @@ UINT MSI_InstallPackage( MSIPACKAGE *package, LPCWSTR szPackagePath, +@@ -8070,6 +8116,8 @@ UINT MSI_InstallPackage( MSIPACKAGE *package, LPCWSTR szPackagePath, /* finish up running custom actions */ ACTION_FinishCustomActions(package); + stop_dummy_thread(&thread_info); + - if (package->need_rollback && !reinstall) + if (package->need_rollback && !(reinstall = msi_dup_property( package->db, szReinstall ))) { WARN("installation failed, running rollback script\n"); -- -2.14.1 +2.14.2 diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index 772676cd..988aa3a4 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -52,7 +52,7 @@ usage() # Get the upstream commit sha upstream_commit() { - echo "c14a16b08911d1695e42b75c60436ace9f42ea01" + echo "d0f2361170d140ad2510bb26ad187d30fd1c1afa" } # Show version information