From 62bd21746443f631e7b47f675aa80b3f0786a805 Mon Sep 17 00:00:00 2001 From: Steve Holme Date: Sat, 9 Feb 2013 14:32:20 +0000 Subject: smtp: Fixed an issue when processing EHLO failure responses (Part 2) Follow up fix to commit 23d17190ee32 as EHLO capabilities can exist within a positive response line. --- lib/smtp.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/smtp.c b/lib/smtp.c index fac03c94a..fd8d71226 100644 --- a/lib/smtp.c +++ b/lib/smtp.c @@ -213,19 +213,18 @@ static int smtp_endofresp(struct pingpong *pp, int *resp) size_t len = strlen(pp->linestart_resp); struct connectdata *conn = pp->conn; struct smtp_conn *smtpc = &conn->proto.smtpc; + int result = FALSE; size_t wordlen; if(len < 4 || !ISDIGIT(line[0]) || !ISDIGIT(line[1]) || !ISDIGIT(line[2])) return FALSE; /* Nothing for us */ /* Do we have a command response? */ - if(line[3] == ' ') { + if((result = (line[3] == ' ')) != 0) *resp = curlx_sltosi(strtol(line, NULL, 10)); - return TRUE; - } /* Are we processing EHLO command data? */ - if(smtpc->state == SMTP_EHLO) { + if(smtpc->state == SMTP_EHLO && (!result || (result && *resp == 250))) { line += 4; len -= 4; @@ -281,7 +280,7 @@ static int smtp_endofresp(struct pingpong *pp, int *resp) } } - return FALSE; + return result; } /* This is the ONLY way to change SMTP state! */ -- cgit v1.2.3