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 \
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 \
--- /dev/null
+#
+# 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
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:";
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)
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);
{"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 ("");
--- /dev/null
+#!/bin/sh
+./src/dbus-env ./src/test-runner login-multi-prompt test-gobject-greeter