Loading CHANGES +4 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,10 @@ Changelog Daniel (19 February 2007) - Robson Braga Araujo made passive FTP transfers work with SOCKS (both 4 and 5). Daniel (18 February 2007) - Jeff Pohlmeyer identified two problems: first a rather obscure problem with the multi interface and connection re-use that could make a Loading RELEASE-NOTES +3 −2 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ This release includes the following bugfixes: o builds fine with VC2005 o CURLOPT_RANGE set to NULL resets the range for FTP o curl_multi_remove_handle() rare crash o passive FTP transfers work with SOCKS This release includes the following known bugs: Loading @@ -42,6 +43,6 @@ advice from friends like these: Yang Tse, Manfred Schwarb, Michael Wallner, Jeff Pohlmeyer, Shmulik Regev, Rob Crittenden, Robert A. Monat, Dan Fandrich, Duncan Mac-Vicar Prett, Michal Marek Michal Marek, Robson Braga Araujo Thanks! (and sorry if I forgot to mention someone) docs/KNOWN_BUGS +8 −5 Original line number Diff line number Diff line Loading @@ -64,11 +64,14 @@ may have been fixed since this was written! "system context" will make it use wrong(?) user name - at least when compared to what winhttp does. See http://curl.haxx.se/bug/view.cgi?id=1281867 23. We don't support SOCKS for IPv6. We don't support FTPS over a SOCKS proxy. We don't have any test cases for SOCKS proxy. We probably have even more bugs and lack of features when a SOCKS proxy is used. And there seem to be a problem with SOCKS when doing FTP: See http://curl.haxx.se/bug/view.cgi?id=1371540 23. SOCKS-related problems: A) libcurl doesn't support SOCKS for IPv6. B) libcurl doesn't support FTPS over a SOCKS proxy. C) We don't have any test cases for SOCKS proxy. E) libcurl doesn't support active FTP over a SOCKS proxy We probably have even more bugs and lack of features when a SOCKS proxy is used. 22. Sending files to a FTP server using curl on VMS, might lead to curl complaining on "unaligned file size" on completion. The problem is related Loading lib/ftp.c +17 −0 Original line number Diff line number Diff line Loading @@ -1737,6 +1737,23 @@ static CURLcode ftp_state_pasv_resp(struct connectdata *conn, /* this just dumps information about this second connection */ ftp_pasv_verbose(conn, conninfo, newhost, connectport); switch(data->set.proxytype) { case CURLPROXY_SOCKS5: result = Curl_SOCKS5(conn->proxyuser, conn->proxypasswd, newhost, newport, SECONDARYSOCKET, conn); break; case CURLPROXY_HTTP: /* do nothing here. handled later. */ break; case CURLPROXY_SOCKS4: result = Curl_SOCKS4(conn->proxyuser, newhost, newport, SECONDARYSOCKET, conn); break; default: failf(data, "unknown proxytype option given"); result = CURLE_COULDNT_CONNECT; break; } #ifndef CURL_DISABLE_HTTP if(conn->bits.tunnel_proxy && conn->bits.httpproxy) { /* FIX: this MUST wait for a proper connect first if 'connected' is Loading lib/socks.c +14 −8 Original line number Diff line number Diff line Loading @@ -108,12 +108,15 @@ static int blockread_all(struct connectdata *conn, /* connection data */ * Nonsupport "Identification Protocol (RFC1413)" */ CURLcode Curl_SOCKS4(const char *proxy_name, char *hostname, int remote_port, int sockindex, struct connectdata *conn) { unsigned char socksreq[262]; /* room for SOCKS4 request incl. user id */ int result; CURLcode code; curl_socket_t sock = conn->sock[FIRSTSOCKET]; curl_socket_t sock = conn->sock[sockindex]; long timeout; struct SessionHandle *data = conn->data; Loading Loading @@ -146,7 +149,7 @@ CURLcode Curl_SOCKS4(const char *proxy_name, socksreq[0] = 4; /* version (SOCKS4) */ socksreq[1] = 1; /* connect */ *((unsigned short*)&socksreq[2]) = htons(conn->remote_port); *((unsigned short*)&socksreq[2]) = htons(remote_port); /* DNS resolve */ { Loading @@ -154,7 +157,7 @@ CURLcode Curl_SOCKS4(const char *proxy_name, Curl_addrinfo *hp=NULL; int rc; rc = Curl_resolv(conn, conn->host.name, (int)conn->remote_port, &dns); rc = Curl_resolv(conn, hostname, remote_port, &dns); if(rc == CURLRESOLV_ERROR) return CURLE_COULDNT_RESOLVE_PROXY; Loading Loading @@ -190,7 +193,7 @@ CURLcode Curl_SOCKS4(const char *proxy_name, } if(!hp) { failf(data, "Failed to resolve \"%s\" for SOCKS4 connect.", conn->host.name); hostname); return CURLE_COULDNT_RESOLVE_HOST; } } Loading Loading @@ -312,6 +315,9 @@ CURLcode Curl_SOCKS4(const char *proxy_name, */ CURLcode Curl_SOCKS5(const char *proxy_name, const char *proxy_password, char *hostname, int remote_port, int sockindex, struct connectdata *conn) { /* Loading @@ -336,7 +342,7 @@ CURLcode Curl_SOCKS5(const char *proxy_name, ssize_t written; int result; CURLcode code; curl_socket_t sock = conn->sock[FIRSTSOCKET]; curl_socket_t sock = conn->sock[sockindex]; struct SessionHandle *data = conn->data; long timeout; Loading Loading @@ -507,7 +513,7 @@ CURLcode Curl_SOCKS5(const char *proxy_name, { struct Curl_dns_entry *dns; Curl_addrinfo *hp=NULL; int rc = Curl_resolv(conn, conn->host.name, (int)conn->remote_port, &dns); int rc = Curl_resolv(conn, hostname, remote_port, &dns); if(rc == CURLRESOLV_ERROR) return CURLE_COULDNT_RESOLVE_HOST; Loading Loading @@ -541,12 +547,12 @@ CURLcode Curl_SOCKS5(const char *proxy_name, } if(!hp) { failf(data, "Failed to resolve \"%s\" for SOCKS5 connect.", conn->host.name); hostname); return CURLE_COULDNT_RESOLVE_HOST; } } *((unsigned short*)&socksreq[8]) = htons(conn->remote_port); *((unsigned short*)&socksreq[8]) = htons(remote_port); { const int packetsize = 10; Loading Loading
CHANGES +4 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,10 @@ Changelog Daniel (19 February 2007) - Robson Braga Araujo made passive FTP transfers work with SOCKS (both 4 and 5). Daniel (18 February 2007) - Jeff Pohlmeyer identified two problems: first a rather obscure problem with the multi interface and connection re-use that could make a Loading
RELEASE-NOTES +3 −2 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ This release includes the following bugfixes: o builds fine with VC2005 o CURLOPT_RANGE set to NULL resets the range for FTP o curl_multi_remove_handle() rare crash o passive FTP transfers work with SOCKS This release includes the following known bugs: Loading @@ -42,6 +43,6 @@ advice from friends like these: Yang Tse, Manfred Schwarb, Michael Wallner, Jeff Pohlmeyer, Shmulik Regev, Rob Crittenden, Robert A. Monat, Dan Fandrich, Duncan Mac-Vicar Prett, Michal Marek Michal Marek, Robson Braga Araujo Thanks! (and sorry if I forgot to mention someone)
docs/KNOWN_BUGS +8 −5 Original line number Diff line number Diff line Loading @@ -64,11 +64,14 @@ may have been fixed since this was written! "system context" will make it use wrong(?) user name - at least when compared to what winhttp does. See http://curl.haxx.se/bug/view.cgi?id=1281867 23. We don't support SOCKS for IPv6. We don't support FTPS over a SOCKS proxy. We don't have any test cases for SOCKS proxy. We probably have even more bugs and lack of features when a SOCKS proxy is used. And there seem to be a problem with SOCKS when doing FTP: See http://curl.haxx.se/bug/view.cgi?id=1371540 23. SOCKS-related problems: A) libcurl doesn't support SOCKS for IPv6. B) libcurl doesn't support FTPS over a SOCKS proxy. C) We don't have any test cases for SOCKS proxy. E) libcurl doesn't support active FTP over a SOCKS proxy We probably have even more bugs and lack of features when a SOCKS proxy is used. 22. Sending files to a FTP server using curl on VMS, might lead to curl complaining on "unaligned file size" on completion. The problem is related Loading
lib/ftp.c +17 −0 Original line number Diff line number Diff line Loading @@ -1737,6 +1737,23 @@ static CURLcode ftp_state_pasv_resp(struct connectdata *conn, /* this just dumps information about this second connection */ ftp_pasv_verbose(conn, conninfo, newhost, connectport); switch(data->set.proxytype) { case CURLPROXY_SOCKS5: result = Curl_SOCKS5(conn->proxyuser, conn->proxypasswd, newhost, newport, SECONDARYSOCKET, conn); break; case CURLPROXY_HTTP: /* do nothing here. handled later. */ break; case CURLPROXY_SOCKS4: result = Curl_SOCKS4(conn->proxyuser, newhost, newport, SECONDARYSOCKET, conn); break; default: failf(data, "unknown proxytype option given"); result = CURLE_COULDNT_CONNECT; break; } #ifndef CURL_DISABLE_HTTP if(conn->bits.tunnel_proxy && conn->bits.httpproxy) { /* FIX: this MUST wait for a proper connect first if 'connected' is Loading
lib/socks.c +14 −8 Original line number Diff line number Diff line Loading @@ -108,12 +108,15 @@ static int blockread_all(struct connectdata *conn, /* connection data */ * Nonsupport "Identification Protocol (RFC1413)" */ CURLcode Curl_SOCKS4(const char *proxy_name, char *hostname, int remote_port, int sockindex, struct connectdata *conn) { unsigned char socksreq[262]; /* room for SOCKS4 request incl. user id */ int result; CURLcode code; curl_socket_t sock = conn->sock[FIRSTSOCKET]; curl_socket_t sock = conn->sock[sockindex]; long timeout; struct SessionHandle *data = conn->data; Loading Loading @@ -146,7 +149,7 @@ CURLcode Curl_SOCKS4(const char *proxy_name, socksreq[0] = 4; /* version (SOCKS4) */ socksreq[1] = 1; /* connect */ *((unsigned short*)&socksreq[2]) = htons(conn->remote_port); *((unsigned short*)&socksreq[2]) = htons(remote_port); /* DNS resolve */ { Loading @@ -154,7 +157,7 @@ CURLcode Curl_SOCKS4(const char *proxy_name, Curl_addrinfo *hp=NULL; int rc; rc = Curl_resolv(conn, conn->host.name, (int)conn->remote_port, &dns); rc = Curl_resolv(conn, hostname, remote_port, &dns); if(rc == CURLRESOLV_ERROR) return CURLE_COULDNT_RESOLVE_PROXY; Loading Loading @@ -190,7 +193,7 @@ CURLcode Curl_SOCKS4(const char *proxy_name, } if(!hp) { failf(data, "Failed to resolve \"%s\" for SOCKS4 connect.", conn->host.name); hostname); return CURLE_COULDNT_RESOLVE_HOST; } } Loading Loading @@ -312,6 +315,9 @@ CURLcode Curl_SOCKS4(const char *proxy_name, */ CURLcode Curl_SOCKS5(const char *proxy_name, const char *proxy_password, char *hostname, int remote_port, int sockindex, struct connectdata *conn) { /* Loading @@ -336,7 +342,7 @@ CURLcode Curl_SOCKS5(const char *proxy_name, ssize_t written; int result; CURLcode code; curl_socket_t sock = conn->sock[FIRSTSOCKET]; curl_socket_t sock = conn->sock[sockindex]; struct SessionHandle *data = conn->data; long timeout; Loading Loading @@ -507,7 +513,7 @@ CURLcode Curl_SOCKS5(const char *proxy_name, { struct Curl_dns_entry *dns; Curl_addrinfo *hp=NULL; int rc = Curl_resolv(conn, conn->host.name, (int)conn->remote_port, &dns); int rc = Curl_resolv(conn, hostname, remote_port, &dns); if(rc == CURLRESOLV_ERROR) return CURLE_COULDNT_RESOLVE_HOST; Loading Loading @@ -541,12 +547,12 @@ CURLcode Curl_SOCKS5(const char *proxy_name, } if(!hp) { failf(data, "Failed to resolve \"%s\" for SOCKS5 connect.", conn->host.name); hostname); return CURLE_COULDNT_RESOLVE_HOST; } } *((unsigned short*)&socksreq[8]) = htons(conn->remote_port); *((unsigned short*)&socksreq[8]) = htons(remote_port); { const int packetsize = 10; Loading