diff options
author | George Lebl <jirka@5z.com> | 2003-09-22 22:36:53 +0000 |
---|---|---|
committer | George Lebl <jirka@src.gnome.org> | 2003-09-22 22:36:53 +0000 |
commit | 9a3c1ff19934a119f6ad1c2869344195adc8d093 (patch) | |
tree | c86a9dc1d9d00d75a98893ddb45ccd2db0ed3f27 | |
parent | bb42079f1a29820a753fb27d2e514188ca2e057d (diff) | |
download | gdm-9a3c1ff19934a119f6ad1c2869344195adc8d093.tar.gz |
add a func to get a specific stored env var. Check in the stored PATH for
Mon Sep 22 15:35:23 2003 George Lebl <jirka@5z.com>
* daemon/slave.c, daemon/misc.[ch]: add a func to get a specific
stored env var. Check in the stored PATH for TryExec and
only check TryExec when finding a session when nothing else
is given. The greeters really take care of TryExec.
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | daemon/misc.c | 18 | ||||
-rw-r--r-- | daemon/misc.h | 1 | ||||
-rw-r--r-- | daemon/slave.c | 26 |
4 files changed, 42 insertions, 10 deletions
@@ -1,3 +1,10 @@ +Mon Sep 22 15:35:23 2003 George Lebl <jirka@5z.com> + + * daemon/slave.c, daemon/misc.[ch]: add a func to get a specific + stored env var. Check in the stored PATH for TryExec and + only check TryExec when finding a session when nothing else + is given. The greeters really take care of TryExec. + Mon Sep 22 15:19:21 2003 George Lebl <jirka@5z.com> * config/gnome.desktop.in: add TryExec=gnome-session diff --git a/daemon/misc.c b/daemon/misc.c index cd57cbb3..1c491f0e 100644 --- a/daemon/misc.c +++ b/daemon/misc.c @@ -313,6 +313,24 @@ gdm_saveenv (void) } } +const char * +gdm_saved_getenv (const char *var) +{ + int len; + GList *li; + + len = strlen (var); + + for (li = stored_env; li != NULL; li = li->next) { + const char *e = li->data; + if (strncmp (var, e, len) == 0 && + e[len] == '=') { + return &(e[len+1]); + } + } + return NULL; +} + /* leaks */ void gdm_restoreenv (void) diff --git a/daemon/misc.h b/daemon/misc.h index 93afde4d..789b8104 100644 --- a/daemon/misc.h +++ b/daemon/misc.h @@ -116,6 +116,7 @@ char * gdm_locale_to_utf8 (const char *text); char * gdm_locale_from_utf8 (const char *text); void gdm_saveenv (void); +const char * gdm_saved_getenv (const char *var); /* leaks */ void gdm_restoreenv (void); diff --git a/daemon/slave.c b/daemon/slave.c index 949daa68..28a5e6ec 100644 --- a/daemon/slave.c +++ b/daemon/slave.c @@ -2850,7 +2850,7 @@ is_session_magic (const char *session_name) } static char * -get_session_exec (const char *session_name) +get_session_exec (const char *session_name, gboolean check_try_exec) { char *file; char *full = NULL; @@ -2904,18 +2904,23 @@ get_session_exec (const char *session_name) if (ve_config_get_bool (cfg, "Desktop Entry/Hidden=false")) return NULL; - tryexec = ve_config_get_string (cfg, "Desktop Entry/TryExec"); - if ( ! ve_string_empty (tryexec) && - ! ve_is_prog_in_path (tryexec, GdmDefaultPath)) { + if (check_try_exec) { + tryexec = ve_config_get_string (cfg, "Desktop Entry/TryExec"); + if ( ! ve_string_empty (tryexec) && + ! ve_is_prog_in_path (tryexec, GdmDefaultPath) && + ! ve_is_prog_in_path (tryexec, gdm_saved_getenv ("PATH"))) { + g_free (tryexec); + return NULL; + } g_free (tryexec); - return NULL; } - g_free (tryexec); exec = ve_config_get_string (cfg, "Desktop Entry/Exec"); return g_strdup (exec); } +/* Note that this does check TryExec! while normally we don't check + * it */ static gboolean is_session_ok (const char *session_name) { @@ -2930,7 +2935,7 @@ is_session_ok (const char *session_name) if (ve_string_empty (GdmSessDir)) return is_session_magic (session_name); - exec = get_session_exec (session_name); + exec = get_session_exec (session_name, TRUE /* check_try_exec */); if (exec == NULL) ret = FALSE; g_free (exec); @@ -3288,7 +3293,8 @@ session_child_run (struct passwd *pwent, exec = NULL; if (strcmp (session, GDM_SESSION_FAILSAFE_XTERM) != 0 && strcmp (session, GDM_SESSION_FAILSAFE_GNOME) != 0) { - exec = get_session_exec (session); + exec = get_session_exec (session, + FALSE /* check_try_exec */); if G_UNLIKELY (exec == NULL) { gdm_error (_("%s: No Exec line in the session file: %s, starting failsafe GNOME"), "gdm_slave_session_start", @@ -3694,7 +3700,7 @@ gdm_slave_session_start (void) failsafe = TRUE; if G_LIKELY ( ! failsafe) { - char *exec = get_session_exec (session); + char *exec = get_session_exec (session, FALSE /* check_try_exec */); if ( ! ve_string_empty (exec) && strcmp (exec, "failsafe") == 0) failsafe = TRUE; @@ -3777,7 +3783,7 @@ gdm_slave_session_start (void) } /* this clears internal cache */ - get_session_exec (NULL); + get_session_exec (NULL, FALSE); if G_LIKELY (logfilefd >= 0) { d->xsession_errors_fd = logfilefd; |