summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Lebl <jirka@5z.com>2003-09-22 22:36:53 +0000
committerGeorge Lebl <jirka@src.gnome.org>2003-09-22 22:36:53 +0000
commit9a3c1ff19934a119f6ad1c2869344195adc8d093 (patch)
treec86a9dc1d9d00d75a98893ddb45ccd2db0ed3f27
parentbb42079f1a29820a753fb27d2e514188ca2e057d (diff)
downloadgdm-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--ChangeLog7
-rw-r--r--daemon/misc.c18
-rw-r--r--daemon/misc.h1
-rw-r--r--daemon/slave.c26
4 files changed, 42 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index 71660623..497f7a70 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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;