summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Ancell <robert.ancell@canonical.com>2016-07-12 09:58:19 +1200
committerRobert Ancell <robert.ancell@canonical.com>2016-07-12 09:58:19 +1200
commit00f55c8c778aaa16c2d422aa65b6cc9cf5626e50 (patch)
tree5cede380dc939afb3914ed0a74a06d2778ad3069
parent43f764dd75191c35786714938fed5ddb2dd83a25 (diff)
downloadlightdm-git-00f55c8c778aaa16c2d422aa65b6cc9cf5626e50.tar.gz
Fix in-session greeter not working for greeter logins
-rw-r--r--src/session.c64
-rw-r--r--tests/Makefile.am4
-rw-r--r--tests/scripts/session-greeter-autologin.conf59
-rw-r--r--tests/scripts/session-greeter.conf23
-rwxr-xr-xtests/test-session-greeter-autologin2
5 files changed, 115 insertions, 37 deletions
diff --git a/src/session.c b/src/session.c
index 92a59bbd..5e7d4767 100644
--- a/src/session.c
+++ b/src/session.c
@@ -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);
diff --git a/tests/Makefile.am b/tests/Makefile.am
index e46019ac..ef941d24 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -166,7 +166,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 \
@@ -539,6 +540,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
index 00000000..f6e7d906
--- /dev/null
+++ b/tests/scripts/session-greeter-autologin.conf
@@ -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
diff --git a/tests/scripts/session-greeter.conf b/tests/scripts/session-greeter.conf
index b18d4d50..3dde53a5 100644
--- a/tests/scripts/session-greeter.conf
+++ b/tests/scripts/session-greeter.conf
@@ -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
index 00000000..91cdc53e
--- /dev/null
+++ b/tests/test-session-greeter-autologin
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner session-greeter-autologin test-gobject-greeter