]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
Fix greeter being killing a started session once if a new authentication is started
authorRobert Ancell <robert.ancell@canonical.com>
Thu, 11 Aug 2016 05:14:22 +0000 (17:14 +1200)
committerRobert Ancell <robert.ancell@canonical.com>
Thu, 11 Aug 2016 05:14:22 +0000 (17:14 +1200)
src/greeter.c
src/greeter.h
src/seat.c
tests/Makefile.am
tests/scripts/session-greeter-multiple-login.conf [new file with mode: 0644]
tests/test-session-greeter-multiple-login [new file with mode: 0755]

index 4eebc8ca5873f2c53605fa4a84b23baf7d9aa1ff..1ec5bd9c008848455efc29f011c8aedd60784ee3 100644 (file)
@@ -967,10 +967,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
index b9404ae528bb410072ce63d90411282f541b72c6..a8ba6c7cf10982f14aacca18eadfc863d005a2a1 100644 (file)
@@ -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);
 
index 8f1053ea3ff183eda6f15c87d83fc6bcbe8518ed..8d53f875c6f7759c668c396a4360d9cea6bddf7f 100644 (file)
@@ -1177,7 +1177,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"));
@@ -1190,7 +1190,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)
@@ -1234,7 +1234,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);
index 27a5040854b48835237719844c9a6b2641e9518b..77aa52a7dd448068f677000159665c828799b612 100644 (file)
@@ -173,7 +173,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 \
@@ -555,6 +556,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 (file)
index 0000000..32da905
--- /dev/null
@@ -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 (executable)
index 0000000..ab63998
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner session-greeter-multiple-login test-gobject-greeter