]> granicus.if.org Git - curl/commitdiff
smtp: Fixed response code parsing for bad AUTH continuation responses
authorSteve Holme <steve_holme@hotmail.com>
Sat, 26 Oct 2013 10:09:31 +0000 (11:09 +0100)
committerSteve Holme <steve_holme@hotmail.com>
Sat, 26 Oct 2013 10:09:31 +0000 (11:09 +0100)
This workaround had been previously been implemented for IMAP and POP3
but not SMTP. Some of the recent test case additions implemented this
behaviour to emulate a bad server and the SMTP code didn't cope with it.

lib/smtp.c

index f82c8aac2a96664da86943269e946ad45ac5aa29..a5b3bf8c664d10cb3f768d3096e57942d9511b2e 100644 (file)
@@ -234,8 +234,11 @@ static bool smtp_endofresp(struct connectdata *conn, char *line, size_t len,
   if(len < 4 || !ISDIGIT(line[0]) || !ISDIGIT(line[1]) || !ISDIGIT(line[2]))
     return FALSE;       /* Nothing for us */
 
-  /* Do we have a command response? */
-  result = (line[3] == ' ') ? TRUE : FALSE;
+  /* Do we have a command response? This should be the response code followed
+     by a space and optionally some text as per RFC-5321 and as outlined in
+     Section 4. Examples of RFC-4954 but some e-mail servers ignore this and
+     only send the response code instead. */
+  result = (line[3] == ' ' || len == 5) ? TRUE : FALSE;
   if(result)
     *resp = curlx_sltosi(strtol(line, NULL, 10));