]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
add tests for multi-prompt
authorMichael Terry <michael.terry@canonical.com>
Tue, 24 Apr 2012 16:36:19 +0000 (12:36 -0400)
committerMichael Terry <michael.terry@canonical.com>
Tue, 24 Apr 2012 16:36:19 +0000 (12:36 -0400)
tests/Makefile.am
tests/scripts/login-multi-prompt.conf [new file with mode: 0644]
tests/src/libsystem.c
tests/src/test-gobject-greeter.c
tests/src/test-runner.c
tests/test-login-gobject-multi-prompt [new file with mode: 0755]

index d036b0b19ac1211bf2b7e6925fad7e58eb3ffb0a..5fc983653c946b9691074711f5bc7936556a9673 100644 (file)
@@ -56,6 +56,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 \
@@ -204,6 +205,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 (file)
index 0000000..1da571b
--- /dev/null
@@ -0,0 +1,38 @@
+#
+# 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\npassword"
+#?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
index 9a8b6de7066e21631ef5f74b8e711e22cfebfd23..eb1ebc7febeb3af41d8b7cb640ae3f999b97df46 100644 (file)
@@ -547,6 +547,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:";
@@ -569,6 +576,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)
index f5057cfb9f462e8d636108e81398d0d4907edcea..8b3bf08f4ffcd4788db4ec1d8dfe26d0a8e652ff 100644 (file)
@@ -68,9 +68,15 @@ request_cb (const gchar *request)
     r = g_strdup_printf ("GREETER %s RESPOND TEXT=\"", getenv ("DISPLAY"));
     if (g_str_has_prefix (request, r))
     {
-        gchar *text = g_strdup (request + strlen (r));
+        gchar *text, *compressed;
+
+        text = g_strdup (request + strlen (r));
         text[strlen (text) - 1] = '\0';
-        lightdm_greeter_respond (greeter, text);
+        compressed = g_strcompress (text);
+
+        lightdm_greeter_respond (greeter, compressed);
+
+        g_free (compressed);
         g_free (text);
     }
     g_free (r);
index 687785bd59104aac919b4cf1d62cf5863f4b4762..e5520cdb1f04645a89683f387e3851799374760a 100644 (file)
@@ -1392,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 (executable)
index 0000000..7f4f52e
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner login-multi-prompt test-gobject-greeter