summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Ancell <robert.ancell@canonical.com>2016-08-12 11:29:33 +1200
committerRobert Ancell <robert.ancell@canonical.com>2016-08-12 11:29:33 +1200
commit071dbbfa457af8d5718b00dbf77aec226a373e54 (patch)
tree79afc2f073adda4c1fe3d5a6c918ae3abb2563a2
parent790cd48b727fdd423a54b6f0712582ab2925172a (diff)
downloadlightdm-git-071dbbfa457af8d5718b00dbf77aec226a373e54.tar.gz
Fix greeter being killing a started session once if a new authentication is started
-rw-r--r--src/greeter.c12
-rw-r--r--src/greeter.h2
-rw-r--r--src/seat.c6
-rw-r--r--tests/Makefile.am4
-rw-r--r--tests/scripts/session-greeter-multiple-login.conf65
-rwxr-xr-xtests/test-session-greeter-multiple-login2
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);
diff --git a/src/seat.c b/src/seat.c
index 2fc5a89f..457152cc 100644
--- a/src/seat.c
+++ b/src/seat.c
@@ -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