diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d26f978 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/gdm-3.8.4.tar.xz diff --git a/SOURCES/set-proper-path.patch b/SOURCES/set-proper-path.patch deleted file mode 100644 index 969af53..0000000 --- a/SOURCES/set-proper-path.patch +++ /dev/null @@ -1,283 +0,0 @@ -From ce51da7e2600c87a1426b4a7c1ddba8ddf622752 Mon Sep 17 00:00:00 2001 -From: Ray Strode -Date: Tue, 1 Apr 2014 13:11:57 -0400 -Subject: [PATCH] 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). ---- - daemon/Makefile.am | 1 - - daemon/gdm-session-worker.c | 15 ++++----------- - daemon/gdm-slave.c | 2 +- - 3 files changed, 5 insertions(+), 13 deletions(-) - -diff --git a/daemon/Makefile.am b/daemon/Makefile.am -index 750735a..b8b83c8 100644 ---- a/daemon/Makefile.am -+++ b/daemon/Makefile.am -@@ -1,53 +1,52 @@ - NULL = - - AM_CPPFLAGS = \ - -I. \ - -I.. \ - -I$(top_srcdir)/common \ - -I$(top_builddir)/common \ - -DAUTHDIR=\"$(authdir)\" \ - -DBINDIR=\"$(bindir)\" \ - -DDATADIR=\"$(datadir)\" \ - -DDMCONFDIR=\"$(dmconfdir)\" \ - -DGDMCONFDIR=\"$(gdmconfdir)\" \ - -DLIBDIR=\"$(libdir)\" \ - -DLIBEXECDIR=\"$(libexecdir)\" \ - -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) \ - $(LIBSELINUX_CFLAGS) \ - -DLANG_CONFIG_FILE=\"$(LANG_CONFIG_FILE)\" \ - $(NULL) - - BUILT_SOURCES = \ - gdm-slave-glue.h \ - gdm-xdmcp-chooser-slave-glue.h \ - gdm-display-glue.h \ - gdm-xdmcp-display-glue.h \ - gdm-manager-glue.h \ - gdm-static-display-glue.h \ - gdm-transient-display-glue.h \ - gdm-local-display-factory-glue.h \ - gdm-session-glue.h \ - gdm-session-worker-glue.h \ - gdm-session-enum-types.h \ - $(NULL) - - gdm-session-enum-types.h: gdm-session-enum-types.h.in gdm-session.h - $(AM_V_GEN) glib-mkenums --template $^ > $@ - - gdm-session-enum-types.c: gdm-session-enum-types.c.in gdm-session.h -diff --git a/daemon/gdm-session-worker.c b/daemon/gdm-session-worker.c -index eb81450..fe64804 100644 ---- a/daemon/gdm-session-worker.c -+++ b/daemon/gdm-session-worker.c -@@ -59,64 +59,60 @@ - #endif /* HAVE_SELINUX */ - - #include "gdm-common.h" - #include "gdm-log.h" - #include "gdm-session-worker.h" - #include "gdm-session-glue.h" - #include "gdm-session.h" - - #if defined (HAVE_ADT) - #include "gdm-session-solaris-auditor.h" - #elif defined (HAVE_LIBAUDIT) - #include "gdm-session-linux-auditor.h" - #else - #include "gdm-session-auditor.h" - #endif - - #include "gdm-session-settings.h" - - #define GDM_SESSION_WORKER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_SESSION_WORKER, GdmSessionWorkerPrivate)) - - #define GDM_SESSION_DBUS_PATH "/org/gnome/DisplayManager/Session" - #define GDM_SESSION_DBUS_NAME "org.gnome.DisplayManager.Session" - #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 - - #define MAX_FILE_SIZE 65536 - #define MAX_LOGS 5 - - enum { - GDM_SESSION_WORKER_STATE_NONE = 0, - GDM_SESSION_WORKER_STATE_SETUP_COMPLETE, - GDM_SESSION_WORKER_STATE_AUTHENTICATED, - GDM_SESSION_WORKER_STATE_AUTHORIZED, - GDM_SESSION_WORKER_STATE_ACCREDITED, - GDM_SESSION_WORKER_STATE_ACCOUNT_DETAILS_SAVED, - GDM_SESSION_WORKER_STATE_SESSION_OPENED, - GDM_SESSION_WORKER_STATE_SESSION_STARTED - }; - - typedef struct - { - GdmSessionWorker *worker; - GdmSession *session; - GPid pid_of_caller; - uid_t uid_of_caller; - - } ReauthenticationRequest; -@@ -1467,67 +1463,64 @@ gdm_session_worker_accredit_user (GdmSessionWorker *worker, - _("no user account available")); - goto out; - } - - uid = 0; - gid = 0; - res = _lookup_passwd_info (worker->priv->username, - &uid, - &gid, - &home, - &shell); - if (! res) { - g_debug ("GdmSessionWorker: Unable to lookup account info"); - error_code = PAM_AUTHINFO_UNAVAIL; - g_set_error (error, - GDM_SESSION_WORKER_ERROR, - GDM_SESSION_WORKER_ERROR_GIVING_CREDENTIALS, - _("no user account available")); - goto out; - } - - gdm_session_worker_update_environment_from_passwd_info (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")); - goto out; - } - - error_code = pam_setcred (worker->priv->pam_handle, worker->priv->cred_flags); - - /* If the user is reauthenticating and they've made it this far, then there - * is no reason we should lock them out of their session. They've already - * proved they are they same person who logged in, and that's all we care - * about. - */ - if (worker->priv->is_reauth_session) { - error_code = PAM_SUCCESS; - } - - if (error_code != PAM_SUCCESS) { - g_set_error (error, - GDM_SESSION_WORKER_ERROR, - GDM_SESSION_WORKER_ERROR_GIVING_CREDENTIALS, - "%s", - pam_strerror (worker->priv->pam_handle, error_code)); - goto out; - } -diff --git a/daemon/gdm-slave.c b/daemon/gdm-slave.c -index 44b2ffe..52d16e5 100644 ---- a/daemon/gdm-slave.c -+++ b/daemon/gdm-slave.c -@@ -230,61 +230,61 @@ get_script_environment (GdmSlave *slave, - g_strdup (pwent->pw_dir)); - } - - g_hash_table_insert (hash, g_strdup ("SHELL"), - g_strdup (pwent->pw_shell)); - } - } - - #if 0 - if (display_is_parented) { - g_hash_table_insert (hash, g_strdup ("GDM_PARENT_DISPLAY"), g_strdup (parent_display_name)); - - /*g_hash_table_insert (hash, "GDM_PARENT_XAUTHORITY"), slave->priv->parent_temp_auth_file));*/ - } - #endif - - /* some env for use with the Pre and Post scripts */ - temp = g_strconcat (slave->priv->display_name, ".Xservers", NULL); - x_servers_file = g_build_filename (AUTHDIR, temp, NULL); - g_free (temp); - - g_hash_table_insert (hash, g_strdup ("X_SERVERS"), x_servers_file); - - if (! slave->priv->display_is_local) { - g_hash_table_insert (hash, g_strdup ("REMOTE_HOST"), g_strdup (slave->priv->display_hostname)); - } - - /* Runs as root */ - g_hash_table_insert (hash, g_strdup ("XAUTHORITY"), g_strdup (slave->priv->display_x11_authority_file)); - g_hash_table_insert (hash, g_strdup ("DISPLAY"), g_strdup (slave->priv->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); - - return env; - } - - gboolean - gdm_slave_run_script (GdmSlave *slave, - const char *dir, - const char *login) - { - char *script; - char **argv; - gint status; - GError *error; - GPtrArray *env; - gboolean res; - gboolean ret; - - ret = FALSE; - - g_assert (dir != NULL); - g_assert (login != NULL); --- -1.9.0 - diff --git a/SPECS/gdm.spec b/SPECS/gdm.spec index 22f4d6e..4bbc5c4 100644 --- a/SPECS/gdm.spec +++ b/SPECS/gdm.spec @@ -12,7 +12,7 @@ Summary: The GNOME Display Manager Name: gdm Version: 3.8.4 -Release: 25%{?dist} +Release: 27%{?dist} Epoch: 1 License: GPLv2+ Group: User Interface/X @@ -31,7 +31,6 @@ Patch7: fail-gracefully.patch Patch8: just-in-time-reauthentication.patch Patch9: pam-gnome-keyring.patch Patch10: clear-screen.patch -Patch11: set-proper-path.patch Patch98: system-dconf.patch Patch99: classic-session.patch @@ -147,7 +146,6 @@ Development files and headers for writing GDM greeters. %patch8 -p1 -b .just-in-time-reauthetication %patch9 -p1 -b .pam-gnome-kerying %patch10 -p1 -b .clear-screen -%patch11 -p1 -b .set-proper-path %patch98 -p1 -b .system-dconf %patch99 -p1 -b .classic-session @@ -159,6 +157,7 @@ intltoolize -f %configure --with-pam-prefix=%{_sysconfdir} \ --with-run-dir=/run/gdm \ + --with-default-path="/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin" \ --enable-split-authentication \ --enable-profiling \ --enable-console-helper \ @@ -365,6 +364,17 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor >&/dev/null || : %{_libdir}/girepository-1.0/Gdm-1.0.typelib %changelog +* Wed Apr 23 2014 Ray Strode 3.8.4-27 +- One more PATH logic update + Related: #1080153 + Resolves: 1091053 + +* Tue Apr 22 2014 Ray Strode 3.8.4-26 +- Adjust path setting logic one more time to preserve + /sbin and /bin ordering + Related: #1080153 + Resolves: 1091053 + * Tue Apr 01 2014 Ray Strode 3.8.4-25 - Set proper path for worker session Resolves: #1080153