]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
Fix in-session greeter not working for greeter logins
authorRobert Ancell <robert.ancell@canonical.com>
Mon, 11 Jul 2016 21:51:14 +0000 (09:51 +1200)
committerRobert Ancell <robert.ancell@canonical.com>
Mon, 11 Jul 2016 21:51:14 +0000 (09:51 +1200)
src/session.c
tests/Makefile.am
tests/scripts/session-greeter-autologin.conf [new file with mode: 0644]
tests/scripts/session-greeter.conf
tests/test-session-greeter-autologin [new file with mode: 0755]

index 92a59bbd28c09c641909cd88a240db7f9cbe9f74..5e7d476722af4c55ec4287561426285817c05a11 100644 (file)
@@ -602,38 +602,6 @@ session_real_start (Session *session)
             return FALSE;
     }
 
-    /* Open socket to allow in-session greeter */
-    if (session->priv->config && session_config_get_allow_greeter (session->priv->config))
-    {
-        gchar *run_dir, *dir, *path;
-        GError *error = NULL;
-
-        run_dir = config_get_string (config_get_instance (), "LightDM", "run-directory");
-        dir = g_build_filename (run_dir, session->priv->username, NULL);
-        g_free (run_dir);
-
-        if (g_mkdir_with_parents (dir, S_IRWXU) < 0)
-            l_warning (session, "Failed to create greeter socket dir %s: %s", dir, strerror (errno));
-        if (getuid () == 0)
-        {
-            if (chown (dir, user_get_uid (session_get_user (session)), user_get_gid (session_get_user (session))) < 0)
-                l_warning (session, "Failed to set ownership of greeter socket dir: %s", strerror (errno));
-        }
-
-        path = g_build_filename (dir, "greeter-socket", NULL);
-        session->priv->greeter_socket = greeter_socket_new (path);
-        g_signal_connect (session->priv->greeter_socket, GREETER_SOCKET_SIGNAL_CREATE_GREETER, G_CALLBACK (create_greeter_cb), session);
-        session_set_env (session, "LIGHTDM_GREETER_PIPE", path);
-        g_free (path);
-        g_free (dir);
-
-        if (!greeter_socket_start (session->priv->greeter_socket, &error))
-        {
-            l_warning (session, "Failed to start greeter socket: %s\n", error->message);
-            g_clear_error (&error);
-        }
-    }
-
     /* Run the child */
     arg0 = g_strdup_printf ("%d", to_child_output);
     arg1 = g_strdup_printf ("%d", from_child_input);
@@ -847,6 +815,38 @@ session_real_run (Session *session)
         }
     }
 
+    /* Open socket to allow in-session greeter */
+    if (session->priv->config && session_config_get_allow_greeter (session->priv->config))
+    {
+        gchar *run_dir, *dir, *path;
+        GError *error = NULL;
+
+        run_dir = config_get_string (config_get_instance (), "LightDM", "run-directory");
+        dir = g_build_filename (run_dir, session->priv->username, NULL);
+        g_free (run_dir);
+
+        if (g_mkdir_with_parents (dir, S_IRWXU) < 0)
+            l_warning (session, "Failed to create greeter socket dir %s: %s", dir, strerror (errno));
+        if (getuid () == 0)
+        {
+            if (chown (dir, user_get_uid (session_get_user (session)), user_get_gid (session_get_user (session))) < 0)
+                l_warning (session, "Failed to set ownership of greeter socket dir: %s", strerror (errno));
+        }
+
+        path = g_build_filename (dir, "greeter-socket", NULL);
+        session->priv->greeter_socket = greeter_socket_new (path);
+        g_signal_connect (session->priv->greeter_socket, GREETER_SOCKET_SIGNAL_CREATE_GREETER, G_CALLBACK (create_greeter_cb), session);
+        session_set_env (session, "LIGHTDM_GREETER_PIPE", path);
+        g_free (path);
+        g_free (dir);
+
+        if (!greeter_socket_start (session->priv->greeter_socket, &error))
+        {
+            l_warning (session, "Failed to start greeter socket: %s\n", error->message);
+            g_clear_error (&error);
+        }
+    }
+
     if (session->priv->log_filename)
         l_debug (session, "Logging to %s", session->priv->log_filename);
     write_string (session, session->priv->log_filename);
