diff options
author | Michael Terry <michael.terry@canonical.com> | 2012-08-17 11:57:54 -0400 |
---|---|---|
committer | Michael Terry <michael.terry@canonical.com> | 2012-08-17 11:57:54 -0400 |
commit | 70f4fd01ce49b9032e75302c2f4d90d78046a7db (patch) | |
tree | 232005cfe6cf3c2945dd83e92aada781153100e5 /liblightdm-gobject | |
parent | 107fe7e52743d11d41e6f82591682106e5fe5fba (diff) | |
download | lightdm-70f4fd01ce49b9032e75302c2f4d90d78046a7db.tar.gz |
snapshot work
Diffstat (limited to 'liblightdm-gobject')
-rw-r--r-- | liblightdm-gobject/greeter.c | 31 |
1 files changed, 9 insertions, 22 deletions
diff --git a/liblightdm-gobject/greeter.c b/liblightdm-gobject/greeter.c index d8956c9e..78943d76 100644 --- a/liblightdm-gobject/greeter.c +++ b/liblightdm-gobject/greeter.c @@ -50,6 +50,7 @@ typedef struct GIOChannel *to_server_channel, *from_server_channel; guint8 *read_buffer; gsize n_read; + gsize n_prompts_waiting; GHashTable *hints; guint autologin_timeout; @@ -316,9 +317,11 @@ handle_prompt_authentication (LightDMGreeter *greeter, guint8 *message, gsize me switch (style) { case PAM_PROMPT_ECHO_OFF: + priv->n_prompts_waiting++; g_signal_emit (G_OBJECT (greeter), signals[SHOW_PROMPT], 0, text, LIGHTDM_PROMPT_TYPE_SECRET); break; case PAM_PROMPT_ECHO_ON: + priv->n_prompts_waiting++; g_signal_emit (G_OBJECT (greeter), signals[SHOW_PROMPT], 0, text, LIGHTDM_PROMPT_TYPE_QUESTION); break; case PAM_ERROR_MSG: @@ -827,7 +830,7 @@ lightdm_greeter_authenticate_as_guest (LightDMGreeter *greeter) * @greeter: A #LightDMGreeter * @response: Response to a prompt * - * Provide response to a prompt. + * Provide response to a prompt. May be one in a series. **/ void lightdm_greeter_respond (LightDMGreeter *greeter, const gchar *response) @@ -835,9 +838,6 @@ lightdm_greeter_respond (LightDMGreeter *greeter, const gchar *response) LightDMGreeterPrivate *priv; guint8 message[MAX_MESSAGE_LENGTH]; gsize offset = 0; - gchar **responses; - gint n_responses, i; - guint32 msg_length; g_return_if_fail (LIGHTDM_IS_GREETER (greeter)); g_return_if_fail (response != NULL); @@ -845,28 +845,15 @@ lightdm_greeter_respond (LightDMGreeter *greeter, const gchar *response) priv = GET_PRIVATE (greeter); g_return_if_fail (priv->connected); + g_return_if_fail (priv->n_prompts_waiting > 0); - /* New lines separate distinct responses */ - responses = g_strsplit (response, "\n", -1); - n_responses = g_strv_length (responses); - - msg_length = int_length (); - for (i = 0; i < n_responses; i++) - { - msg_length += string_length (responses[i]); - } + priv->n_prompts_waiting--; g_debug ("Providing response to display manager"); - - write_header (message, MAX_MESSAGE_LENGTH, GREETER_MESSAGE_CONTINUE_AUTHENTICATION, msg_length, &offset); - write_int (message, MAX_MESSAGE_LENGTH, n_responses, &offset); - for (i = 0; i < n_responses; i++) - { - write_string (message, MAX_MESSAGE_LENGTH, responses[i], &offset); - } + write_header (message, MAX_MESSAGE_LENGTH, GREETER_MESSAGE_CONTINUE_AUTHENTICATION, int_length () + string_length (response), &offset); + write_int (message, MAX_MESSAGE_LENGTH, 1, &offset); + write_string (message, MAX_MESSAGE_LENGTH, response, &offset); write_message (greeter, message, offset); - - g_strfreev (responses); } /** |