diff options
author | Robert Ancell <robert.ancell@canonical.com> | 2016-08-12 11:29:33 +1200 |
---|---|---|
committer | Robert Ancell <robert.ancell@canonical.com> | 2016-08-12 11:29:33 +1200 |
commit | 071dbbfa457af8d5718b00dbf77aec226a373e54 (patch) | |
tree | 79afc2f073adda4c1fe3d5a6c918ae3abb2563a2 | |
parent | 790cd48b727fdd423a54b6f0712582ab2925172a (diff) | |
download | lightdm-git-071dbbfa457af8d5718b00dbf77aec226a373e54.tar.gz |
Fix greeter being killing a started session once if a new authentication is started
-rw-r--r-- | src/greeter.c | 12 | ||||
-rw-r--r-- | src/greeter.h | 2 | ||||
-rw-r--r-- | src/seat.c | 6 | ||||
-rw-r--r-- | tests/Makefile.am | 4 | ||||
-rw-r--r-- | tests/scripts/session-greeter-multiple-login.conf | 65 | ||||
-rwxr-xr-x | tests/test-session-greeter-multiple-login | 2 |
6 files changed, 84 insertions, 7 deletions
diff --git a/src/greeter.c b/src/greeter.c index e2ae19f9..a3f32c68 100644 --- a/src/greeter.c +++ b/src/greeter.c @@ -968,10 +968,18 @@ greeter_get_guest_authenticated (Greeter *greeter) } Session * -greeter_get_authentication_session (Greeter *greeter) +greeter_take_authentication_session (Greeter *greeter) { + Session *session; + g_return_val_if_fail (greeter != NULL, NULL); - return greeter->priv->authentication_session; + + session = greeter->priv->authentication_session; + if (greeter->priv->authentication_session) + g_signal_handlers_disconnect_matched (greeter->priv->authentication_session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, greeter); + greeter->priv->authentication_session = NULL; + + return session; } gboolean diff --git a/src/greeter.h b/src/greeter.h index b9404ae5..a8ba6c7c 100644 --- a/src/greeter.h +++ b/src/greeter.h @@ -71,7 +71,7 @@ void greeter_reset (Greeter *greeter); gboolean greeter_get_guest_authenticated (Greeter *greeter); -Session *greeter_get_authentication_session (Greeter *greeter); +Session *greeter_take_authentication_session (Greeter *greeter); gboolean greeter_get_start_session (Greeter *greeter); @@ -1170,7 +1170,7 @@ greeter_start_session_cb (Greeter *greeter, SessionType type, const gchar *sessi /* Get the session to use */ if (greeter_get_guest_authenticated (greeter)) { - session = create_guest_session (seat, session_name); + session = g_object_ref (create_guest_session (seat, session_name)); if (!session) return FALSE; session_set_pam_service (session, seat_get_string_property (seat, "pam-autologin-service")); @@ -1183,7 +1183,7 @@ greeter_start_session_cb (Greeter *greeter, SessionType type, const gchar *sessi gchar *sessions_dir = NULL; gchar **argv; - session = greeter_get_authentication_session (greeter); + session = greeter_take_authentication_session (greeter); /* Get session command to run */ switch (type) @@ -1227,7 +1227,7 @@ greeter_start_session_cb (Greeter *greeter, SessionType type, const gchar *sessi /* Switch to this session when it is ready */ g_clear_object (&seat->priv->session_to_activate); - seat->priv->session_to_activate = g_object_ref (session); + seat->priv->session_to_activate = session; /* Return to existing session if it is open */ username = session_get_username (session); diff --git a/tests/Makefile.am b/tests/Makefile.am index ef6e2b33..2665b949 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -171,7 +171,8 @@ TESTS = \ test-session-greeter-reconnect \ test-session-greeter-unlock \ test-session-greeter-unlock-twice \ - test-session-greeter-switch \ + test-session-greeter-switch \ + test-session-greeter-multiple-login \ test-vnc-login \ test-vnc-command \ test-vnc-dimensions \ @@ -551,6 +552,7 @@ EXTRA_DIST = \ scripts/script-hook-session-setup-missing.conf \ scripts/session-greeter.conf \ scripts/session-greeter-autologin.conf \ + scripts/session-greeter-multiple-login.conf \ scripts/session-greeter-reconnect.conf \ scripts/session-greeter-switch.conf \ scripts/session-greeter-unlock.conf \ diff --git a/tests/scripts/session-greeter-multiple-login.conf b/tests/scripts/session-greeter-multiple-login.conf new file mode 100644 index 00000000..32da905a --- /dev/null +++ b/tests/scripts/session-greeter-multiple-login.conf @@ -0,0 +1,65 @@ +# +# Check continuing to use an in-session greeter doesn't break things +# + +[Seat:*] +autologin-user=no-password1 +user-session=greeter + +#?*START-DAEMON +#?RUNNER DAEMON-START + +# X server starts +#?XSERVER-0 START VT=7 SEAT=seat0 + +# Daemon connects when X server is ready +#?*XSERVER-0 INDICATE-READY +#?XSERVER-0 INDICATE-READY +#?XSERVER-0 ACCEPT-CONNECT + +# Session starts +#?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/no-password1 XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=greeter USER=no-password1 +#?LOGIN1 ACTIVATE-SESSION SESSION=c0 +#?XSERVER-0 ACCEPT-CONNECT +#?SESSION-X-0 CONNECT-XSERVER + +# Start greeter inside session +#?*SESSION-X-0 GREETER-START +#?SESSION-X-0 GREETER-STARTED + +# Log into account with a password +#?*SESSION-X-0 GREETER-AUTHENTICATE USERNAME=no-password2 +#?SESSION-X-0 GREETER-AUTHENTICATION-COMPLETE USERNAME=no-password2 AUTHENTICATED=TRUE +#?*SESSION-X-0 GREETER-START-SESSION + +# New X server starts +#?XSERVER-1 START VT=8 SEAT=seat0 +#?*XSERVER-1 INDICATE-READY +#?XSERVER-1 INDICATE-READY +#?XSERVER-1 ACCEPT-CONNECT + +# New session starts +#?SESSION-X-1 START XDG_SEAT=seat0 XDG_VTNR=8 XDG_GREETER_DATA_DIR=.*/no-password2 XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=greeter USER=no-password2 +#?XSERVER-1 ACCEPT-CONNECT +#?SESSION-X-1 CONNECT-XSERVER + +# Switch to new session +#?VT ACTIVATE VT=8 +#?LOGIN1 LOCK-SESSION SESSION=c0 +#?LOGIN1 ACTIVATE-SESSION SESSION=c1 + +# Log in again from the greeter +#?*SESSION-X-0 GREETER-AUTHENTICATE USERNAME=no-password2 +#?SESSION-X-0 GREETER-AUTHENTICATION-COMPLETE USERNAME=no-password2 AUTHENTICATED=TRUE +#?*SESSION-X-0 GREETER-START-SESSION + +# Session is activated again +#?LOGIN1 ACTIVATE-SESSION SESSION=c1 + +# Cleanup +#?*STOP-DAEMON +#?SESSION-X-0 TERMINATE SIGNAL=15 +#?XSERVER-1 TERMINATE SIGNAL=15 +#?SESSION-X-1 TERMINATE SIGNAL=15 +#?XSERVER-0 TERMINATE SIGNAL=15 +#?RUNNER DAEMON-EXIT STATUS=0 diff --git a/tests/test-session-greeter-multiple-login b/tests/test-session-greeter-multiple-login new file mode 100755 index 00000000..ab639983 --- /dev/null +++ b/tests/test-session-greeter-multiple-login @@ -0,0 +1,2 @@ +#!/bin/sh +./src/dbus-env ./src/test-runner session-greeter-multiple-login test-gobject-greeter |