diff options
-rw-r--r-- | x11/gdm/Makefile | 2 | ||||
-rw-r--r-- | x11/gdm/files/patch-daemon_gdm-session-worker.c | 53 |
2 files changed, 49 insertions, 6 deletions
diff --git a/x11/gdm/Makefile b/x11/gdm/Makefile index 69a41b9c4bcd..c5659afefbb1 100644 --- a/x11/gdm/Makefile +++ b/x11/gdm/Makefile @@ -8,7 +8,7 @@ PORTNAME= gdm PORTVERSION= 2.30.5 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= x11 gnome MASTER_SITES= GNOME DIST_SUBDIR= gnome2 diff --git a/x11/gdm/files/patch-daemon_gdm-session-worker.c b/x11/gdm/files/patch-daemon_gdm-session-worker.c index 362a116eaa79..fc29affddab0 100644 --- a/x11/gdm/files/patch-daemon_gdm-session-worker.c +++ b/x11/gdm/files/patch-daemon_gdm-session-worker.c @@ -1,5 +1,5 @@ ---- daemon/gdm-session-worker.c.orig 2009-09-21 22:05:27.000000000 +0200 -+++ daemon/gdm-session-worker.c 2009-09-22 12:33:59.000000000 +0200 +--- daemon/gdm-session-worker.c.orig 2010-08-11 19:40:07.000000000 +0200 ++++ daemon/gdm-session-worker.c 2011-03-29 10:37:37.000000000 +0200 @@ -31,6 +31,9 @@ #include <errno.h> #include <grp.h> @@ -10,7 +10,7 @@ #ifdef HAVE_LOGINDEVPERM #include <libdevinfo.h> -@@ -340,7 +343,7 @@ gdm_session_execute (const char *file, +@@ -341,7 +344,7 @@ gdm_session_execute (const char *file, * what to search if PATH is unset. POSIX may, dunno. */ @@ -19,7 +19,50 @@ } len = strlen (file) + 1; -@@ -1995,15 +1998,16 @@ gdm_session_worker_start_user_session (G +@@ -1035,17 +1038,6 @@ gdm_cache_copy_file (GdmSessionWorker *w + error->message); + g_error_free (error); + } else { +- int res; +- +- res = chown (cachefilename, +- worker->priv->uid, +- worker->priv->gid); +- if (res == -1) { +- g_warning ("GdmSessionWorker: Error setting owner of cache file: %s", +- g_strerror (errno)); +- } +- +- g_chmod (cachefilename, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); + g_debug ("Copy successful"); + } + +@@ -1183,7 +1175,23 @@ gdm_session_worker_uninitialize_pam (Gdm + return; + + if (worker->priv->state >= GDM_SESSION_WORKER_STATE_SESSION_OPENED) { +- gdm_session_worker_cache_userfiles (worker); ++ pid_t pid; ++ ++ pid = fork (); ++ ++ if (pid == 0) { ++ if (setuid (worker->priv->uid) < 0) { ++ g_debug ("GdmSessionWorker: could not reset uid: %s", g_strerror (errno)); ++ _exit (1); ++ } ++ ++ gdm_session_worker_cache_userfiles (worker); ++ _exit (0); ++ } ++ ++ if (pid > 0) { ++ gdm_wait_on_pid (pid); ++ } + pam_close_session (worker->priv->pam_handle, 0); + gdm_session_auditor_report_logout (worker->priv->auditor); + +@@ -2027,15 +2035,16 @@ gdm_session_worker_start_user_session (G char *cachedirname; char *home_dir; int fd; @@ -40,7 +83,7 @@ if (setsid () < 0) { g_debug ("GdmSessionWorker: could not set pid '%u' as leader of new session and process group - %s", -@@ -2011,6 +2015,28 @@ gdm_session_worker_start_user_session (G +@@ -2043,6 +2052,28 @@ gdm_session_worker_start_user_session (G _exit (2); } |