aboutsummaryrefslogtreecommitdiffstats
path: root/x11/gdm
diff options
context:
space:
mode:
authormarcus <marcus@FreeBSD.org>2009-06-01 04:00:18 +0800
committermarcus <marcus@FreeBSD.org>2009-06-01 04:00:18 +0800
commit8dbbe52bb416d8dc0f80ab3bee5c97e2d42caf8a (patch)
tree73890d2bb62cedcdd8ddce50a8110a9cda7db12e /x11/gdm
parentfe20ed0783c17a798e28411660606d8df45dbd2f (diff)
downloadfreebsd-ports-gnome-8dbbe52bb416d8dc0f80ab3bee5c97e2d42caf8a.tar.gz
freebsd-ports-gnome-8dbbe52bb416d8dc0f80ab3bee5c97e2d42caf8a.tar.zst
freebsd-ports-gnome-8dbbe52bb416d8dc0f80ab3bee5c97e2d42caf8a.zip
* Fix hardcoded use of /usr/local.
* Re-add support for reading /etc/login.conf. [1] PR: 133793 [1] Submitted by: thomas [1]
Diffstat (limited to 'x11/gdm')
-rw-r--r--x11/gdm/Makefile4
-rw-r--r--x11/gdm/files/patch-daemon_Makefile.in20
-rw-r--r--x11/gdm/files/patch-daemon_gdm-session-worker.c62
3 files changed, 75 insertions, 11 deletions
diff --git a/x11/gdm/Makefile b/x11/gdm/Makefile
index ba88d04917d5..6b3a6d205ea0 100644
--- a/x11/gdm/Makefile
+++ b/x11/gdm/Makefile
@@ -8,7 +8,7 @@
PORTNAME= gdm
PORTVERSION= 2.26.1
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= x11 gnome
MASTER_SITES= GNOME
DIST_SUBDIR= gnome2
@@ -68,7 +68,7 @@ CONFIGURE_ARGS+= --disable-ipv6
post-patch:
@${REINPLACE_CMD} -e 's|root:root|root:wheel|g' \
${WRKSRC}/data/Makefile.in
- @${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|' \
+ @${REINPLACE_CMD} -e 's|/usr/local|${LOCALBASE}|' \
${WRKSRC}/daemon/gdm-session-worker.c \
${WRKSRC}/data/gconf.path
@${REINPLACE_CMD} -e 's|/bin/true|/usr/bin/true|g' \
diff --git a/x11/gdm/files/patch-daemon_Makefile.in b/x11/gdm/files/patch-daemon_Makefile.in
index 9186a23e387f..137352970a91 100644
--- a/x11/gdm/files/patch-daemon_Makefile.in
+++ b/x11/gdm/files/patch-daemon_Makefile.in
@@ -1,10 +1,18 @@
---- daemon/Makefile.in.orig 2007-11-02 20:54:53.000000000 -0400
-+++ daemon/Makefile.in 2007-11-02 20:55:08.000000000 -0400
-@@ -451,6 +451,7 @@ test_session_SOURCES = \
-
- test_session_LDADD = \
+--- daemon/Makefile.in.orig 2009-05-31 15:51:18.000000000 -0400
++++ daemon/Makefile.in 2009-05-31 15:56:32.000000000 -0400
+@@ -525,6 +525,7 @@ test_session_LDADD = \
+ $(XLIB_LIBS) \
+ $(EXTRA_DAEMON_LIBS) \
$(DAEMON_LIBS) \
+ $(EXTRA_DAEMON_LIBS) \
$(PAM_LIBS) \
- $(top_builddir)/common/libgdmcommon.la \
$(NULL)
+
+@@ -660,6 +661,7 @@ gdm_session_worker_SOURCES = session-wor
+ gdm_session_worker_LDFLAGS = \
+ $(XLIB_LIBS) \
+ $(PAM_LIBS) \
++ $(EXTRA_DAEMON_LIBS) \
+ $(NULL)
+
+ gdm_session_worker_LDADD = \
diff --git a/x11/gdm/files/patch-daemon_gdm-session-worker.c b/x11/gdm/files/patch-daemon_gdm-session-worker.c
index 5f3a1b9ee2f0..0c56d5da4419 100644
--- a/x11/gdm/files/patch-daemon_gdm-session-worker.c
+++ b/x11/gdm/files/patch-daemon_gdm-session-worker.c
@@ -1,6 +1,16 @@
---- daemon/gdm-session-worker.c.orig 2008-07-30 19:15:47.000000000 -0400
-+++ daemon/gdm-session-worker.c 2008-08-25 12:50:00.000000000 -0400
-@@ -332,7 +332,7 @@ gdm_session_execute (const char *file,
+--- daemon/gdm-session-worker.c.orig 2009-04-14 10:01:14.000000000 -0400
++++ daemon/gdm-session-worker.c 2009-05-31 15:52:10.000000000 -0400
+@@ -31,6 +31,9 @@
+ #include <errno.h>
+ #include <grp.h>
+ #include <pwd.h>
++#ifdef HAVE_LOGINCAP
++#include <login_cap.h>
++#endif
+
+ #include <security/pam_appl.h>
+
+@@ -332,7 +335,7 @@ gdm_session_execute (const char *file,
* what to search if PATH is unset. POSIX may, dunno.
*/
@@ -9,3 +19,49 @@
}
len = strlen (file) + 1;
+@@ -1757,11 +1760,12 @@ gdm_session_worker_start_user_session (G
+ char **environment;
+ char *home_dir;
+ int fd;
++#ifdef HAVE_LOGINCAP
++ char *login = worker->priv->username;
++ struct passwd *pwent = getpwnam (login);
++#endif
+
+- if (setuid (worker->priv->uid) < 0) {
+- g_debug ("GdmSessionWorker: could not reset uid - %s", g_strerror (errno));
+- _exit (1);
+- }
++ /* Call setsid() before setusercontext() */
+
+ if (setsid () < 0) {
+ g_debug ("GdmSessionWorker: could not set pid '%u' as leader of new session and process group - %s",
+@@ -1769,6 +1773,28 @@ gdm_session_worker_start_user_session (G
+ _exit (2);
+ }
+
++#ifdef HAVE_LOGINCAP
++ if (setusercontext (NULL, pwent, pwent->pw_uid,
++ LOGIN_SETLOGIN | LOGIN_SETPATH |
++ LOGIN_SETPRIORITY | LOGIN_SETRESOURCES |
++ LOGIN_SETUMASK | LOGIN_SETUSER |
++ LOGIN_SETENV) < 0) {
++ g_debug ("%s: setusercontext () failed for %s. "
++ "Aborting.", "gdm_session_worker_start_user_session",
++ login ? login : "(null)");
++ }
++
++ /* Propagate PATH environment variable from user context to child processes */
++
++ gdm_session_worker_set_environment_variable (worker, "PATH", getenv ("PATH"));
++
++#else
++ if (setuid (worker->priv->uid) < 0) {
++ g_debug ("GdmSessionWorker: could not reset uid - %s", g_strerror (errno));
++ _exit (1);
++ }
++#endif
++
+ environment = gdm_session_worker_get_environment (worker);
+
+ g_assert (geteuid () == getuid ());