diff options
author | Brian Cameron <bcameron@src.gnome.org> | 2005-06-20 16:32:42 +0000 |
---|---|---|
committer | Brian Cameron <bcameron@src.gnome.org> | 2005-06-20 16:32:42 +0000 |
commit | 6ac0dc9169ddf33f4afb3e0c5efd7243cbd0ed40 (patch) | |
tree | 5b0ce2d75106a1825a36051892f2c433964c45f4 | |
parent | 0b32cd6fa605bf4fe47da18f88cba0c907e3a64e (diff) | |
download | gdm-6ac0dc9169ddf33f4afb3e0c5efd7243cbd0ed40.tar.gz |
Really fixing bug 308050, patch provided by Julio M. Merino Vidal
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | daemon/slave.c | 14 |
2 files changed, 19 insertions, 3 deletions
@@ -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 { |