# HG changeset patch
# User Ray Strode <rstrode@redhat.com>

worker: get PATH from parent instead of #define

If no PATH is set, then the session worker tries to set one up,
based on guess. This commit changes GDM to just use the PATH given
to GDM itself, rather than guessing (and getting it wrong).

https://bugzilla.gnome.org/show_bug.cgi?id=727980

diff --git a/common/Makefile.am b/common/Makefile.am
index 2e97090..ece167b 100644
--- a/common/Makefile.am
+++ b/common/Makefile.am
@@ -15,17 +15,16 @@ AM_CPPFLAGS = \
 	-DLIBEXECDIR=\"$(libexecdir)\"			\
 	-DLOGDIR=\"$(logdir)\"				\
 	-DPIXMAPDIR=\"$(pixmapdir)\"			\
 	-DSBINDIR=\"$(sbindir)\"			\
 	-DGNOMELOCALEDIR=\""$(datadir)/locale"\"	\
 	-DGDM_DEFAULTS_CONF=\"$(GDM_DEFAULTS_CONF)\"	\
 	-DGDM_CUSTOM_CONF=\"$(GDM_CUSTOM_CONF)\"	\
 	-DGDM_OLD_CONF=\"$(GDM_OLD_CONF)\"		\
-	-DGDM_SESSION_DEFAULT_PATH=\"$(GDM_SESSION_DEFAULT_PATH)\" \
 	$(COMMON_CFLAGS)				\
 	$(NULL)
 
 noinst_LTLIBRARIES = 		\
 	libgdmcommon.la		\
 	$(NULL)
 
 gdmdir = $(datadir)/gdm
