aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Holme <steve_holme@hotmail.com>2012-05-22 22:08:25 +0100
committerSteve Holme <steve_holme@hotmail.com>2012-05-22 22:08:25 +0100
commitef60fdbd7367ea97446e7e2ed7ac91d411265431 (patch)
treecd8c5373a57224b085977361adb97ebea77e8fb3
parentb1f081f6e65576a9f824182ca47873a75e1f9e0d (diff)
smtp: Fixed an issue with the multi-interface always sending postdata
Due to the result code being reset to CURLE_OK when smtp_dophase_done() was called, postdata would incorrectly be sent to the server when the MAIL FROM or RCPT command was rejected. As such, libcurl would return the wrong result code from performing the operation and additionally set CURLINFO_RESPONSE_CODE to be that returned by the postdata command. Bug: http://curl.haxx.se/mail/lib-2012-05/0108.html Reported by: Gokhan Sengun
-rw-r--r--lib/smtp.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/lib/smtp.c b/lib/smtp.c
index aa4f6bd39..5b2d9d38d 100644
--- a/lib/smtp.c
+++ b/lib/smtp.c
@@ -1840,14 +1840,15 @@ static CURLcode smtp_dophase_done(struct connectdata *conn, bool connected)
/* called from multi.c while DOing */
static CURLcode smtp_doing(struct connectdata *conn, bool *dophase_done)
{
- CURLcode result;
- result = smtp_multi_statemach(conn, dophase_done);
-
- if(*dophase_done) {
- result = smtp_dophase_done(conn, FALSE /* not connected */);
+ CURLcode result = smtp_multi_statemach(conn, dophase_done);
+ if(result)
+ DEBUGF(infof(conn->data, "DO phase failed\n"));
+ else
DEBUGF(infof(conn->data, "DO phase is complete\n"));
- }
+
+ if(*dophase_done)
+ smtp_dophase_done(conn, FALSE /* not connected */);
return result;
}