diff options
author | Robert Ancell <robert.ancell@canonical.com> | 2012-08-21 17:40:47 +1200 |
---|---|---|
committer | Robert Ancell <robert.ancell@canonical.com> | 2012-08-21 17:40:47 +1200 |
commit | 909b576f956fd36ff50e8ee500dac04ff074c34b (patch) | |
tree | e55bfb8cd1f395ab6d668e5cda7b7b674577f8bf /tests | |
parent | 40e9874b5ce72d9de46f5a18251bfe283a76df13 (diff) | |
download | lightdm-909b576f956fd36ff50e8ee500dac04ff074c34b.tar.gz |
Add some tests and more work on remote sessions
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Makefile.am | 8 | ||||
-rw-r--r-- | tests/data/remote-sessions/test-remote.desktop | 5 | ||||
-rw-r--r-- | tests/scripts/login-remote-session.conf | 43 | ||||
-rw-r--r-- | tests/src/libsystem.c | 67 | ||||
-rw-r--r-- | tests/src/test-gobject-greeter.c | 5 | ||||
-rwxr-xr-x | tests/src/test-python-greeter | 4 | ||||
-rw-r--r-- | tests/src/test-qt-greeter.cpp | 5 | ||||
-rw-r--r-- | tests/src/test-runner.c | 3 | ||||
-rwxr-xr-x | tests/test-login-gobject-remote-session | 2 | ||||
-rwxr-xr-x | tests/test-login-python-remote-session | 2 | ||||
-rwxr-xr-x | tests/test-login-qt-remote-session | 2 |
11 files changed, 143 insertions, 3 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..4d486335 --- /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-remote +X-LightDM-PAM-Service=test-remote diff --git a/tests/scripts/login-remote-session.conf b/tests/scripts/login-remote-session.conf new file mode 100644 index 00000000..6b9b67a8 --- /dev/null +++ b/tests/scripts/login-remote-session.conf @@ -0,0 +1,43 @@ +# +# 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 + +#?*GREETER :50 AUTHENTICATE-REMOTE SESSION=test-remote +#?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=remote-user AUTHENTICATED=TRUE +#?*GREETER :50 START-SESSION +#?GREETER :50 TERMINATE SIGNAL=15 + +# Session starts +#?SESSION :50 START USER=remote-user +#?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) +#?(SESSION :50 TERMINATE SIGNAL=15|XSERVER :50 TERMINATE SIGNAL=15) +#?RUNNER DAEMON-EXIT STATUS=0 diff --git a/tests/src/libsystem.c b/tests/src/libsystem.c index 855f668b..e6038d42 100644 --- a/tests/src/libsystem.c +++ b/tests/src/libsystem.c @@ -26,6 +26,7 @@ struct pam_handle { char *service_name; char *user; + char *ruser; char *tty; char **envlist; struct pam_conv conversation; @@ -473,6 +474,64 @@ 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; + } + + password_matches = strcmp (pamh->ruser, "remote-user") == 0 && strcmp (resp[0].resp, "password") == 0; + free (resp[0].resp); + free (resp); + + if (password_matches) + return PAM_SUCCESS; + else + return PAM_AUTH_ERR; + } /* Prompt for username */ if (pamh->user == NULL) @@ -738,7 +797,11 @@ 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_RUSER: + *item = pamh->ruser; + return PAM_SUCCESS; + case PAM_USER_PROMPT: *item = LOGIN_PROMPT; return PAM_SUCCESS; @@ -911,6 +974,8 @@ pam_end (pam_handle_t *pamh, int pam_status) free (pamh->service_name); if (pamh->user) free (pamh->user); + 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 |