summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Cameron <bcameron@src.gnome.org>2005-06-20 16:32:42 +0000
committerBrian Cameron <bcameron@src.gnome.org>2005-06-20 16:32:42 +0000
commit6ac0dc9169ddf33f4afb3e0c5efd7243cbd0ed40 (patch)
tree5b0ce2d75106a1825a36051892f2c433964c45f4
parent0b32cd6fa605bf4fe47da18f88cba0c907e3a64e (diff)
downloadgdm-6ac0dc9169ddf33f4afb3e0c5efd7243cbd0ed40.tar.gz
Really fixing bug 308050, patch provided by Julio M. Merino Vidal
-rw-r--r--ChangeLog8
-rw-r--r--daemon/slave.c14
2 files changed, 19 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 9ae52542..78ded00d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -7,9 +7,11 @@
calls before the check, but didn't remove the
calls after the check. Calling these functions
twice is needless and was causing problems on
- NetBSD (refer to bug #301821), so now removing
- the needless second call. This fixes bug
- #301821.
+ NetBSD (refer to bug #301821), so now fixing
+ the logic so it doesn't needlessly call the
+ function twice. This fixes bug #301821. Patch
+ provided by Julio M. Merino Vidal. This fixes
+ bug #301821.
2005-06-17 Brian Cameron <brian.cameron@sun.com>
diff --git a/daemon/slave.c b/daemon/slave.c
index e3199546..4ccb6471 100644
--- a/daemon/slave.c
+++ b/daemon/slave.c
@@ -4014,6 +4014,10 @@ gdm_slave_session_start (void)
}
+ /*
+ * 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 @@ gdm_slave_session_start (void)
"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,6 +4056,15 @@ gdm_slave_session_start (void)
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 {