File gdm-bash-profile.patch of Package gdm

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;
openSUSE Build Service is sponsored by