diff options
author | Daniel Stenberg <daniel@haxx.se> | 2005-09-04 05:16:06 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2005-09-04 05:16:06 +0000 |
commit | 7e845e7cfdd658caccc60f687d5d5d68d7e88937 (patch) | |
tree | f5937f8827f2f1f9ea2073dd640545045a17c459 /lib | |
parent | 56d9624b566ac15ffb4b4b6eef220a5000b767e0 (diff) |
Added FTP_SKIP_PASV_IP and --ftp-skip-pasv-ip
Diffstat (limited to 'lib')
-rw-r--r-- | lib/ftp.c | 16 | ||||
-rw-r--r-- | lib/url.c | 10 | ||||
-rw-r--r-- | lib/urldata.h | 3 |
3 files changed, 23 insertions, 6 deletions
@@ -1601,8 +1601,18 @@ static CURLcode ftp_state_pasv_resp(struct connectdata *conn, return CURLE_FTP_WEIRD_227_FORMAT; } - snprintf(newhost, sizeof(newhost), - "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]); + /* we got OK from server */ + if(data->set.ftp_skip_ip) { + /* told to ignore the remotely given IP but instead use the one we used + for the control connection */ + infof(data, "Skips %d.%d.%d.%d for data connection, uses %s instead\n", + ip[0], ip[1], ip[2], ip[3], + conn->ip_addr_str); + snprintf(newhost, sizeof(newhost), "%s", conn->ip_addr_str); + } + else + snprintf(newhost, sizeof(newhost), + "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]); newport = (port[0]<<8) + port[1]; } else if(ftp->count1 == 0) { @@ -1622,8 +1632,6 @@ static CURLcode ftp_state_pasv_resp(struct connectdata *conn, return CURLE_FTP_WEIRD_PASV_REPLY; } - /* we got OK from server */ - if(data->change.proxy && *data->change.proxy) { /* * This is a tunnel through a http proxy and we need to connect to the @@ -965,6 +965,14 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option, data->set.ftp_use_epsv = va_arg(param, long)?TRUE:FALSE; break; + case CURLOPT_FTP_SKIP_PASV_IP: + /* + * Enable or disable FTP_SKIP_PASV_IP, which will disable/enable the + * bypass of the IP address in PASV responses. + */ + data->set.ftp_skip_ip = (bool)va_arg(param, long); + break; + case CURLOPT_INFILE: /* * FILE pointer to read the file to be uploaded from. Or possibly @@ -1240,7 +1248,7 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option, /* * Set a SSL_CTX callback */ - data->set.ssl.fsslctx = va_arg(param, curl_ssl_ctx_callback); + data->set.ssl.fsslctx = va_arg(param, curl_ssl_ctx_callback); break; case CURLOPT_SSL_CTX_DATA: /* diff --git a/lib/urldata.h b/lib/urldata.h index 3436b17da..ff0b23a54 100644 --- a/lib/urldata.h +++ b/lib/urldata.h @@ -1072,8 +1072,9 @@ struct UserDefined { bool no_signal; /* do not use any signal/alarm handler */ bool global_dns_cache; /* subject for future removal */ bool tcp_nodelay; /* whether to enable TCP_NODELAY or not */ - bool ignorecl; /* ignore content length */ + bool ftp_skip_ip; /* skip the IP address the FTP server passes on to + us */ }; /* |