aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/smtp.c143
1 files changed, 72 insertions, 71 deletions
diff --git a/lib/smtp.c b/lib/smtp.c
index 75b008ef2..6d99d36dd 100644
--- a/lib/smtp.c
+++ b/lib/smtp.c
@@ -111,7 +111,6 @@ static CURLcode smtp_doing(struct connectdata *conn,
static CURLcode smtp_setup_connection(struct connectdata * conn);
static CURLcode smtp_state_upgrade_tls(struct connectdata *conn);
-
/*
* SMTP protocol handler.
*/
@@ -135,7 +134,6 @@ const struct Curl_handler Curl_handler_smtp = {
PROTOPT_CLOSEACTION /* flags */
};
-
#ifdef USE_SSL
/*
* SMTPS protocol handler.
@@ -185,7 +183,6 @@ static const struct Curl_handler Curl_handler_smtp_proxy = {
PROTOPT_NONE /* flags */
};
-
#ifdef USE_SSL
/*
* HTTP-proxyed SMTPS protocol handler.
@@ -212,7 +209,6 @@ static const struct Curl_handler Curl_handler_smtps_proxy = {
#endif
#endif
-
/* Function that checks for an ending smtp status code at the start of the
given string.
As a side effect, it also flags allowed authentication mechanisms according
@@ -388,64 +384,61 @@ static CURLcode smtp_authenticate(struct connectdata *conn)
{
CURLcode result = CURLE_OK;
struct smtp_conn *smtpc = &conn->proto.smtpc;
- char * initresp;
- const char * mech;
- size_t l;
- smtpstate state1;
- smtpstate state2;
-
- if(!conn->bits.user_passwd)
- state(conn, SMTP_STOP); /* End of connect phase. */
- else {
- initresp = (char *) NULL;
- l = 1;
+ char *initresp = NULL;
+ const char *mech = NULL;
+ size_t len = 0;
+ smtpstate state1 = SMTP_STOP;
+ smtpstate state2 = SMTP_STOP;
+
+ /* Check we have a username and password to authenticate with and end the
+ connect phase if we don't. */
+ if(!conn->bits.user_passwd) {
+ state(conn, SMTP_STOP);
- /* Check supported authentication mechanisms by decreasing order of
- security. */
- mech = (const char *) NULL; /* Avoid compiler warnings. */
- state1 = SMTP_STOP;
- state2 = SMTP_STOP;
+ return result;
+ }
+ /* Check supported authentication mechanisms by decreasing order of
+ security. */
#ifndef CURL_DISABLE_CRYPTO_AUTH
- if(smtpc->authmechs & SMTP_AUTH_CRAM_MD5) {
- mech = "CRAM-MD5";
- state1 = SMTP_AUTHCRAM;
- }
- else
+ if(smtpc->authmechs & SMTP_AUTH_CRAM_MD5) {
+ mech = "CRAM-MD5";
+ state1 = SMTP_AUTHCRAM;
+ }
+ else
#endif
- if(smtpc->authmechs & SMTP_AUTH_LOGIN) {
- mech = "LOGIN";
- state1 = SMTP_AUTHLOGIN;
- state2 = SMTP_AUTHPASSWD;
- result = smtp_auth_login_user(conn, &initresp, &l);
- }
- else if(smtpc->authmechs & SMTP_AUTH_PLAIN) {
- mech = "PLAIN";
- state1 = SMTP_AUTHPLAIN;
- state2 = SMTP_AUTH;
- result = smtp_auth_plain_data(conn, &initresp, &l);
- }
- else {
- infof(conn->data, "No known auth mechanisms supported!\n");
- result = CURLE_LOGIN_DENIED; /* Other mechanisms not supported. */
- }
+ if(smtpc->authmechs & SMTP_AUTH_LOGIN) {
+ mech = "LOGIN";
+ state1 = SMTP_AUTHLOGIN;
+ state2 = SMTP_AUTHPASSWD;
+ result = smtp_auth_login_user(conn, &initresp, &len);
+ }
+ else if(smtpc->authmechs & SMTP_AUTH_PLAIN) {
+ mech = "PLAIN";
+ state1 = SMTP_AUTHPLAIN;
+ state2 = SMTP_AUTH;
+ result = smtp_auth_plain_data(conn, &initresp, &len);
+ }
+ else {
+ infof(conn->data, "No known auth mechanisms supported!\n");
+ result = CURLE_LOGIN_DENIED; /* Other mechanisms not supported. */
+ }
- if(!result) {
- if(initresp &&
- l + strlen(mech) <= 512 - 8) { /* AUTH <mech> ...<crlf> */
- result = Curl_pp_sendf(&smtpc->pp, "AUTH %s %s", mech, initresp);
+ if(!result) {
+ if(initresp &&
+ strlen(mech) + len <= 512 - 8) { /* AUTH <mech> ...<crlf> */
+ result = Curl_pp_sendf(&smtpc->pp, "AUTH %s %s", mech, initresp);
- if(!result)
- state(conn, state2);
- }
- else {
- result = Curl_pp_sendf(&smtpc->pp, "AUTH %s", mech);
+ if(!result)
+ state(conn, state2);
+ }
+ else {
+ result = Curl_pp_sendf(&smtpc->pp, "AUTH %s", mech);
- if(!result)
- state(conn, state1);
- }
- Curl_safefree(initresp);
+ if(!result)
+ state(conn, state1);
}
+ Curl_safefree(initresp);
}
return result;
@@ -498,6 +491,7 @@ static CURLcode smtp_state_starttls_resp(struct connectdata *conn,
}
}
}
+
return result;
}
@@ -565,6 +559,7 @@ static CURLcode smtp_state_helo_resp(struct connectdata *conn,
/* end the connect phase */
state(conn, SMTP_STOP);
}
+
return result;
}
@@ -575,8 +570,8 @@ static CURLcode smtp_state_authplain_resp(struct connectdata *conn,
{
CURLcode result = CURLE_OK;
struct SessionHandle *data = conn->data;
- size_t l = 0;
- char * plainauth = NULL;
+ size_t len = 0;
+ char *plainauth = NULL;
(void)instate; /* no use for this yet */
@@ -585,7 +580,7 @@ static CURLcode smtp_state_authplain_resp(struct connectdata *conn,
result = CURLE_LOGIN_DENIED;
}
else {
- result = smtp_auth_plain_data(conn, &plainauth, &l);
+ result = smtp_auth_plain_data(conn, &plainauth, &len);
if(!result) {
if(plainauth) {
@@ -608,8 +603,8 @@ static CURLcode smtp_state_authlogin_resp(struct connectdata *conn,
{
CURLcode result = CURLE_OK;
struct SessionHandle *data = conn->data;
- size_t l = 0;
- char * authuser = NULL;
+ size_t len = 0;
+ char *authuser = NULL;
(void)instate; /* no use for this yet */
@@ -618,7 +613,7 @@ static CURLcode smtp_state_authlogin_resp(struct connectdata *conn,
result = CURLE_LOGIN_DENIED;
}
else {
- result = smtp_auth_login_user(conn, &authuser, &l);
+ result = smtp_auth_login_user(conn, &authuser, &len);
if(!result) {
if(authuser) {
@@ -642,7 +637,7 @@ static CURLcode smtp_state_authpasswd_resp(struct connectdata *conn,
CURLcode result = CURLE_OK;
struct SessionHandle *data = conn->data;
size_t plen;
- size_t l = 0;
+ size_t len = 0;
char *authpasswd = NULL;
(void)instate; /* no use for this yet */
@@ -657,7 +652,7 @@ static CURLcode smtp_state_authpasswd_resp(struct connectdata *conn,
if(!plen)
result = Curl_pp_sendf(&conn->proto.smtpc.pp, "=");
else {
- result = Curl_base64_encode(data, conn->passwd, plen, &authpasswd, &l);
+ result = Curl_base64_encode(data, conn->passwd, plen, &authpasswd, &len);
if(!result) {
if(authpasswd) {
@@ -686,9 +681,9 @@ static CURLcode smtp_state_authcram_resp(struct connectdata *conn,
char * chlg64 = data->state.buffer;
unsigned char * chlg;
size_t chlglen;
- size_t l = 0;
- char * rplyb64 = NULL;
- HMAC_context * ctxt;
+ size_t len = 0;
+ char *rplyb64 = NULL;
+ HMAC_context *ctxt;
unsigned char digest[16];
char reply[MAX_CURL_USER_LENGTH + 32 /* 2 * size of MD5 digest */ + 1];
@@ -707,13 +702,13 @@ static CURLcode smtp_state_authcram_resp(struct connectdata *conn,
chlglen = 0;
if(*chlg64 != '=') {
- for(l = strlen(chlg64); l--;)
- if(chlg64[l] != '\r' && chlg64[l] != '\n' && chlg64[l] != ' ' &&
- chlg64[l] != '\t')
+ for(len = strlen(chlg64); len--;)
+ if(chlg64[len] != '\r' && chlg64[len] != '\n' && chlg64[len] != ' ' &&
+ chlg64[len] != '\t')
break;
- if(++l) {
- chlg64[l] = '\0';
+ if(++len) {
+ chlg64[len] = '\0';
result = Curl_base64_decode(chlg64, &chlg, &chlglen);
if(result)
@@ -747,7 +742,7 @@ static CURLcode smtp_state_authcram_resp(struct connectdata *conn,
digest[12], digest[13], digest[14], digest[15]);
/* Encode it to base64 and send it. */
- result = Curl_base64_encode(data, reply, 0, &rplyb64, &l);
+ result = Curl_base64_encode(data, reply, 0, &rplyb64, &len);
if(!result) {
if(rplyb64) {
@@ -849,6 +844,7 @@ static CURLcode smtp_rcpt_to(struct connectdata *conn)
if(!result)
state(conn, SMTP_RCPT);
}
+
return result;
}
@@ -909,6 +905,7 @@ static CURLcode smtp_state_rcpt_resp(struct connectdata *conn,
state(conn, SMTP_DATA);
}
+
return result;
}
@@ -949,6 +946,7 @@ static CURLcode smtp_state_postdata_resp(struct connectdata *conn,
result = CURLE_RECV_ERROR;
state(conn, SMTP_STOP);
+
return result;
}
@@ -1046,6 +1044,7 @@ static CURLcode smtp_statemach_act(struct connectdata *conn)
break;
}
}
+
return result;
}
@@ -1440,6 +1439,7 @@ static CURLcode smtp_doing(struct connectdata *conn,
DEBUGF(infof(conn->data, "DO phase is complete\n"));
}
+
return result;
}
@@ -1579,6 +1579,7 @@ CURLcode Curl_smtp_escape_eob(struct connectdata *conn, ssize_t nread)
/* set the new amount too */
data->req.upload_present = nread;
}
+
return CURLE_OK;
}