]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
snapshot work
authorMichael Terry <michael.terry@canonical.com>
Fri, 17 Aug 2012 15:57:54 +0000 (11:57 -0400)
committerMichael Terry <michael.terry@canonical.com>
Fri, 17 Aug 2012 15:57:54 +0000 (11:57 -0400)
liblightdm-gobject/greeter.c
tests/scripts/login-multi-prompt.conf
tests/src/test-gobject-greeter.c

index d8956c9ed1a444eb3851c0e2cde533c15e101e88..78943d761af84db5519f5edb347c63ceb3c58c40 100644 (file)
@@ -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);
 }
 
 /**
index 1da571bb961e8f63f3c7d85a9a1aacb7a6e293ca..ed24986b43895694172375b3ba0d144cd8e4f1f9 100644 (file)
@@ -27,7 +27,8 @@ minimum-display-number=50
 #?GREETER :50 SHOW-PROMPT TEXT="Password:"
 
 # Respond with password and check response is correctly handled
-#?*GREETER :50 RESPOND TEXT="blue\npassword"
+#?*GREETER :50 RESPOND TEXT="blue"
+#?*GREETER :50 RESPOND TEXT="password"
 #?GREETER :50 AUTHENTICATION-COMPLETE USERNAME=multi-prompt AUTHENTICATED=TRUE
 
 # Cleanup
index 8b3bf08f4ffcd4788db4ec1d8dfe26d0a8e652ff..f5057cfb9f462e8d636108e81398d0d4907edcea 100644 (file)
@@ -68,15 +68,9 @@ request_cb (const gchar *request)
     r = g_strdup_printf ("GREETER %s RESPOND TEXT=\"", getenv ("DISPLAY"));
     if (g_str_has_prefix (request, r))
     {
-        gchar *text, *compressed;
-
-        text = g_strdup (request + strlen (r));
+        gchar *text = g_strdup (request + strlen (r));
         text[strlen (text) - 1] = '\0';
-        compressed = g_strcompress (text);
-
-        lightdm_greeter_respond (greeter, compressed);
-
-        g_free (compressed);
+        lightdm_greeter_respond (greeter, text);
         g_free (text);
     }
     g_free (r);