SHA256
1
0
forked from pool/gdm
gdm/gdm-bash-profile.patch

81 lines
2.3 KiB
Diff
Raw Normal View History

diff -upr gdm-2.16.1-pre/daemon/slave.c gdm-2.16.1-post/daemon/slave.c
--- gdm-2.16.1-pre/daemon/slave.c 2006-08-07 14:49:29.000000000 -0500
+++ gdm-2.16.1-post/daemon/slave.c 2006-11-07 16:54:20.000000000 -0600
@@ -3358,7 +3358,7 @@ session_child_run (struct passwd *pwent,
#ifndef HAVE_TSOL
char *argv[4];
#else
- char *argv[7];
+ char *argv[9];
#endif
#ifdef CAN_USE_SETPENV
@@ -3584,10 +3584,12 @@ session_child_run (struct passwd *pwent,
argv[1] = NULL;
argv[2] = NULL;
argv[3] = NULL;
-#ifdef HAVE_TSOL
argv[4] = NULL;
argv[5] = NULL;
+#ifdef HAVE_TSOL
argv[6] = NULL;
+ argv[7] = NULL;
+ argv[8] = NULL;
#endif
exec = NULL;
@@ -3640,11 +3642,27 @@ session_child_run (struct passwd *pwent,
argv[3] = argv[4] = argv[5] = argv[6] = NULL;
} else {
#endif
- argv[0] = basexsession;
- argv[1] = exec;
- argv[2] = NULL;
+ /* If it looks like we are using bash, then run the Xsession
+ script in a login shell and pass it 'no-fake-login' as its
+ second argument. This keeps Xsession from sourcing .profile or
+ otherwise trying to pretend to be a login shell. */
+
+ if (strlen (pwent->pw_shell) > 4
+ && ! strcmp (pwent->pw_shell + strlen (pwent->pw_shell) - 5, "/bash")
+ && g_file_test (pwent->pw_shell, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_EXECUTABLE)) {
+ argv[0] = pwent->pw_shell;
+ argv[1] = "--login";
+ argv[2] = basexsession;
+ argv[3] = exec;
+ argv[4] = "no-fake-login";
+ argv[5] = NULL;
+ } else {
+ argv[0] = basexsession;
+ argv[1] = exec;
+ argv[2] = NULL;
+ }
#ifdef HAVE_TSOL
- argv[3] = argv[4] = argv[5] = argv[6] = NULL;
+ argv [3] = argv [4] = argv[5] = argv[6] = argv[7] = argv[8] = NULL;
}
#endif
}
@@ -3793,7 +3811,6 @@ session_child_run (struct passwd *pwent,
failsafe = TRUE;
}
-#ifdef HAVE_TSOL
gdm_debug ("Running %s %s %s %s %s %s for %s on %s",
argv[0],
ve_sure_string (argv[1]),
@@ -3802,13 +3819,6 @@ session_child_run (struct passwd *pwent,
ve_sure_string (argv[4]),
ve_sure_string (argv[5]),
login, d->name);
-#else
- gdm_debug ("Running %s %s %s for %s on %s",
- argv[0],
- ve_sure_string (argv[1]),
- ve_sure_string (argv[2]),
- login, d->name);
-#endif
if ( ! ve_string_empty (pwent->pw_shell)) {
shell = pwent->pw_shell;