[gnome-online-accounts/gnome-3-8] smtp-auth-plain: Handle multiline SMTP greetings
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-online-accounts/gnome-3-8] smtp-auth-plain: Handle multiline SMTP greetings
- Date: Wed, 19 Jun 2013 11:36:29 +0000 (UTC)
commit 2210bf547dc35adacbc95c0dcf4abe75a73a8368
Author: Debarshi Ray <debarshir gnome org>
Date: Tue Jun 18 17:27:55 2013 +0200
smtp-auth-plain: Handle multiline SMTP greetings
Fixes: https://bugzilla.gnome.org/702263
src/goabackend/goasmtpauthplain.c | 52 +++++++++++++++++++++++++-----------
1 files changed, 36 insertions(+), 16 deletions(-)
---
diff --git a/src/goabackend/goasmtpauthplain.c b/src/goabackend/goasmtpauthplain.c
index bb783bd..77324cf 100644
--- a/src/goabackend/goasmtpauthplain.c
+++ b/src/goabackend/goasmtpauthplain.c
@@ -167,6 +167,40 @@ smtp_auth_plain_check_454 (const gchar *response, GError **error)
/* ---------------------------------------------------------------------------------------------------- */
+static gboolean
+smtp_auth_plain_check_greeting (GDataInputStream *input, GCancellable *cancellable, GError **error)
+{
+ gboolean ret;
+ gchar *response;
+
+ response = NULL;
+ ret = FALSE;
+
+ greeting_again:
+ response = g_data_input_stream_read_line (input, NULL, cancellable, error);
+ if (response == NULL)
+ goto out;
+ g_debug ("< %s", response);
+ if (smtp_auth_plain_check_421 (response, error))
+ goto out;
+ if (smtp_auth_plain_check_not_220 (response, error))
+ goto out;
+
+ if (response[3] == '-')
+ {
+ g_clear_pointer (&response, g_free);
+ goto greeting_again;
+ }
+
+ ret = TRUE;
+
+ out:
+ g_free (response);
+ return ret;
+}
+
+/* ---------------------------------------------------------------------------------------------------- */
+
static gchar *
smtp_auth_plain_get_domain (GoaSmtpAuthPlain *auth,
GError **error)
@@ -563,15 +597,8 @@ goa_smtp_auth_plain_run_sync (GoaMailAuth *_auth,
if (!auth->greeting_absent)
{
- response = g_data_input_stream_read_line (input, NULL, cancellable, error);
- if (response == NULL)
- goto out;
- g_debug ("< %s", response);
- if (smtp_auth_plain_check_421 (response, error))
+ if (!smtp_auth_plain_check_greeting (input, cancellable, error))
goto out;
- if (smtp_auth_plain_check_not_220 (response, error))
- goto out;
- g_clear_pointer (&response, g_free);
}
/* Send EHLO */
@@ -685,15 +712,8 @@ goa_smtp_auth_plain_starttls_sync (GoaMailAuth *_auth,
/* Check the greeting */
- response = g_data_input_stream_read_line (input, NULL, cancellable, error);
- if (response == NULL)
- goto out;
- g_debug ("< %s", response);
- if (smtp_auth_plain_check_421 (response, error))
+ if (!smtp_auth_plain_check_greeting (input, cancellable, error))
goto out;
- if (smtp_auth_plain_check_not_220 (response, error))
- goto out;
- g_clear_pointer (&response, g_free);
/* Send EHLO */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]