aboutsummaryrefslogtreecommitdiff
path: root/x11/gdm/files/patch-daemon_slave.c
blob: 56a5074e18a790bf5e20c2a15ed432b99c59ccf8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
--- daemon/slave.c.orig	Fri May  6 17:05:17 2005
+++ daemon/slave.c	Sun Jun 26 15:53:00 2005
@@ -4014,6 +4014,10 @@
 
     }
 
+    /*
+     * Set euid, gid to user before testing for user's $HOME since root
+     * does not always have access to the user's $HOME directory.
+     */
     if G_UNLIKELY (setegid (pwent->pw_gid) != 0 ||
 		   seteuid (pwent->pw_uid) != 0) {
 	    gdm_error ("Cannot set effective user/group id");
@@ -4033,6 +4037,7 @@
 		       "you use a failsafe session."),
 		     ve_sure_string (pwent->pw_dir));
 
+	    /* Set euid, egid to root:gdm to manage user interaction */
             seteuid (0);
             setegid (GdmGroupId);
 
@@ -4051,19 +4056,20 @@
 
 	    g_free (msg);
 
+	    /* Reset euid, egid back to user */
+	    if G_UNLIKELY (setegid (pwent->pw_gid) != 0 ||
+			   seteuid (pwent->pw_uid) != 0) {
+		    gdm_error ("Cannot set effective user/group id");
+		    gdm_verify_cleanup (d);
+		    session_started = FALSE;
+		    return;
+	    }
+
 	    home_dir_ok = FALSE;
 	    home_dir = "/";
     } else {
 	    home_dir_ok = TRUE;
 	    home_dir = pwent->pw_dir;
-    }
-
-    if G_UNLIKELY (setegid (pwent->pw_gid) != 0 ||
-		   seteuid (pwent->pw_uid) != 0) {
-	    gdm_error ("Cannot set effective user/group id");
-	    gdm_verify_cleanup (d);
-	    session_started = FALSE;
-	    return;
     }
 
     if G_LIKELY (home_dir_ok) {