diff --git a/lib/smtp.c b/lib/smtp.c
index e95a2576e..5dd90298b 100644
--- a/lib/smtp.c
+++ b/lib/smtp.c
@@ -248,11 +248,10 @@ static void state(struct connectdata *conn,
static CURLcode smtp_state_ehlo(struct connectdata *conn)
{
CURLcode result;
- struct FTP *smtp = conn->data->state.proto.smtp;
+ struct smtp_conn *smtpc = &conn->proto.smtpc;
/* send EHLO */
- result = Curl_pp_sendf(&conn->proto.smtpc.pp, "EHLO %s",
- smtp->user?smtp->user:"");
+ result = Curl_pp_sendf(&conn->proto.smtpc.pp, "EHLO %s", smtpc->domain);
if(result)
return result;
@@ -545,6 +544,8 @@ static CURLcode smtp_connect(struct connectdata *conn,
struct smtp_conn *smtpc = &conn->proto.smtpc;
struct SessionHandle *data=conn->data;
struct pingpong *pp=&smtpc->pp;
+ const char *path = conn->data->state.path;
+ int len;
*done = FALSE; /* default to not done yet */
@@ -609,6 +610,12 @@ static CURLcode smtp_connect(struct connectdata *conn,
pp->endofresp = smtp_endofresp;
pp->conn = conn;
+ if(!*path)
+ path = "localhost";
+
+ /* url decode the path and use it as domain with EHLO */
+ smtpc->domain = curl_easy_unescape(conn->data, path, 0, &len);
+
/* When we connect, we start in the state where we await the server greeting
*/
state(conn, SMTP_SERVERGREET);
@@ -801,12 +808,15 @@ static CURLcode smtp_dophase_done(struct connectdata *conn,
{
CURLcode result = CURLE_OK;
struct FTP *smtp = conn->data->state.proto.smtp;
+ struct smtp_conn *smtpc= &conn->proto.smtpc;
(void)connected;
if(smtp->transfer != FTPTRANSFER_BODY)
/* no data to transfer */
result=Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
+ free(smtpc->domain);
+
return result;
}
diff --git a/lib/smtp.h b/lib/smtp.h
index 31de99e23..a1115e23a 100644
--- a/lib/smtp.h
+++ b/lib/smtp.h
@@ -45,9 +45,9 @@ typedef enum {
struct */
struct smtp_conn {
struct pingpong pp;
- char *domain; /* what to send in the EHLO */
- int eob; /* number of bytes of the EOB (End Of Body) that has been
- received thus far */
+ char *domain; /* what to send in the EHLO */
+ int eob; /* number of bytes of the EOB (End Of Body) that has been
+ received thus far */
smtpstate state; /* always use smtp.c:state() to change state! */
};
diff --git a/tests/data/test802 b/tests/data/test802
index 59d2e8c1f..dedc1e1fd 100644
--- a/tests/data/test802
+++ b/tests/data/test802
@@ -26,7 +26,7 @@ To: another
body
-smtp://%HOSTIP:%SMTPPORT -u user:secret --mail-rcpt 802@foo --mail-from 802@from -T -
+smtp://%HOSTIP:%SMTPPORT/user --mail-rcpt 802@foo --mail-from 802@from -T -
diff --git a/tests/data/test803 b/tests/data/test803
index e6e48b5d2..f445e69cb 100644
--- a/tests/data/test803
+++ b/tests/data/test803
@@ -32,7 +32,7 @@ To: another
body
-smtp://%HOSTIP:%SMTPPORT -u user:secret --mail-rcpt 803@foo --mail-from 803@from -T -
+smtp://%HOSTIP:%SMTPPORT/user --mail-rcpt 803@foo --mail-from 803@from -T -