summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile.am8
-rw-r--r--tests/data/remote-sessions/test-remote.desktop5
-rw-r--r--tests/scripts/autologin-guest-logout.conf6
-rw-r--r--tests/scripts/login-guest-logout.conf6
-rw-r--r--tests/scripts/login-remote-session.conf50
-rw-r--r--tests/src/libsystem.c80
-rw-r--r--tests/src/test-gobject-greeter.c5
-rwxr-xr-xtests/src/test-python-greeter4
-rw-r--r--tests/src/test-qt-greeter.cpp5
-rw-r--r--tests/src/test-runner.c3
-rwxr-xr-xtests/test-login-gobject-remote-session2
-rwxr-xr-xtests/test-login-python-remote-session2
-rwxr-xr-xtests/test-login-qt-remote-session2
13 files changed, 169 insertions, 9 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 7d87c3ab..9e41117e 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -70,6 +70,7 @@ TESTS = \
test-login-gobject-guest-no-setup-script \
test-login-gobject-guest-fail-setup-script \
test-login-gobject-guest-logout \
+ test-login-gobject-remote-session \
test-login-python \
test-login-python-manual \
test-login-python-manual-previous-session \
@@ -91,6 +92,7 @@ TESTS = \
test-login-python-guest-no-setup-script \
test-login-python-guest-fail-setup-script \
test-login-python-guest-logout \
+ test-login-python-remote-session \
test-login-session-crash \
test-login-xserver-crash \
test-home-dir-on-authenticate \
@@ -147,7 +149,8 @@ TESTS += \
test-login-qt-guest-disabled \
test-login-qt-guest-no-setup-script \
test-login-qt-guest-fail-setup-script \
- test-login-qt-guest-logout
+ test-login-qt-guest-logout \
+ test-login-qt-remote-session
endif
EXTRA_DIST = \
@@ -214,8 +217,9 @@ EXTRA_DIST = \
scripts/login-pam.conf \
scripts/login-pick-session.conf \
scripts/login-previous-session.conf \
- scripts/login-two-factor.conf \
+ scripts/login-remote-session.conf \
scripts/login-session-crash.conf \
+ scripts/login-two-factor.conf \
scripts/login-wrong-password.conf \
scripts/login-xserver-crash.conf \
scripts/no-accounts-service.conf \
diff --git a/tests/data/remote-sessions/test-remote.desktop b/tests/data/remote-sessions/test-remote.desktop
new file mode 100644
index 00000000..60829d44
--- /dev/null
+++ b/tests/data/remote-sessions/test-remote.desktop
@@ -0,0 +1,5 @@
+[Desktop Entry]
+Name=Test Remote Session
+Comment=LightDM remote test session
+Exec=test-session
+X-LightDM-PAM-Service=test-remote
diff --git a/tests/scripts/autologin-guest-logout.conf b/tests/scripts/autologin-guest-logout.conf
index cb1146b5..51a6b9ac 100644
--- a/tests/scripts/autologin-guest-logout.conf
+++ b/tests/scripts/autologin-guest-logout.conf
@@ -28,12 +28,12 @@ autologin-guest=true
# Logout of session
#?*SESSION :50 LOGOUT
-# Guest account removed
-#?GUEST-ACCOUNT REMOVE USERNAME=guest-.*
-
# X server stops
#?XSERVER :50 TERMINATE SIGNAL=15
+# Guest account removed
+#?GUEST-ACCOUNT REMOVE USERNAME=guest-.*
+
# X server starts
#?XSERVER :50 START
#?XSERVER :50 INDICATE-READY
diff --git a/tests/scripts/login-guest-logout.conf b/tests/scripts/login-guest-logout.conf
index 27723626..1dcf3ceb 100644
--- a/tests/scripts/login-guest-logout.conf
+++ b/tests/scripts/login-guest-logout.conf
@@ -38,12 +38,12 @@ minimum-display-number=50
# Logout of session
#?*SESSION :50 LOGOUT
-# Guest account removed
-#?GUEST-ACCOUNT REMOVE USERNAME=guest-.*
-
# X server stops
#?XSERVER :50 TERMINATE SIGNAL=15
+# Guest account removed
+#?GUEST-ACCOUNT REMOVE USERNAME=guest-.*
+
# X server starts
#?XSERVER :50 START
#?XSERVER :50 INDICATE-READY
diff --git a/tests/scripts/login-remote-session.conf b/tests/scripts/login-remote-session.conf
new file mode 100644
index 00000000..b24a89f8
--- /dev/null
+++ b/tests/scripts/login-remote-session.conf
@@ -0,0 +1,50 @@
+#
+# Check can login without a username, and is prompted for one
+#
+
+[LightDM]
+minimum-display-number=50
+
+#?RUNNER DAEMON-START
+
+# X server starts
+#?XSERVER :50 START
+#?XSERVER :50 INDICATE-READY
+
+# LightDM connects to X server
+#?XSERVER :50 ACCEPT-CONNECT
+
+# Greeter starts
+#?GREETER :50 START
+#?XSERVER :50 ACCEPT-CONNECT
+#?GREETER :50 CONNECT-XSERVER
+#?GREETER :50 CONNECT-TO-DAEMON
+#?GREETER :50 CONNECTED-TO-DAEMON
+
+# Start remote authentication
+#?*GREETER :50 AUTHENTICATE-REMOTE SESSION=test-remote
+
+# Guest account created
+#?GUEST-ACCOUNT ADD USERNAME=guest-.*
+
+# Get remote credentials
+#?GREETER :50 SHOW-PROMPT TEXT="remote-login:"
+#?*GREETER :50 RESPOND TEXT="remote-user"
+#?GREETER :50 SHOW-PROMPT TEXT="remote-password:"
+#?*GREETER :50 RESPOND TEXT="password"
+#?GREETER :50 AUTHENTICATION-COMPLETE USERNAME=guest-.* AUTHENTICATED=TRUE
+#?*GREETER :50 START-SESSION
+#?GREETER :50 TERMINATE SIGNAL=15
+
+# Session starts
+#?SESSION :50 START USER=guest-.*
+#?XSERVER :50 ACCEPT-CONNECT
+#?SESSION :50 CONNECT-XSERVER
+
+# Cleanup
+#?*STOP-DAEMON
+# Don't know what order they will terminate
+#?(SESSION :50 TERMINATE SIGNAL=15|XSERVER :50 TERMINATE SIGNAL=15|GUEST-ACCOUNT REMOVE USERNAME=guest-.*)
+#?(SESSION :50 TERMINATE SIGNAL=15|XSERVER :50 TERMINATE SIGNAL=15|GUEST-ACCOUNT REMOVE USERNAME=guest-.*)
+#?(SESSION :50 TERMINATE SIGNAL=15|XSERVER :50 TERMINATE SIGNAL=15|GUEST-ACCOUNT REMOVE USERNAME=guest-.*)
+#?RUNNER DAEMON-EXIT STATUS=0
diff --git a/tests/src/libsystem.c b/tests/src/libsystem.c
index 855f668b..9e137339 100644
--- a/tests/src/libsystem.c
+++ b/tests/src/libsystem.c
@@ -26,6 +26,8 @@ struct pam_handle
{
char *service_name;
char *user;
+ char *authtok;
+ char *ruser;
char *tty;
char **envlist;
struct pam_conv conversation;
@@ -435,6 +437,8 @@ pam_start (const char *service_name, const char *user, const struct pam_conv *co
handle->service_name = strdup (service_name);
handle->user = user ? strdup (user) : NULL;
+ handle->authtok = NULL;
+ handle->ruser = NULL;
handle->tty = NULL;
handle->conversation.conv = conversation->conv;
handle->conversation.appdata_ptr = conversation->appdata_ptr;
@@ -473,6 +477,68 @@ pam_authenticate (pam_handle_t *pamh, int flags)
if (pamh == NULL)
return PAM_SYSTEM_ERR;
+
+ if (strcmp (pamh->service_name, "test-remote") == 0)
+ {
+ int result;
+ struct pam_message **msg;
+ struct pam_response *resp = NULL;
+
+ msg = malloc (sizeof (struct pam_message *) * 1);
+ msg[0] = malloc (sizeof (struct pam_message));
+ msg[0]->msg_style = PAM_PROMPT_ECHO_ON;
+ msg[0]->msg = "remote-login:";
+ result = pamh->conversation.conv (1, (const struct pam_message **) msg, &resp, pamh->conversation.appdata_ptr);
+ free (msg[0]);
+ free (msg);
+ if (result != PAM_SUCCESS)
+ return result;
+
+ if (resp == NULL)
+ return PAM_CONV_ERR;
+ if (resp[0].resp == NULL)
+ {
+ free (resp);
+ return PAM_CONV_ERR;
+ }
+
+ if (pamh->ruser)
+ free (pamh->ruser);
+ pamh->ruser = strdup (resp[0].resp);
+ free (resp[0].resp);
+ free (resp);
+
+ msg = malloc (sizeof (struct pam_message *) * 1);
+ msg[0] = malloc (sizeof (struct pam_message));
+ msg[0]->msg_style = PAM_PROMPT_ECHO_OFF;
+ msg[0]->msg = "remote-password:";
+ result = pamh->conversation.conv (1, (const struct pam_message **) msg, &resp, pamh->conversation.appdata_ptr);
+ free (msg[0]);
+ free (msg);
+ if (result != PAM_SUCCESS)
+ return result;
+
+ if (resp == NULL)
+ return PAM_CONV_ERR;
+ if (resp[0].resp == NULL)
+ {
+ free (resp);
+ return PAM_CONV_ERR;
+ }
+
+ if (pamh->authtok)
+ free (pamh->authtok);
+ pamh->authtok = strdup (resp[0].resp);
+ free (resp[0].resp);
+ free (resp);
+
+ password_matches = strcmp (pamh->ruser, "remote-user") == 0 && strcmp (pamh->authtok, "password") == 0;
+
+ if (password_matches)
+ return PAM_SUCCESS;
+ else
+ return PAM_AUTH_ERR;
+ }
/* Prompt for username */
if (pamh->user == NULL)
@@ -738,7 +804,15 @@ pam_get_item (const pam_handle_t *pamh, int item_type, const void **item)
case PAM_USER:
*item = pamh->user;
return PAM_SUCCESS;
-
+
+ case PAM_AUTHTOK:
+ *item = pamh->authtok;
+ return PAM_SUCCESS;
+
+ case PAM_RUSER:
+ *item = pamh->ruser;
+ return PAM_SUCCESS;
+
case PAM_USER_PROMPT:
*item = LOGIN_PROMPT;
return PAM_SUCCESS;
@@ -911,6 +985,10 @@ pam_end (pam_handle_t *pamh, int pam_status)
free (pamh->service_name);
if (pamh->user)
free (pamh->user);
+ if (pamh->authtok)
+ free (pamh->authtok);
+ if (pamh->ruser)
+ free (pamh->ruser);
if (pamh->tty)
free (pamh->tty);
free (pamh);
diff --git a/tests/src/test-gobject-greeter.c b/tests/src/test-gobject-greeter.c
index f5057cfb..e114dd18 100644
--- a/tests/src/test-gobject-greeter.c
+++ b/tests/src/test-gobject-greeter.c
@@ -65,6 +65,11 @@ request_cb (const gchar *request)
lightdm_greeter_authenticate_as_guest (greeter);
g_free (r);
+ r = g_strdup_printf ("GREETER %s AUTHENTICATE-REMOTE SESSION=", getenv ("DISPLAY"));
+ if (g_str_has_prefix (request, r))
+ lightdm_greeter_authenticate_remote (greeter, request + strlen (r), NULL);
+ g_free (r);
+
r = g_strdup_printf ("GREETER %s RESPOND TEXT=\"", getenv ("DISPLAY"));
if (g_str_has_prefix (request, r))
{
diff --git a/tests/src/test-python-greeter b/tests/src/test-python-greeter
index fe26af39..87aa6c7a 100755
--- a/tests/src/test-python-greeter
+++ b/tests/src/test-python-greeter
@@ -45,6 +45,10 @@ def request_cb (channel, condition):
if request.startswith (r):
greeter.authenticate (request[len(r):])
+ r = 'GREETER %s AUTHENTICATE-REMOTE SESSION=' % os.getenv ('DISPLAY')
+ if request.startswith (r):
+ greeter.authenticate_remote (request[len(r):], None)
+
r = 'GREETER %s AUTHENTICATE-GUEST' % os.getenv ('DISPLAY')
if request == r:
greeter.authenticate_as_guest ()
diff --git a/tests/src/test-qt-greeter.cpp b/tests/src/test-qt-greeter.cpp
index 49b42e08..1019a6ab 100644
--- a/tests/src/test-qt-greeter.cpp
+++ b/tests/src/test-qt-greeter.cpp
@@ -68,6 +68,11 @@ request_cb (const gchar *request)
greeter->authenticateAsGuest ();
g_free (r);
+ r = g_strdup_printf ("GREETER %s AUTHENTICATE-REMOTE SESSION=", getenv ("DISPLAY"));
+ if (g_str_has_prefix (request, r))
+ greeter->authenticateRemote (request + strlen (r), NULL);
+ g_free (r);
+
r = g_strdup_printf ("GREETER %s RESPOND TEXT=\"", getenv ("DISPLAY"));
if (g_str_has_prefix (request, r))
{
diff --git a/tests/src/test-runner.c b/tests/src/test-runner.c
index 516a6788..80560158 100644
--- a/tests/src/test-runner.c
+++ b/tests/src/test-runner.c
@@ -1138,6 +1138,7 @@ run_lightdm ()
g_string_append (command_line, " --debug");
g_string_append_printf (command_line, " --cache-dir %s/cache", temp_dir);
g_string_append_printf (command_line, " --xsessions-dir=%s/usr/share/xsessions", temp_dir);
+ g_string_append_printf (command_line, " --remote-sessions-dir=%s/usr/share/remote-sessions", temp_dir);
g_string_append_printf (command_line, " --xgreeters-dir=%s/usr/share/xgreeters", temp_dir);
g_print ("Start daemon with command: PATH=%s LD_PRELOAD=%s LD_LIBRARY_PATH=%s LIGHTDM_TEST_ROOT=%s DBUS_SESSION_BUS_ADDRESS=%s %s\n",
@@ -1302,6 +1303,8 @@ main (int argc, char **argv)
/* Copy over the greeter files */
if (system (g_strdup_printf ("cp -r %s/xsessions %s/usr/share", DATADIR, temp_dir)))
perror ("Failed to copy xsessions");
+ if (system (g_strdup_printf ("cp -r %s/remote-sessions %s/usr/share", DATADIR, temp_dir)))
+ perror ("Failed to copy remote sessions");
if (system (g_strdup_printf ("cp -r %s/xgreeters %s/usr/share", DATADIR, temp_dir)))
perror ("Failed to copy xgreeters");
diff --git a/tests/test-login-gobject-remote-session b/tests/test-login-gobject-remote-session
new file mode 100755
index 00000000..833ca04c
--- /dev/null
+++ b/tests/test-login-gobject-remote-session
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner login-remote-session test-gobject-greeter
diff --git a/tests/test-login-python-remote-session b/tests/test-login-python-remote-session
new file mode 100755
index 00000000..4ac1a6f6
--- /dev/null
+++ b/tests/test-login-python-remote-session
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner login-remote-session test-python-greeter
diff --git a/tests/test-login-qt-remote-session b/tests/test-login-qt-remote-session
new file mode 100755
index 00000000..427afe47
--- /dev/null
+++ b/tests/test-login-qt-remote-session
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner login-remote-session test-qt-greeter