smtp.c: Fixed failure detection during TLS upgrade

smtp_state_upgrade_tls() would attempt to incorrectly complete the
upgrade to smtps and start the EHLO command if
Curl_ssl_connect_nonblocking() returned a failure code and if ssldone
was set to TRUE. This would only happen when a non-blocking API hadn't
been provided by the SSL implementation and curlssl_connect() was
called underneath.
This commit is contained in:
Steve Holme 2013-01-24 20:27:43 +00:00
parent 8b275718e2
commit f8ba1273af
1 changed files with 9 additions and 6 deletions

View File

@ -490,10 +490,8 @@ static CURLcode smtp_state_starttls_resp(struct connectdata *conn,
else
result = smtp_authenticate(conn);
}
else {
state(conn, SMTP_UPGRADETLS);
else
result = smtp_state_upgrade_tls(conn);
}
return result;
}
@ -505,9 +503,14 @@ static CURLcode smtp_state_upgrade_tls(struct connectdata *conn)
result = Curl_ssl_connect_nonblocking(conn, FIRSTSOCKET, &smtpc->ssldone);
if(smtpc->ssldone) {
smtp_to_smtps(conn);
result = smtp_state_ehlo(conn);
if(!result) {
if(smtpc->state != SMTP_UPGRADETLS)
state(conn, SMTP_UPGRADETLS);
if(smtpc->ssldone) {
smtp_to_smtps(conn);
result = smtp_state_ehlo(conn);
}
}
return result;