aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/ftp.c3
-rw-r--r--lib/url.c7
-rw-r--r--lib/urldata.h1
3 files changed, 9 insertions, 2 deletions
diff --git a/lib/ftp.c b/lib/ftp.c
index 43ea99801..471bd6edf 100644
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -1080,7 +1080,8 @@ CURLcode ftp_use_port(struct connectdata *conn)
return CURLE_FTP_PORT_FAILED;
}
- for (modep = (char **)mode; modep && *modep; modep++) {
+ for (modep = (char **)(data->set.ftp_use_eprt?&mode[0]:&mode[2]);
+ modep && *modep; modep++) {
int lprtaf, eprtaf;
int alen=0, plen=0;
diff --git a/lib/url.c b/lib/url.c
index e01711413..0cb690c0c 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -284,6 +284,7 @@ CURLcode Curl_open(struct SessionHandle **curl)
data->set.httpreq = HTTPREQ_GET; /* Default HTTP request */
data->set.ftp_use_epsv = TRUE; /* FTP defaults to EPSV operations */
+ data->set.ftp_use_eprt = TRUE; /* FTP defaults to EPRT operations */
data->set.dns_cache_timeout = 60; /* Timeout every 60 seconds by default */
@@ -634,10 +635,14 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option, ...)
data->set.ftp_use_port = data->set.ftpport?1:0;
break;
+ case CURLOPT_FTP_USE_EPRT:
+ data->set.ftp_use_eprt = va_arg(param, long)?TRUE:FALSE;
+ break;
+
case CURLOPT_FTP_USE_EPSV:
data->set.ftp_use_epsv = va_arg(param, long)?TRUE:FALSE;
break;
-
+
case CURLOPT_HTTPHEADER:
/*
* Set a list with HTTP headers to use (or replace internals with)
diff --git a/lib/urldata.h b/lib/urldata.h
index 04a057013..293fee984 100644
--- a/lib/urldata.h
+++ b/lib/urldata.h
@@ -759,6 +759,7 @@ struct UserDefined {
bool reuse_fresh; /* do not re-use an existing connection */
bool expect100header; /* TRUE if we added Expect: 100-continue */
bool ftp_use_epsv; /* if EPSV is to be attempted or not */
+ bool ftp_use_eprt; /* if EPRT is to be attempted or not */
bool no_signal; /* do not use any signal/alarm handler */
bool global_dns_cache;