diff --git a/common/gdm-common.c b/common/gdm-common.c
index 4017313..aeb873b 100644
--- a/common/gdm-common.c
+++ b/common/gdm-common.c
@@ -904,17 +904,17 @@ gdm_get_script_environment (const char *username,
 
         if (display_hostname) {
                 g_hash_table_insert (hash, g_strdup ("REMOTE_HOST"), g_strdup (display_hostname));
         }
 
         /* Runs as root */
         g_hash_table_insert (hash, g_strdup ("XAUTHORITY"), g_strdup (display_x11_authority_file));
         g_hash_table_insert (hash, g_strdup ("DISPLAY"), g_strdup (display_name));
-        g_hash_table_insert (hash, g_strdup ("PATH"), g_strdup (GDM_SESSION_DEFAULT_PATH));
+        g_hash_table_insert (hash, g_strdup ("PATH"), g_strdup (g_getenv ("PATH")));
         g_hash_table_insert (hash, g_strdup ("RUNNING_UNDER_GDM"), g_strdup ("true"));
 
         g_hash_table_remove (hash, "MAIL");
 
         g_hash_table_foreach (hash, (GHFunc)listify_hash, env);
         g_hash_table_destroy (hash);
 
         g_ptr_array_add (env, NULL);
diff --git a/configure.ac b/configure.ac
index f66fdd9..10bb838 100644
--- a/configure.ac
+++ b/configure.ac
@@ -269,33 +269,16 @@ AC_ARG_WITH(plymouth,
 AC_ARG_WITH(at-spi-registryd-directory,
             AS_HELP_STRING([--with-at-spi-registryd-directory],
 	                   [Specify the directory of at-spi-registryd @<:@default=libexecdir@:>@])],,
             [with_at_spi_registryd_directory="${libexecdir}"])
 
 AT_SPI_REGISTRYD_DIR=$with_at_spi_registryd_directory
 AC_SUBST(AT_SPI_REGISTRYD_DIR)
 
-# Allow configuration of default PATH
-#
-withval=""
-AC_ARG_WITH(default-path,
-            AS_HELP_STRING([--with-default-path=<PATH>],
-	                   [PATH GDM will use as the user's default PATH]),
-            [if test x$withval != x; then
-               AC_MSG_RESULT("PATH ${withval} will be the default PATH.")
-             fi])
-
-if test x$withval != x; then
-	GDM_SESSION_DEFAULT_PATH="$withval"
-else
-	GDM_SESSION_DEFAULT_PATH="/usr/local/bin:/usr/bin:/bin"
-fi
-AC_SUBST(GDM_SESSION_DEFAULT_PATH)
-
 dnl
 dnl file that sets LANG
 dnl
 withval=""
 AC_ARG_WITH(lang-file,
             AS_HELP_STRING([--with-lang-file=<filename>],
 	                   [file containing default language setting]),
             [if test x$withval != x; then
diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index 691c939..6944baa 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -14,17 +14,16 @@ AM_CPPFLAGS = \
 	-DLOCALSTATEDIR=\"$(localstatedir)\"		\
 	-DLOGDIR=\"$(logdir)\"				\
 	-DSBINDIR=\"$(sbindir)\"			\
 	-DGNOMELOCALEDIR=\""$(datadir)/locale"\"	\
 	-DGDM_RUN_DIR=\"$(GDM_RUN_DIR)\"		\
 	-DGDM_XAUTH_DIR=\"$(GDM_XAUTH_DIR)\"		\
 	-DGDM_SCREENSHOT_DIR=\"$(GDM_SCREENSHOT_DIR)\"		\
 	-DGDM_CACHE_DIR=\""$(localstatedir)/cache/gdm"\"	\
-	-DGDM_SESSION_DEFAULT_PATH=\"$(GDM_SESSION_DEFAULT_PATH)\" \
 	-DCONSOLEKIT_DIR=\"$(CONSOLEKIT_DIR)\" \
 	$(DISABLE_DEPRECATED_CFLAGS)			\
 	$(DAEMON_CFLAGS)				\
 	$(XLIB_CFLAGS)					\
 	$(WARN_CFLAGS)					\
 	$(DEBUG_CFLAGS)					\
 	$(SYSTEMD_CFLAGS)				\
 	$(JOURNALD_CFLAGS)				\
diff --git a/daemon/gdm-session-worker.c b/daemon/gdm-session-worker.c
index 8493fbd..5fc42c6 100644
--- a/daemon/gdm-session-worker.c
+++ b/daemon/gdm-session-worker.c
@@ -85,20 +85,16 @@
 #define GDM_SESSION_DBUS_ERROR_CANCEL "org.gnome.DisplayManager.Session.Error.Cancel"
 
 #define GDM_WORKER_DBUS_PATH "/org/gnome/DisplayManager/Worker"
 
 #ifndef GDM_PASSWD_AUXILLARY_BUFFER_SIZE
 #define GDM_PASSWD_AUXILLARY_BUFFER_SIZE 1024
 #endif
 
-#ifndef GDM_SESSION_DEFAULT_PATH
-#define GDM_SESSION_DEFAULT_PATH "/usr/local/bin:/usr/bin:/bin"
-#endif
-
 #ifndef GDM_SESSION_ROOT_UID
 #define GDM_SESSION_ROOT_UID 0
 #endif
 
 #ifndef GDM_SESSION_LOG_FILENAME
 #define GDM_SESSION_LOG_FILENAME "session.log"
 #endif
 
@@ -1502,23 +1498,20 @@ gdm_session_worker_accredit_user (GdmSessionWorker  *worker,
                                                                 uid,
                                                                 gid,
                                                                 home,
                                                                 shell);
 
         /* Let's give the user a default PATH if he doesn't already have one
          */
         if (!gdm_session_worker_environment_variable_is_set (worker, "PATH")) {
-                if (strcmp (BINDIR, "/usr/bin") == 0) {
-                        gdm_session_worker_set_environment_variable (worker, "PATH",
-                                                                     GDM_SESSION_DEFAULT_PATH);
-                } else {
-                        gdm_session_worker_set_environment_variable (worker, "PATH",
-                                                                     BINDIR ":" GDM_SESSION_DEFAULT_PATH);
-                }
+                const char *path;
+
+                path = g_getenv ("PATH");
+                gdm_session_worker_set_environment_variable (worker, "PATH", path);
         }
 
         if (! _change_user (worker, uid, gid)) {
                 g_debug ("GdmSessionWorker: Unable to change to user");
                 error_code = PAM_SYSTEM_ERR;
                 g_set_error (error, GDM_SESSION_WORKER_ERROR,
                              GDM_SESSION_WORKER_ERROR_GIVING_CREDENTIALS,
                              "%s", _("Unable to change to user"));
