if (strcmp (username, "*other") == 0)
{
- gtk_label_set_text (GTK_LABEL (prompt_label), _("Username:"));
- gtk_widget_set_sensitive (prompt_entry, TRUE);
- gtk_entry_set_text (GTK_ENTRY (prompt_entry), "");
- gtk_entry_set_visibility (GTK_ENTRY (prompt_entry), TRUE);
- gtk_widget_show (prompt_box);
- gtk_widget_grab_focus (prompt_entry);
- return;
+ ldm_greeter_login (greeter, NULL);
}
else if (strcmp (username, "*guest") == 0)
{
gsize offset = 0;
g_return_if_fail (LDM_IS_GREETER (greeter));
-
+
if (!username)
username = "";
if (use_fake_users)
{
+ if (session->priv->username == NULL)
+ {
+ struct pam_message **messages;
+ messages = calloc (1, sizeof (struct pam_message *));
+ messages[0] = g_malloc0 (sizeof (struct pam_message));
+ messages[0]->msg_style = PAM_PROMPT_ECHO_ON;
+ messages[0]->msg = g_strdup ("login:");
+ session->priv->messages = (const struct pam_message **) messages;
+ session->priv->num_messages = 1;
+
+ g_signal_emit (G_OBJECT (session), signals[GOT_MESSAGES], 0, session->priv->num_messages, session->priv->messages);
+ }
/* Always succeed with autologin, otherwise prompt for a password */
- if (strcmp (session->priv->service, "lightdm-autologin") == 0 ||
+ else if (strcmp (session->priv->service, "lightdm-autologin") == 0 ||
g_strcmp0 (session->priv->username, "guest") == 0)
g_signal_emit (G_OBJECT (session), signals[AUTHENTICATION_RESULT], 0, PAM_SUCCESS);
else
const gchar *
pam_session_get_username (PAMSession *session)
{
+ const char *username;
+
g_return_val_if_fail (session != NULL, NULL);
+
+ if (session->priv->pam_handle)
+ {
+ g_free (session->priv->username);
+ pam_get_item (session->priv->pam_handle, PAM_USER, (const void **) &username);
+ session->priv->username = g_strdup (username);
+ }
+
return session->priv->username;
}
if (use_fake_users)
{
- User *user;
-
if (session->priv->messages)
{
int i;
session->priv->num_messages = 0;
}
- user = user_get_by_name (session->priv->username);
- if (user && strcmp (response->resp, "password") == 0)
- g_signal_emit (G_OBJECT (session), signals[AUTHENTICATION_RESULT], 0, PAM_SUCCESS);
+ if (session->priv->username == NULL)
+ {
+ struct pam_message **messages;
+
+ session->priv->username = g_strdup (response->resp);
+
+ messages = calloc (1, sizeof (struct pam_message *));
+ messages[0] = g_malloc0 (sizeof (struct pam_message));
+ messages[0]->msg_style = PAM_PROMPT_ECHO_OFF;
+ messages[0]->msg = g_strdup ("Password:");
+ session->priv->messages = (const struct pam_message **) messages;
+ session->priv->num_messages = 1;
+
+ g_signal_emit (G_OBJECT (session), signals[GOT_MESSAGES], 0, session->priv->num_messages, session->priv->messages);
+ }
else
- g_signal_emit (G_OBJECT (session), signals[AUTHENTICATION_RESULT], 0, PAM_AUTH_ERR);
+ {
+ User *user;
+
+ user = user_get_by_name (session->priv->username);
+ if (user && strcmp (response->resp, "password") == 0)
+ g_signal_emit (G_OBJECT (session), signals[AUTHENTICATION_RESULT], 0, PAM_SUCCESS);
+ else
+ g_signal_emit (G_OBJECT (session), signals[AUTHENTICATION_RESULT], 0, PAM_AUTH_ERR);
+
+ if (user)
+ g_object_unref (user);
+ }
g_free (response->resp);
g_free (response);
- if (user)
- g_object_unref (user);
}
else
{
test-autologin \
test-autologin-logout \
test-login-gobject \
+ test-login-gobject-manual \
test-login-gobject-wrong-password \
test-login-gobject-invalid-user \
test-login-gobject-logout \
--- /dev/null
+[LightDM]
+seats=test-seat
+
+[test-seat]
+display-number=99
+
+[test-greeter-config]
+prompt-username=true
+username=alice
+password=password
--- /dev/null
+RUNNER DAEMON-START
+
+# X server starts
+XSERVER :.* START
+XSERVER :.* INDICATE-READY
+XSERVER :.* ACCEPT-CONNECT
+
+# Greeter starts
+GREETER START
+XSERVER :.* ACCEPT-CONNECT
+GREETER CONNECT-XSERVER :.*
+GREETER CONNECT-TO-DAEMON
+GREETER CONNECTED-TO-DAEMON
+
+# Login as alice, but let lightdm prompt for a username
+GREETER LOGIN
+GREETER SHOW-PROMPT TEXT="login:"
+GREETER PROVIDE-SECRET TEXT="alice"
+GREETER SHOW-PROMPT TEXT="Password:"
+GREETER PROVIDE-SECRET TEXT="password"
+GREETER AUTHENTICATION-COMPLETE AUTHENTICATED=TRUE
+
+# Greeter quits and session starts
+GREETER QUIT
+SESSION START USER=alice
+XSERVER :.* ACCEPT-CONNECT
+SESSION CONNECT-XSERVER
+
+# Cleanup
+*STOP-DAEMON
+# Don't know what order they will terminate
+(SESSION TERMINATE SIGNAL=15|XSERVER :.* TERMINATE SIGNAL=15)
+(SESSION TERMINATE SIGNAL=15|XSERVER :.* TERMINATE SIGNAL=15)
+RUNNER DAEMON-EXIT STATUS=0
notify_status ("GREETER LOGIN-GUEST");
ldm_greeter_login_as_guest (greeter);
}
+ else if (g_key_file_get_boolean (config, "test-greeter-config", "prompt-username", NULL))
+ {
+ notify_status ("GREETER LOGIN");
+ ldm_greeter_login (greeter, NULL);
+ }
else if (username)
{
- notify_status ("GREETER LOGIN USERNAME=%s", username);
- ldm_greeter_login (greeter, username);
+ notify_status ("GREETER LOGIN USERNAME=%s", username);
+ ldm_greeter_login (greeter, username);
}
g_free (username);
static void
show_prompt_cb (LdmGreeter *greeter, const gchar *text)
{
- gchar *password;
+ gchar *username, *password, *response = NULL;
notify_status ("GREETER SHOW-PROMPT TEXT=\"%s\"", text);
+ username = g_key_file_get_string (config, "test-greeter-config", "username", NULL);
password = g_key_file_get_string (config, "test-greeter-config", "password", NULL);
- if (password)
+
+ if (g_key_file_get_boolean (config, "test-greeter-config", "prompt-username", NULL))
{
- notify_status ("GREETER PROVIDE-SECRET TEXT=\"%s\"", password);
- ldm_greeter_provide_secret (greeter, password);
+ g_key_file_set_boolean (config, "test-greeter-config", "prompt-username", FALSE);
+ response = username;
}
+ else if (password)
+ response = password;
+
+ if (response)
+ {
+ notify_status ("GREETER PROVIDE-SECRET TEXT=\"%s\"", response);
+ ldm_greeter_provide_secret (greeter, response);
+ }
+
+ g_free (username);
+ g_free (password);
}
static void
--- /dev/null
+#!/bin/sh
+./src/test-runner login-gobject-manual