diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Makefile.am | 2 | ||||
-rw-r--r-- | tests/scripts/login-multi-prompt.conf | 39 | ||||
-rw-r--r-- | tests/src/libsystem.c | 11 | ||||
-rw-r--r-- | tests/src/test-runner.c | 3 | ||||
-rwxr-xr-x | tests/test-login-gobject-multi-prompt | 2 |
5 files changed, 57 insertions, 0 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index 93b47f33..7d87c3ab 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -58,6 +58,7 @@ TESTS = \ test-login-gobject-new-authtok \ test-login-gobject-info-prompt \ test-login-gobject-multi-info-prompt \ + test-login-gobject-multi-prompt \ test-login-gobject-pick-session \ test-login-gobject-previous-session \ test-login-gobject-wrong-password \ @@ -207,6 +208,7 @@ EXTRA_DIST = \ scripts/login-manual.conf \ scripts/login-manual-previous-session.conf \ scripts/login-multi-info-prompt.conf \ + scripts/login-multi-prompt.conf \ scripts/login-new-authtok.conf \ scripts/login-no-password.conf \ scripts/login-pam.conf \ diff --git a/tests/scripts/login-multi-prompt.conf b/tests/scripts/login-multi-prompt.conf new file mode 100644 index 00000000..ed24986b --- /dev/null +++ b/tests/scripts/login-multi-prompt.conf @@ -0,0 +1,39 @@ +# +# Check multiple PAM informational messages on login are passed to a greeter +# + +[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 + +# Log into account and see an informational prompt +#?*GREETER :50 AUTHENTICATE USERNAME=multi-prompt +#?GREETER :50 SHOW-PROMPT TEXT="Favorite Color:" +#?GREETER :50 SHOW-PROMPT TEXT="Password:" + +# Respond with password and check response is correctly handled +#?*GREETER :50 RESPOND TEXT="blue" +#?*GREETER :50 RESPOND TEXT="password" +#?GREETER :50 AUTHENTICATION-COMPLETE USERNAME=multi-prompt AUTHENTICATED=TRUE + +# Cleanup +#?*STOP-DAEMON +# Don't know what order they will terminate +#?(GREETER :50 TERMINATE SIGNAL=15|XSERVER :50 TERMINATE SIGNAL=15) +#?(GREETER :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 2b944837..855f668b 100644 --- a/tests/src/libsystem.c +++ b/tests/src/libsystem.c @@ -546,6 +546,13 @@ pam_authenticate (pam_handle_t *pamh, int flags) msg[n_messages]->msg = "You should have seen three messages"; n_messages++; } + if (strcmp (pamh->user, "multi-prompt") == 0) + { + msg[n_messages] = malloc (sizeof (struct pam_message)); + msg[n_messages]->msg_style = PAM_PROMPT_ECHO_ON; + msg[n_messages]->msg = "Favorite Color:"; + n_messages++; + } msg[n_messages] = malloc (sizeof (struct pam_message)); msg[n_messages]->msg_style = PAM_PROMPT_ECHO_OFF; msg[n_messages]->msg = "Password:"; @@ -568,6 +575,10 @@ pam_authenticate (pam_handle_t *pamh, int flags) if (entry) password_matches = strcmp (entry->pw_passwd, resp[password_index].resp) == 0; + + if (password_matches && strcmp (pamh->user, "multi-prompt") == 0) + password_matches = strcmp ("blue", resp[0].resp) == 0; + for (i = 0; i < n_messages; i++) { if (resp[i].resp) diff --git a/tests/src/test-runner.c b/tests/src/test-runner.c index 491a16c8..e5520cdb 100644 --- a/tests/src/test-runner.c +++ b/tests/src/test-runner.c @@ -1139,6 +1139,7 @@ run_lightdm () 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, " --xgreeters-dir=%s/usr/share/xgreeters", temp_dir); + g_string_append_printf (command_line, " --config=%s", config_path); 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", g_getenv ("PATH"), g_getenv ("LD_PRELOAD"), g_getenv ("LD_LIBRARY_PATH"), g_getenv ("LIGHTDM_TEST_ROOT"), g_getenv ("DBUS_SESSION_BUS_ADDRESS"), @@ -1391,6 +1392,8 @@ main (int argc, char **argv) {"cred-unavail", "password", TRUE, "Cred Unavail", NULL, NULL, NULL, NULL, 1029}, /* This account sends informational messages for each PAM function that is called */ {"log-pam", "password", TRUE, "Log PAM", NULL, NULL, NULL, NULL, 1030}, + /* This account shows multiple prompts on login */ + {"multi-prompt", "password", TRUE, "Multi Prompt", NULL, NULL, NULL, NULL, 1031}, {NULL, NULL, FALSE, NULL, NULL, NULL, NULL, NULL, 0} }; passwd_data = g_string_new (""); diff --git a/tests/test-login-gobject-multi-prompt b/tests/test-login-gobject-multi-prompt new file mode 100755 index 00000000..7f4f52e8 --- /dev/null +++ b/tests/test-login-gobject-multi-prompt @@ -0,0 +1,2 @@ +#!/bin/sh +./src/dbus-env ./src/test-runner login-multi-prompt test-gobject-greeter |