summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorSteve Holme <steve_holme@hotmail.com>2013-02-10 12:19:10 +0000
committerSteve Holme <steve_holme@hotmail.com>2013-02-10 12:19:10 +0000
commitc76cb3da047790a1c1fc0f0361feee410515a1e4 (patch)
tree9a39091a0f16f54af6a467a03a133d97fb6fb6cc /lib
parent2f66ca11c1aaa85343cedeccdfa9804614500b58 (diff)
downloadcurl-c76cb3da047790a1c1fc0f0361feee410515a1e4.tar.gz
smtp: Added support for the STLS capability (Part One)
Introduced detection of the STARTTLS capability, in order to add support for TLS upgrades without unconditionally sending the STARTTLS command.
Diffstat (limited to 'lib')
-rw-r--r--lib/smtp.c7
-rw-r--r--lib/smtp.h1
2 files changed, 7 insertions, 1 deletions
diff --git a/lib/smtp.c b/lib/smtp.c
index dd08575be..6b4f88559 100644
--- a/lib/smtp.c
+++ b/lib/smtp.c
@@ -228,8 +228,12 @@ static int smtp_endofresp(struct pingpong *pp, int *resp)
line += 4;
len -= 4;
+ /* Does the server support the STARTTLS capability? */
+ if(len >= 8 && !memcmp(line, "STARTTLS", 8))
+ smtpc->tls_supported = TRUE;
+
/* Does the server support the SIZE capability? */
- if(len >= 4 && !memcmp(line, "SIZE", 4))
+ else if(len >= 4 && !memcmp(line, "SIZE", 4))
smtpc->size_supported = TRUE;
/* Do we have the authentication mechanism list? */
@@ -237,6 +241,7 @@ static int smtp_endofresp(struct pingpong *pp, int *resp)
line += 5;
len -= 5;
+ /* Loop through the data line */
for(;;) {
while(len &&
(*line == ' ' || *line == '\t' ||
diff --git a/lib/smtp.h b/lib/smtp.h
index cb3ef5854..514e6eb8a 100644
--- a/lib/smtp.h
+++ b/lib/smtp.h
@@ -65,6 +65,7 @@ struct smtp_conn {
smtpstate state; /* Always use smtp.c:state() to change state! */
struct curl_slist *rcpt; /* Recipient list */
bool ssldone; /* Is connect() over SSL done? */
+ bool tls_supported; /* StartTLS capability supported by server */
bool size_supported; /* If server supports SIZE extension according to
RFC 1870 */
};