index fd94c9aa99440ee576b019a5b473bb0f3829a0e2..0bf48fcfb62e1a2f8e3a0a4df26285e42edea8da 100644 (file)
@@ -167,7 +167,8 @@ TESTS = \
        test-switch-to-user-logout-inactive \
        test-switch-to-user-resettable \
        test-switch-to-users \
-       test-session-greeter \        
+       test-session-greeter \
+       test-session-greeter-autologin \
        test-vnc-login \
        test-vnc-command \
        test-vnc-dimensions \
@@ -541,6 +542,7 @@ EXTRA_DIST = \
        scripts/script-hook-session-setup-fail.conf \
        scripts/script-hook-session-setup-missing.conf \
        scripts/session-greeter.conf \
+       scripts/session-greeter-autologin.conf \        
        scripts/session-stdout.conf \
        scripts/session-stderr.conf \
        scripts/session-stderr-multi-write.conf \
diff --git a/tests/scripts/session-greeter-autologin.conf b/tests/scripts/session-greeter-autologin.conf
new file mode 100644 (file)
index 0000000..f6e7d90
--- /dev/null
@@ -0,0 +1,59 @@
+#
+# Check can run greeter inside session after autologin
+#
+
+[Seat:*]
+autologin-user=have-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=.*/have-password1 XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=greeter USER=have-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=have-password2
+#?SESSION-X-0 GREETER-SHOW-PROMPT TEXT="Password:"
+#?*SESSION-X-0 GREETER-RESPOND TEXT="password"
+#?SESSION-X-0 GREETER-AUTHENTICATION-COMPLETE USERNAME=have-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=.*/have-password2 XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=greeter USER=have-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
+
+# 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
index b18d4d50494f010e050a366153a4db7b2a76fbd2..3dde53a52f67cc770fb88e3027df47bc9dab02f7 100644 (file)
@@ -3,7 +3,6 @@
 #
 
 [Seat:*]
-autologin-user=have-password1
 user-session=greeter
 
 #?*START-DAEMON
@@ -17,9 +16,25 @@ user-session=greeter
 #?XSERVER-0 INDICATE-READY
 #?XSERVER-0 ACCEPT-CONNECT
 
+# Greeter starts
+#?GREETER-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_SESSION_CLASS=greeter
+#?LOGIN1 ACTIVATE-SESSION SESSION=c0
+#?XSERVER-0 ACCEPT-CONNECT
+#?GREETER-X-0 CONNECT-XSERVER
+#?GREETER-X-0 CONNECT-TO-DAEMON
+#?GREETER-X-0 CONNECTED-TO-DAEMON
+
+# Log into account with a password
+#?*GREETER-X-0 AUTHENTICATE USERNAME=have-password1
+#?GREETER-X-0 SHOW-PROMPT TEXT="Password:"
+#?*GREETER-X-0 RESPOND TEXT="password"
+#?GREETER-X-0 AUTHENTICATION-COMPLETE USERNAME=have-password1 AUTHENTICATED=TRUE
+#?*GREETER-X-0 START-SESSION
+#?GREETER-X-0 TERMINATE SIGNAL=15
+
 # Session starts
 #?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/have-password1 XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=greeter USER=have-password1
-#?LOGIN1 ACTIVATE-SESSION SESSION=c0
+#?LOGIN1 ACTIVATE-SESSION SESSION=c1
 #?XSERVER-0 ACCEPT-CONNECT
 #?SESSION-X-0 CONNECT-XSERVER
 
@@ -47,8 +62,8 @@ user-session=greeter
 
 # Switch to new session
 #?VT ACTIVATE VT=8
-#?LOGIN1 LOCK-SESSION SESSION=c0
-#?LOGIN1 ACTIVATE-SESSION SESSION=c1
+#?LOGIN1 LOCK-SESSION SESSION=c1
+#?LOGIN1 ACTIVATE-SESSION SESSION=c2
 
 # Cleanup
 #?*STOP-DAEMON
diff --git a/tests/test-session-greeter-autologin b/tests/test-session-greeter-autologin
new file mode 100755 (executable)
index 0000000..91cdc53
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner session-greeter-autologin test-gobject-greeter