diff options
author | Robert Ancell <robert.ancell@canonical.com> | 2016-07-12 09:58:19 +1200 |
---|---|---|
committer | Robert Ancell <robert.ancell@canonical.com> | 2016-07-12 09:58:19 +1200 |
commit | 00f55c8c778aaa16c2d422aa65b6cc9cf5626e50 (patch) | |
tree | 5cede380dc939afb3914ed0a74a06d2778ad3069 | |
parent | 43f764dd75191c35786714938fed5ddb2dd83a25 (diff) | |
download | lightdm-git-00f55c8c778aaa16c2d422aa65b6cc9cf5626e50.tar.gz |
Fix in-session greeter not working for greeter logins
-rw-r--r-- | src/session.c | 64 | ||||
-rw-r--r-- | tests/Makefile.am | 4 | ||||
-rw-r--r-- | tests/scripts/session-greeter-autologin.conf | 59 | ||||
-rw-r--r-- | tests/scripts/session-greeter.conf | 23 | ||||
-rwxr-xr-x | tests/test-session-greeter-autologin | 2 |
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 |