summaryrefslogtreecommitdiffstats
path: root/imap/auth_sasl.c
diff options
context:
space:
mode:
Diffstat (limited to 'imap/auth_sasl.c')
-rw-r--r--imap/auth_sasl.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/imap/auth_sasl.c b/imap/auth_sasl.c
index 946500ec..5e01331b 100644
--- a/imap/auth_sasl.c
+++ b/imap/auth_sasl.c
@@ -31,7 +31,7 @@ imap_auth_res_t imap_auth_sasl (IMAP_DATA* idata)
{
sasl_conn_t* saslconn;
sasl_interact_t* interaction = NULL;
- int rc;
+ int rc, irc;
char buf[LONG_STRING];
const char* mech;
char* pc;
@@ -92,27 +92,27 @@ imap_auth_res_t imap_auth_sasl (IMAP_DATA* idata)
snprintf (buf, sizeof (buf), "AUTHENTICATE %s", mech);
imap_cmd_start (idata, buf);
+ irc = IMAP_CMD_CONTINUE;
/* looping protocol */
while (rc == SASL_CONTINUE)
{
- if (mutt_socket_readln (buf, sizeof (buf), idata->conn) < 0)
+ do
+ irc = imap_cmd_resp (idata);
+ while (irc == IMAP_CMD_CONTINUE);
+
+ if (irc == IMAP_CMD_FAIL)
goto bail;
- if (!mutt_strncmp (buf, "+ ", 2))
+ if (irc == IMAP_CMD_RESPOND)
{
- if (sasl_decode64 (buf+2, strlen (buf+2), buf, &len) != SASL_OK)
+ if (sasl_decode64 (idata->buf+2, strlen (idata->buf+2), buf, &len) !=
+ SASL_OK)
{
dprint (1, (debugfile, "imap_auth_sasl: error base64-decoding server response.\n"));
goto bail;
}
}
- else if ((buf[0] == '*'))
- {
- if (imap_handle_untagged (idata, buf))
- goto bail;
- else continue;
- }
if (!client_start)
do
@@ -146,14 +146,14 @@ imap_auth_res_t imap_auth_sasl (IMAP_DATA* idata)
}
}
- while (mutt_strncmp (buf, idata->seq, SEQLEN))
- if (mutt_socket_readln (buf, sizeof (buf), idata->conn) < 0)
- goto bail;
+ while (irc != IMAP_CMD_DONE)
+ if ((irc = imap_cmd_resp (idata)) != IMAP_CMD_CONTINUE)
+ break;
if (rc != SASL_OK)
goto bail;
- if (imap_code (buf))
+ if (imap_code (idata->buf))
{
mutt_sasl_setup_conn (idata->conn, saslconn);
return IMAP_AUTH_SUCCESS;