update wine to wine-1.1.20
[sugaredwine.git] / patches / 0024-do-not-rely-on-a-consistent-user-id.patch
blob4a24e7f1deaeba30b9182ea67645b11ca84db154
1 From b6cbfae584c0d2c53eaead0d5daa1235410f26d0 Mon Sep 17 00:00:00 2001
2 From: Vincent Povirk <vincent@codeweavers.com>
3 Date: Wed, 8 Oct 2008 15:43:46 -0500
4 Subject: [PATCH] do not rely on a consistent user id
6 Sugar has a security system called Rainbow that picks a different user
7 id for every instance of an activity. It does choose a consistent group
8 id.
9 ---
10 dlls/ntdll/server.c | 6 +++++-
11 libs/wine/config.c | 2 +-
12 server/request.c | 8 +++++---
13 3 files changed, 11 insertions(+), 5 deletions(-)
15 diff --git a/dlls/ntdll/server.c b/dlls/ntdll/server.c
16 index a7bc493..144ef0a 100644
17 --- a/dlls/ntdll/server.c
18 +++ b/dlls/ntdll/server.c
19 @@ -705,6 +705,7 @@ static void setup_config_dir(void)
21 if (errno != ENOENT) fatal_perror( "chdir to %s\n", config_dir );
23 +#if 0 /* check disabled because of rainbow */
24 if ((p = strrchr( config_dir, '/' )) && p != config_dir)
26 struct stat st;
27 @@ -718,6 +719,7 @@ static void setup_config_dir(void)
28 tmp_dir );
29 free( tmp_dir );
31 +#endif
33 mkdir( config_dir, 0777 );
34 if (chdir( config_dir ) == -1) fatal_perror( "chdir to %s\n", config_dir );
35 @@ -801,8 +803,10 @@ static int server_connect(void)
37 /* make sure we are at the right place */
38 if (stat( ".", &st ) == -1) fatal_perror( "stat %s", serverdir );
39 +#if 0 /* check disabled because of rainbow */
40 if (st.st_uid != getuid()) fatal_error( "'%s' is not owned by you\n", serverdir );
41 - if (st.st_mode & 077) fatal_error( "'%s' must not be accessible by other users\n", serverdir );
42 +#endif
43 + if (st.st_mode & 07) fatal_error( "'%s' must not be accessible by other users\n", serverdir );
45 for (retry = 0; retry < 6; retry++)
47 diff --git a/libs/wine/config.c b/libs/wine/config.c
48 index 280241c..26dcc1a 100644
49 --- a/libs/wine/config.c
50 +++ b/libs/wine/config.c
51 @@ -228,7 +228,7 @@ static void init_paths(void)
54 if (!S_ISDIR(st.st_mode)) fatal_error( "%s is not a directory\n", config_dir );
55 -#ifdef HAVE_GETUID
56 +#if 0 /* check disabled because of rainbow */
57 if (st.st_uid != getuid()) fatal_error( "%s is not owned by you\n", config_dir );
58 #endif
60 diff --git a/server/request.c b/server/request.c
61 index d2aebb3..e03f47b 100644
62 --- a/server/request.c
63 +++ b/server/request.c
64 @@ -527,12 +527,14 @@ static void create_dir( const char *name, struct stat *st )
65 if (lstat( name, st ) == -1)
67 if (errno != ENOENT) fatal_perror( "lstat %s", name );
68 - if (mkdir( name, 0700 ) == -1 && errno != EEXIST) fatal_perror( "mkdir %s", name );
69 + if (mkdir( name, 0770 ) == -1 && errno != EEXIST) fatal_perror( "mkdir %s", name );
70 if (lstat( name, st ) == -1) fatal_perror( "lstat %s", name );
72 if (!S_ISDIR(st->st_mode)) fatal_error( "%s is not a directory\n", name );
73 +#if 0 /* check disabled because of rainbow */
74 if (st->st_uid != getuid()) fatal_error( "%s is not owned by you\n", name );
75 - if (st->st_mode & 077) fatal_error( "%s must not be accessible by other users\n", name );
76 +#endif
77 + if (st->st_mode & 07) fatal_error( "%s must not be accessible by other users\n", name );
80 /* create the server directory and chdir to it */
81 @@ -580,7 +582,7 @@ static int create_server_lock(void)
82 fatal_error( "%s/%s is not a regular file\n", wine_get_server_dir(), server_lock_name );
85 - if ((fd = open( server_lock_name, O_CREAT|O_TRUNC|O_WRONLY, 0600 )) == -1)
86 + if ((fd = open( server_lock_name, O_CREAT|O_TRUNC|O_WRONLY, 0660 )) == -1)
87 fatal_perror( "error creating %s/%s", wine_get_server_dir(), server_lock_name );
88 return fd;
90 --
91 1.5.6.5