summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS4
-rw-r--r--src/session-child.c7
-rw-r--r--tests/Makefile.am4
-rw-r--r--tests/scripts/session-stderr-backup.conf75
-rw-r--r--tests/scripts/session-stderr-multi-write.conf36
-rw-r--r--tests/scripts/session-stderr.conf4
-rw-r--r--tests/scripts/session-stdout.conf4
-rw-r--r--tests/src/test-session.c15
-rwxr-xr-xtests/test-session-stderr-backup2
-rwxr-xr-xtests/test-session-stderr-multi-write2
10 files changed, 141 insertions, 12 deletions
diff --git a/NEWS b/NEWS
index b15b6e94..983f0727 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,7 @@
+Overview of changes in lightdm 1.1.10
+
+ * Backup .xsession-errors on login
+
Overview of changes in lightdm 1.1.9
* Add --show-users/--hide-users to lightdm-set-defaults
diff --git a/src/session-child.c b/src/session-child.c
index a106dae5..68ec36bb 100644
--- a/src/session-child.c
+++ b/src/session-child.c
@@ -1,4 +1,5 @@
#include <stdlib.h>
+#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
@@ -152,7 +153,7 @@ session_child_run (int argc, char **argv)
int i, version, fd, result;
gboolean auth_complete = TRUE;
User *user = NULL;
- gchar *log_filename;
+ gchar *log_filename, *log_backup_filename = NULL;
gsize env_length;
gsize command_argc;
gchar **command_argv;
@@ -335,6 +336,8 @@ session_child_run (int argc, char **argv)
command_argv[i] = NULL;
/* Redirect stderr to a log file */
+ if (log_filename)
+ log_backup_filename = g_strdup_printf ("%s.old", log_filename);
if (!log_filename)
{
fd = open ("/dev/null", O_WRONLY);
@@ -343,6 +346,7 @@ session_child_run (int argc, char **argv)
}
else if (g_path_is_absolute (log_filename))
{
+ rename (log_filename, log_backup_filename);
fd = open (log_filename, O_WRONLY | O_CREAT, 0600);
dup2 (fd, STDERR_FILENO);
close (fd);
@@ -476,6 +480,7 @@ session_child_run (int argc, char **argv)
/* Redirect stderr to a log file */
if (log_filename && !g_path_is_absolute (log_filename))
{
+ rename (log_filename, log_backup_filename);
fd = open (log_filename, O_WRONLY | O_CREAT, 0600);
dup2 (fd, STDERR_FILENO);
close (fd);
diff --git a/tests/Makefile.am b/tests/Makefile.am
index a26996e8..11e35486 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -25,6 +25,8 @@ TESTS = \
test-group-membership \
test-session-stdout \
test-session-stderr \
+ test-session-stderr-multi-write \
+ test-session-stderr-backup \
test-xauthority \
test-system-xauthority \
test-user-renamed \
@@ -203,6 +205,8 @@ EXTRA_DIST = \
scripts/script-hook-fail-session-setup.conf \
scripts/session-stdout.conf \
scripts/session-stderr.conf \
+ scripts/session-stderr-multi-write.conf \
+ scripts/session-stderr-backup.conf \
scripts/switch-to-greeter.conf \
scripts/switch-to-guest.conf \
scripts/switch-to-user.conf \
diff --git a/tests/scripts/session-stderr-backup.conf b/tests/scripts/session-stderr-backup.conf
new file mode 100644
index 00000000..3c0dea46
--- /dev/null
+++ b/tests/scripts/session-stderr-backup.conf
@@ -0,0 +1,75 @@
+#
+# Check session log is backed up and restart on second login
+#
+
+[LightDM]
+minimum-display-number=50
+
+[SeatDefaults]
+autologin-user=no-password1
+
+#?RUNNER DAEMON-START
+
+# X server starts
+#?XSERVER :50 START
+#?XSERVER :50 INDICATE-READY
+
+# LightDM connects to X server
+#?XSERVER :50 ACCEPT-CONNECT
+
+# Session starts
+#?SESSION :50 START USER=no-password1
+#?XSERVER :50 ACCEPT-CONNECT
+#?SESSION :50 CONNECT-XSERVER
+
+# Write to stderr and check it shows up in the log
+#?*SESSION :50 WRITE-STDERR TEXT=FIRST-SESSION
+#?*SESSION :50 READ FILE=.xsession-errors
+#?SESSION :50 READ FILE=.xsession-errors TEXT=FIRST-SESSION
+
+# Logout session
+#?*SESSION :50 LOGOUT
+
+# X server stops
+#?XSERVER :50 TERMINATE SIGNAL=15
+
+# X server starts
+#?XSERVER :50 START
+#?XSERVER :50 INDICATE-READY
+
+# LightDM connects to X server
+#?XSERVER :50 ACCEPT-CONNECT
+
+# Greeter starts
+#?GREETER :50 START
+#?XSERVER :50 ACCEPT-CONNECT
+#?GREETER :50 CONNECT-XSERVER
+#?GREETER :50 CONNECT-TO-DAEMON
+#?GREETER :50 CONNECTED-TO-DAEMON
+
+# Log in
+#?*GREETER :50 AUTHENTICATE USERNAME=no-password1
+#?GREETER :50 AUTHENTICATION-COMPLETE USERNAME=no-password1 AUTHENTICATED=TRUE
+#?*GREETER :50 START-SESSION
+#?GREETER :50 TERMINATE SIGNAL=15
+
+# Session starts
+#?SESSION :50 START USER=no-password1
+#?XSERVER :50 ACCEPT-CONNECT
+#?SESSION :50 CONNECT-XSERVER
+
+# Write to stderr and check it shows up in the log
+#?*SESSION :50 WRITE-STDERR TEXT=SECOND-SESSION
+#?*SESSION :50 READ FILE=.xsession-errors
+#?SESSION :50 READ FILE=.xsession-errors TEXT=SECOND-SESSION
+
+# Check first log is backed up
+#?*SESSION :50 READ FILE=.xsession-errors.old
+#?SESSION :50 READ FILE=.xsession-errors.old TEXT=FIRST-SESSION
+
+# Cleanup
+#?*STOP-DAEMON
+# Don't know what order they will terminate
+#?(SESSION :50 TERMINATE SIGNAL=15|XSERVER :50 TERMINATE SIGNAL=15)
+#?(SESSION :50 TERMINATE SIGNAL=15|XSERVER :50 TERMINATE SIGNAL=15)
+#?RUNNER DAEMON-EXIT STATUS=0
diff --git a/tests/scripts/session-stderr-multi-write.conf b/tests/scripts/session-stderr-multi-write.conf
new file mode 100644
index 00000000..f7800785
--- /dev/null
+++ b/tests/scripts/session-stderr-multi-write.conf
@@ -0,0 +1,36 @@
+#
+# Check session stderr is written to ~/.xsession-errors and multiple writes are appended
+#
+
+[LightDM]
+minimum-display-number=50
+
+[SeatDefaults]
+autologin-user=have-password1
+
+#?RUNNER DAEMON-START
+
+# X server starts
+#?XSERVER :50 START
+#?XSERVER :50 INDICATE-READY
+
+# LightDM connects to X server
+#?XSERVER :50 ACCEPT-CONNECT
+
+# Session starts
+#?SESSION :50 START USER=have-password1
+#?XSERVER :50 ACCEPT-CONNECT
+#?SESSION :50 CONNECT-XSERVER
+
+# Write to stderr and check all text ends up in log
+#?*SESSION :50 WRITE-STDERR TEXT=MULTI-
+#?*SESSION :50 WRITE-STDERR TEXT=WRITE
+#?*SESSION :50 READ FILE=.xsession-errors
+#?SESSION :50 READ FILE=.xsession-errors TEXT=MULTI-WRITE
+
+# Cleanup
+#?*STOP-DAEMON
+# Don't know what order they will terminate
+#?(SESSION :50 TERMINATE SIGNAL=15|XSERVER :50 TERMINATE SIGNAL=15)
+#?(SESSION :50 TERMINATE SIGNAL=15|XSERVER :50 TERMINATE SIGNAL=15)
+#?RUNNER DAEMON-EXIT STATUS=0
diff --git a/tests/scripts/session-stderr.conf b/tests/scripts/session-stderr.conf
index d1ec54d4..d0caa9e0 100644
--- a/tests/scripts/session-stderr.conf
+++ b/tests/scripts/session-stderr.conf
@@ -24,8 +24,8 @@ autologin-user=have-password1
# Write to stderr and check it shows up in the log
#?*SESSION :50 WRITE-STDERR TEXT=THIS-SHOULD-BE-IN-XSESSION-ERRORS
-#?*SESSION :50 READ-XSESSION-ERRORS
-#?SESSION :50 READ-XSESSION-ERRORS TEXT=THIS-SHOULD-BE-IN-XSESSION-ERRORS
+#?*SESSION :50 READ FILE=.xsession-errors
+#?SESSION :50 READ FILE=.xsession-errors TEXT=THIS-SHOULD-BE-IN-XSESSION-ERRORS
# Cleanup
#?*STOP-DAEMON
diff --git a/tests/scripts/session-stdout.conf b/tests/scripts/session-stdout.conf
index 5d07e745..59b95e89 100644
--- a/tests/scripts/session-stdout.conf
+++ b/tests/scripts/session-stdout.conf
@@ -24,8 +24,8 @@ autologin-user=have-password1
# Write to stdout and check it doesn't end up in the session error log (you should also manually check when running the test if it is printed)
#?*SESSION :50 WRITE-STDOUT TEXT=YOU-SHOULD-NOT-SEE-THIS
-#?*SESSION :50 READ-XSESSION-ERRORS
-#?SESSION :50 READ-XSESSION-ERRORS TEXT=
+#?*SESSION :50 READ FILE=.xsession-errors
+#?SESSION :50 READ FILE=.xsession-errors TEXT=
# Cleanup
#?*STOP-DAEMON
diff --git a/tests/src/test-session.c b/tests/src/test-session.c
index 3d77f0be..92599dc4 100644
--- a/tests/src/test-session.c
+++ b/tests/src/test-session.c
@@ -116,24 +116,25 @@ request_cb (const gchar *request)
r = g_strdup_printf ("SESSION %s WRITE-STDOUT TEXT=", getenv ("DISPLAY"));
if (g_str_has_prefix (request, r))
- g_print ("%s\n", request + strlen (r));
+ g_print ("%s", request + strlen (r));
g_free (r);
r = g_strdup_printf ("SESSION %s WRITE-STDERR TEXT=", getenv ("DISPLAY"));
if (g_str_has_prefix (request, r))
- g_printerr ("%s\n", request + strlen (r));
+ g_printerr ("%s", request + strlen (r));
g_free (r);
- r = g_strdup_printf ("SESSION %s READ-XSESSION-ERRORS", getenv ("DISPLAY"));
- if (strcmp (request, r) == 0)
+ r = g_strdup_printf ("SESSION %s READ FILE=", getenv ("DISPLAY"));
+ if (g_str_has_prefix (request, r))
{
+ const gchar *name = request + strlen (r);
gchar *contents;
GError *error = NULL;
- if (g_file_get_contents (".xsession-errors", &contents, NULL, &error))
- status_notify ("SESSION %s READ-XSESSION-ERRORS TEXT=%s", getenv ("DISPLAY"), contents);
+ if (g_file_get_contents (name, &contents, NULL, &error))
+ status_notify ("SESSION %s READ FILE=%s TEXT=%s", getenv ("DISPLAY"), name, contents);
else
- status_notify ("SESSION %s READ-XSESSION-ERRORS ERROR=%s", getenv ("DISPLAY"), error->message);
+ status_notify ("SESSION %s READ FILE=%s ERROR=%s", getenv ("DISPLAY"), name, error->message);
g_clear_error (&error);
}
g_free (r);
diff --git a/tests/test-session-stderr-backup b/tests/test-session-stderr-backup
new file mode 100755
index 00000000..d11e911f
--- /dev/null
+++ b/tests/test-session-stderr-backup
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner session-stderr-backup test-gobject-greeter
diff --git a/tests/test-session-stderr-multi-write b/tests/test-session-stderr-multi-write
new file mode 100755
index 00000000..75d41f7a
--- /dev/null
+++ b/tests/test-session-stderr-multi-write
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner session-stderr-multi-write test-gobject-greeter