diff options
Diffstat (limited to 'lib/smtp.c')
-rw-r--r-- | lib/smtp.c | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/lib/smtp.c b/lib/smtp.c index 95e71d75a..c02c9bdd4 100644 --- a/lib/smtp.c +++ b/lib/smtp.c @@ -893,6 +893,7 @@ static CURLcode smtp_state_auth_resp(struct connectdata *conn, static CURLcode smtp_mail(struct connectdata *conn) { char *from = NULL; + char *auth = NULL; char *size = NULL; CURLcode result = CURLE_OK; struct SessionHandle *data = conn->data; @@ -909,26 +910,49 @@ static CURLcode smtp_mail(struct connectdata *conn) if(!from) return CURLE_OUT_OF_MEMORY; + /* calculate the optional AUTH parameter */ + if(data->set.str[STRING_MAIL_AUTH] && conn->proto.smtpc.authused) { + if(data->set.str[STRING_MAIL_AUTH][0] == '<') + auth = aprintf("%s", data->set.str[STRING_MAIL_AUTH]); + else + auth = aprintf("<%s>", data->set.str[STRING_MAIL_AUTH]); + + if(!auth) { + Curl_safefree(from); + + return CURLE_OUT_OF_MEMORY; + } + } + /* calculate the optional SIZE parameter */ if(conn->data->set.infilesize > 0) { size = aprintf("%" FORMAT_OFF_T, data->set.infilesize); if(!size) { Curl_safefree(from); + Curl_safefree(auth); return CURLE_OUT_OF_MEMORY; } } /* send MAIL FROM */ - if(!size) - result = Curl_pp_sendf(&conn->proto.smtpc.pp, "MAIL FROM:%s", from); + if(!auth && !size) + result = Curl_pp_sendf(&conn->proto.smtpc.pp, + "MAIL FROM:%s", from); + else if(auth && !size) + result = Curl_pp_sendf(&conn->proto.smtpc.pp, + "MAIL FROM:%s AUTH=%s", from, auth); + else if(auth && size) + result = Curl_pp_sendf(&conn->proto.smtpc.pp, + "MAIL FROM:%s AUTH=%s SIZE=%s", from, auth, size); else - result = Curl_pp_sendf(&conn->proto.smtpc.pp, "MAIL FROM:%s SIZE=%s", - from, size); + result = Curl_pp_sendf(&conn->proto.smtpc.pp, + "MAIL FROM:%s SIZE=%s", from, size); - Curl_safefree(size); Curl_safefree(from); + Curl_safefree(auth); + Curl_safefree(size); if(result) return result; @@ -1308,7 +1332,7 @@ static CURLcode smtp_connect(struct connectdata *conn, pp->conn = conn; if(!*path) { - if(!Curl_gethostname(localhost, sizeof localhost)) + if(!Curl_gethostname(localhost, sizeof(localhost))) path = localhost; else path = "localhost"; |