diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/ftp.c | 16 |
1 files changed, 13 insertions, 3 deletions
@@ -1543,8 +1543,13 @@ static CURLcode ftp_state_pasv_resp(struct connectdata *conn, if(ptr) { newport = num; - /* use the same IP we are already connected to */ - snprintf(newhost, NEWHOST_BUFSIZE, "%s", conn->ip_addr_str); + if (conn->bits.tunnel_proxy) + /* proxy tunnel -> use other host info because ip_addr_str is the + proxy address not the ftp host */ + snprintf(newhost, sizeof(newhost), "%s", conn->host.name); + else + /* use the same IP we are already connected to */ + snprintf(newhost, NEWHOST_BUFSIZE, "%s", conn->ip_addr_str); } } else @@ -1590,7 +1595,12 @@ static CURLcode ftp_state_pasv_resp(struct connectdata *conn, 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); + if (conn->bits.tunnel_proxy) + /* proxy tunnel -> use other host info because ip_addr_str is the + proxy address not the ftp host */ + snprintf(newhost, sizeof(newhost), "%s", conn->host.name); + else + snprintf(newhost, sizeof(newhost), "%s", conn->ip_addr_str); } else snprintf(newhost, sizeof(newhost), |