Skip to content

Commit efe8c45

Browse files
committed
Correctly pass return value from sessions to LightDM
1 parent e3f0752 commit efe8c45

7 files changed

+67
-5
lines changed

src/session-child.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -722,6 +722,8 @@ session_child_run (int argc, char **argv)
722722
/* Wait for the command to complete (blocks) */
723723
if (child_pid > 0)
724724
{
725+
int child_status;
726+
725727
/* Log to utmp */
726728
if (g_strcmp0 (pam_getenv (pam_handle, "XDG_SESSION_CLASS"), "greeter") != 0)
727729
{
@@ -756,8 +758,12 @@ session_child_run (int argc, char **argv)
756758
#endif
757759
}
758760

759-
waitpid (child_pid, &return_code, 0);
761+
waitpid (child_pid, &child_status, 0);
760762
child_pid = 0;
763+
if (WIFEXITED (child_status))
764+
return_code = WEXITSTATUS (child_status);
765+
else
766+
return_code = EXIT_FAILURE;
761767

762768
/* Log to utmp */
763769
if (g_strcmp0 (pam_getenv (pam_handle, "XDG_SESSION_CLASS"), "greeter") != 0)

tests/Makefile.am

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ TESTS = \
116116
test-login-remote-session-gobject \
117117
test-login-session-crash \
118118
test-login-xserver-crash \
119+
test-login-greeter-return-failure \
119120
test-multiple-authenticate \
120121
test-xserver-no-share \
121122
test-home-dir-on-authenticate \
@@ -487,6 +488,7 @@ EXTRA_DIST = \
487488
scripts/login1-terminate.conf \
488489
scripts/login.conf \
489490
scripts/login-crash-authenticate.conf \
491+
scripts/login-greeter-return-failure.conf \
490492
scripts/login-guest.conf \
491493
scripts/login-guest-disabled.conf \
492494
scripts/login-guest-fail-setup-script.conf \

tests/scripts/greeter-fail-start.conf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#
44

55
[test-greeter-config]
6+
exit-on-startup=true
67
return-value=1
78

89
#?*START-DAEMON

tests/scripts/greeter-not-installed.conf

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
22
# Check that LightDM quits when the greeter does not exist
33
#
44

5-
[test-greeter-config]
6-
return-value=1
7-
85
#?*START-DAEMON
96
#?RUNNER DAEMON-START
107

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#
2+
# Check can login even if the greeter returns an error code (it otherwise works fine)
3+
#
4+
5+
[Seat:*]
6+
user-session=default
7+
8+
[test-greeter-config]
9+
return-value=1
10+
11+
#?*START-DAEMON
12+
#?RUNNER DAEMON-START
13+
14+
# X server starts
15+
#?XSERVER-0 START VT=7 SEAT=seat0
16+
17+
# Daemon connects when X server is ready
18+
#?*XSERVER-0 INDICATE-READY
19+
#?XSERVER-0 INDICATE-READY
20+
#?XSERVER-0 ACCEPT-CONNECT
21+
22+
# Greeter starts
23+
#?GREETER-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_SESSION_CLASS=greeter
24+
#?LOGIN1 ACTIVATE-SESSION SESSION=c0
25+
#?XSERVER-0 ACCEPT-CONNECT
26+
#?GREETER-X-0 CONNECT-XSERVER
27+
#?GREETER-X-0 CONNECT-TO-DAEMON
28+
#?GREETER-X-0 CONNECTED-TO-DAEMON
29+
30+
# Log into account with a password
31+
#?*GREETER-X-0 AUTHENTICATE USERNAME=have-password1
32+
#?GREETER-X-0 SHOW-PROMPT TEXT="Password:"
33+
#?*GREETER-X-0 RESPOND TEXT="password"
34+
#?GREETER-X-0 AUTHENTICATION-COMPLETE USERNAME=have-password1 AUTHENTICATED=TRUE
35+
#?*GREETER-X-0 START-SESSION
36+
#?GREETER-X-0 TERMINATE SIGNAL=15
37+
38+
# Session starts
39+
#?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/have-password1 XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=default USER=have-password1
40+
#?LOGIN1 ACTIVATE-SESSION SESSION=c1
41+
#?XSERVER-0 ACCEPT-CONNECT
42+
#?SESSION-X-0 CONNECT-XSERVER
43+
44+
# Cleanup
45+
#?*STOP-DAEMON
46+
#?SESSION-X-0 TERMINATE SIGNAL=15
47+
#?XSERVER-0 TERMINATE SIGNAL=15
48+
#?RUNNER DAEMON-EXIT STATUS=0

tests/src/test-gobject-greeter.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -520,7 +520,7 @@ main (int argc, char **argv)
520520
g_key_file_load_from_file (config, path, G_KEY_FILE_NONE, NULL);
521521
g_free (path);
522522

523-
if (g_key_file_has_key (config, "test-greeter-config", "return-value", NULL))
523+
if (g_key_file_get_boolean (config, "test-greeter-config", "exit-on-startup", NULL))
524524
{
525525
int return_value = g_key_file_get_integer (config, "test-greeter-config", "return-value", NULL);
526526
status_notify ("%s EXIT CODE=%d", greeter_id, return_value);
@@ -561,5 +561,11 @@ main (int argc, char **argv)
561561

562562
g_main_loop_run (loop);
563563

564+
if (g_key_file_has_key (config, "test-greeter-config", "return-value", NULL))
565+
{
566+
int return_value = g_key_file_get_integer (config, "test-greeter-config", "return-value", NULL);
567+
return return_value;
568+
}
569+
564570
return exit_code;
565571
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
#!/bin/sh
2+
./src/dbus-env ./src/test-runner login-greeter-return-failure test-gobject-greeter

0 commit comments

Comments
 (0)