81 lines
2.3 KiB
Diff
81 lines
2.3 KiB
Diff
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;
|