diff --git a/CHANGES b/CHANGES index df65c2737086d8064766575e792c8de40b18f04e..88771532d031f9b3c84c086aad9a93c98102c721 100644 --- a/CHANGES +++ b/CHANGES @@ -6,6 +6,10 @@ Changelog +Daniel S (1 July 2007) +- Song Ma helped me verify and extend a fix for doing FTP over a SOCKS4/5 + proxy. + Daniel S (27 June 2007) - James Housley: Add two new options for the SFTP/SCP/FILE protocols: CURLOPT_NEW_FILE_PERMS and CURLOPT_NEW_DIRECTORY_PERMS. These control the diff --git a/RELEASE-NOTES b/RELEASE-NOTES index 085748017400b707c07feef47a3e0c6adb1e5624..134144e905ffd8c4f7a9192148705572ff44c601 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -19,6 +19,7 @@ This release includes the following bugfixes: o adjusted how libcurl treats HTTP 1.1 responses without content-lenth or chunked encoding o fixed the 10-at-a-time.c example + o FTP over SOCKS proxy This release includes the following known bugs: @@ -35,6 +36,6 @@ New curl mirrors: This release would not have looked like this without help, code, reports and advice from friends like these: - Robert Iakobashvili, James Housley, Günter Knauf, James Bursa + Robert Iakobashvili, James Housley, Günter Knauf, James Bursa, Song Ma Thanks! (and sorry if I forgot to mention someone) diff --git a/lib/ftp.c b/lib/ftp.c index 2e0740f64b0305a073136078962690ea9b70431c..5e04b7e81c61ba903d3214b061eb0ec1bc3ae309 100644 --- a/lib/ftp.c +++ b/lib/ftp.c @@ -1610,7 +1610,9 @@ static CURLcode ftp_state_pasv_resp(struct connectdata *conn, if(ptr) { newport = (unsigned short)(num & 0xffff); - if (conn->bits.tunnel_proxy) + if (conn->bits.tunnel_proxy || + data->set.proxytype == CURLPROXY_SOCKS5 || + data->set.proxytype == CURLPROXY_SOCKS4) /* 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); @@ -1662,7 +1664,9 @@ 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); - if (conn->bits.tunnel_proxy) + if (conn->bits.tunnel_proxy || + data->set.proxytype == CURLPROXY_SOCKS5 || + data->set.proxytype == CURLPROXY_SOCKS4) /* 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);