diff --git a/CHANGES b/CHANGES index ae47a1e62..30d312a15 100644 --- a/CHANGES +++ b/CHANGES @@ -6,6 +6,17 @@ Changelog +Daniel S (5 Jan 2008) +- Based on further discussion on curl-library, I reverted yesterday's SOCKS5 + code to instead introduce support for a new proxy type called + CURLPROXY_SOCKS5_HOSTNAME that is used to send the host name to the proxy + instead of IP address and there's thus no longer any need for a new + curl_easy_setopt() option. + + The default SOCKS5 proxy is again back to sending the IP address to the + proxy. The new curl command line option for enabling sending host name to a + SOCKS5 proxy is now --socks5-hostname. + Daniel S (4 Jan 2008) - Based on Maxim Perenesenko's patch, we now do SOCKS5 operations and let the proxy do the host name resolving and only if --socks5ip (or diff --git a/RELEASE-NOTES b/RELEASE-NOTES index 03a3d5b11..0eb852074 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -2,7 +2,7 @@ Curl and libcurl 7.17.2 Public curl releases: 103 Command line options: 125 - curl_easy_setopt() options: 149 + curl_easy_setopt() options: 148 Public functions in libcurl: 55 Public web site mirrors: 42 Known libcurl bindings: 36 @@ -15,7 +15,7 @@ This release includes the following changes: o --no-keep-alive was added, since starting now curl is doing connections with keep-alive enabled by default o --socks4a added (proxy type CURLPROXY_SOCKS4A for libcurl) - o --socks5ip added (CURLOPT_SOCKS5_RESOLVE_LOCAL for libcurl) + o --socks5-hostname added (CURLPROXY_SOCKS5_HOSTNAME for libcurl) This release includes the following bugfixes: @@ -44,7 +44,6 @@ This release includes the following bugfixes: o bad connection re-use check with environment variable-activated proxy use o --libcurl now generates a return statement as well o socklen_t is no longer used in the public includes - o SOCKS5 uses now let the proxy resolve the host names by default This release includes the following known bugs: diff --git a/docs/curl.1 b/docs/curl.1 index 731c945db..43d43500f 100644 --- a/docs/curl.1 +++ b/docs/curl.1 @@ -21,7 +21,7 @@ .\" * $Id$ .\" ************************************************************************** .\" -.TH curl 1 "20 Nov 2007" "Curl 7.17.2" "Curl Manual" +.TH curl 1 "5 Jan 2008" "Curl 7.17.2" "Curl Manual" .SH NAME curl \- transfer a URL .SH SYNOPSIS @@ -1083,10 +1083,10 @@ This option overrides any previous use of \fI-x/--proxy\fP, as they are mutually exclusive. If this option is used several times, the last one will be used. -.IP "--socks5 " +.IP "--socks5-hostname " Use the specified SOCKS5 proxy (and let the proxy resolve the host name). If the port number is not specified, it is assumed at port 1080. (Added in -7.11.1) +7.17.2) This option overrides any previous use of \fI-x/--proxy\fP, as they are mutually exclusive. @@ -1094,9 +1094,9 @@ mutually exclusive. If this option is used several times, the last one will be used. (This option was previously wrongly documented and used as --socks without the number appended.) -.IP "--socks5ip " +.IP "--socks5 " Use the specified SOCKS5 proxy - but resolve the host name locally. If the -port number is not specified, it is assumed at port 1080. (Added in 7.17.2) +port number is not specified, it is assumed at port 1080. This option overrides any previous use of \fI-x/--proxy\fP, as they are mutually exclusive. diff --git a/docs/libcurl/curl_easy_setopt.3 b/docs/libcurl/curl_easy_setopt.3 index 299ac3ebb..05289e9de 100644 --- a/docs/libcurl/curl_easy_setopt.3 +++ b/docs/libcurl/curl_easy_setopt.3 @@ -21,7 +21,7 @@ .\" * $Id$ .\" ************************************************************************** .\" -.TH curl_easy_setopt 3 "4 Jan 2008" "libcurl 7.17.2" "libcurl Manual" +.TH curl_easy_setopt 3 "5 Jan 2008" "libcurl 7.17.2" "libcurl Manual" .SH NAME curl_easy_setopt \- set options for a curl easy handle .SH SYNOPSIS @@ -431,10 +431,9 @@ specified in the proxy string \fICURLOPT_PROXY\fP. .IP CURLOPT_PROXYTYPE Pass a long with this option to set type of the proxy. Available options for this are \fICURLPROXY_HTTP\fP, \fICURLPROXY_SOCKS4\fP (added in 7.15.2), -\fICURLPROXY_SOCKS5\fP and \fICURLPROXY_SOCKS4A\fP (added in 7.17.2). The HTTP -type is default. (Added in 7.10) - -See also \fIURLOPT_SOCKS5_RESOLVE_LOCAL\fP. +\fICURLPROXY_SOCKS5\fP, \fICURLPROXY_SOCKS4A\fP (added in 7.17.2) and +\fICURLPROXY_SOCKS5_HOSTNAME\fP (added in 7.17.2). The HTTP type is +default. (Added in 7.10) .IP CURLOPT_HTTPPROXYTUNNEL Set the parameter to non-zero to get the library to tunnel all operations through a given HTTP proxy. There is a big difference between using a proxy diff --git a/include/curl/curl.h b/include/curl/curl.h index c1288a7e9..189693137 100644 --- a/include/curl/curl.h +++ b/include/curl/curl.h @@ -499,7 +499,10 @@ typedef enum { CURLPROXY_SOCKS4 = 4, /* support added in 7.15.2, enum existed already in 7.10 */ CURLPROXY_SOCKS5 = 5, /* added in 7.10 */ - CURLPROXY_SOCKS4A = 6 /* added in 7.17.2 */ + CURLPROXY_SOCKS4A = 6, /* added in 7.17.2 */ + CURLPROXY_SOCKS5_HOSTNAME = 7 /* Use the SOCKS5 protocol but pass along the + host name rather than the IP address. added + in 7.17.2 */ } curl_proxytype; /* this enum was added in 7.10 */ #define CURLAUTH_NONE 0 /* nothing */ @@ -1172,11 +1175,6 @@ typedef enum { /* set transfer mode (;type=) when doing FTP via an HTTP proxy */ CINIT(PROXY_TRANSFER_MODE, LONG, 166), - /* Set using of SOCKS5 to resolve host names locally instead of sending them - to the proxy to let it resolve them. Valid only if CURLOPT_PROXYTYPE == - CURLPROXY_SOCKS5, otherwise ignored. */ - CINIT(SOCKS5_RESOLVE_LOCAL, LONG, 167), - CURLOPT_LASTENTRY /* the last unused */ } CURLoption; diff --git a/lib/socks.c b/lib/socks.c index 90ec1f215..693daffe3 100644 --- a/lib/socks.c +++ b/lib/socks.c @@ -390,7 +390,7 @@ CURLcode Curl_SOCKS5(const char *proxy_name, curl_socket_t sock = conn->sock[sockindex]; struct SessionHandle *data = conn->data; long timeout; - bool socks5_resolve_local = data->set.socks5_resolve_local; + bool socks5_resolve_local = data->set.proxytype == CURLPROXY_SOCKS5; const size_t hostname_len = strlen(hostname); int packetsize = 0; diff --git a/lib/url.c b/lib/url.c index 774e25ff2..550cb2113 100644 --- a/lib/url.c +++ b/lib/url.c @@ -2054,14 +2054,6 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option, } break; - case CURLOPT_SOCKS5_RESOLVE_LOCAL: - /* - * Enable or disable using of SOCKS5 proxy server to resolve domain names - * instead of using platform API like gethostbyname_r etc - */ - data->set.socks5_resolve_local = (bool)(0 != va_arg(param, long)); - break; - default: /* unknown tag and its companion, just ignore: */ result = CURLE_FAILED_INIT; /* correct this */ diff --git a/lib/urldata.h b/lib/urldata.h index 2f061e035..5b5c014b4 100644 --- a/lib/urldata.h +++ b/lib/urldata.h @@ -1441,9 +1441,6 @@ struct UserDefined { long new_directory_perms; /* Permissions to use when creating remote dirs */ bool proxy_transfer_mode; /* set transfer mode (;type=) when doing FTP via an HTTP proxy */ - bool socks5_resolve_local; /* resolve host names locally even if a SOCKS5 - proxy in use. Valid only if CURLOPT_PROXYTYPE - == CURLPROXY_SOCKS5, otherwise ignored. */ char *str[STRING_LAST]; /* array of strings, pointing to allocated memory */ }; diff --git a/src/main.c b/src/main.c index 1f3ff706b..95046bca7 100644 --- a/src/main.c +++ b/src/main.c @@ -480,8 +480,6 @@ struct Configurable { bool raw; bool post301; bool nokeepalive; - bool socks5_resolve_local; /* don't use SOCKS5 proxy server to resolve - domain names */ struct OutStruct *outs; }; @@ -713,10 +711,10 @@ static void help(void) " --retry-max-time Retry only within this period", " -s/--silent Silent mode. Don't output anything", " -S/--show-error Show error. With -s, make curl show errors when they occur", - " --socks4 Use SOCKS4 proxy on given host + port", - " --socks4a Use SOCKS4a proxy on given host + port", - " --socks5 Use SOCKS5 proxy and let the proxy resolve names", - " --socks5ip Use SOCKS5 proxy on given host + port", + " --socks4 SOCKS4 proxy on given host + port", + " --socks4a SOCKS4a proxy on given host + port", + " --socks5-hostname SOCKS5 proxy, pass name instead of IP", + " --socks5 SOCKS5 proxy on given host + port", " --stderr Where to redirect stderr. - means stdout", " -t/--telnet-option Set telnet option", " --trace Write a debug trace to the given file", @@ -1906,11 +1904,10 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */ free(config->ftpport); config->ftpport = NULL; break; - case 'c': /* --socks5ip specifies a socks5 proxy to use, but resolves + case 'c': /* --socks5 specifies a socks5 proxy to use, and resolves the name locally and passes on the resolved address */ GetStr(&config->socksproxy, nextarg); config->socksver = CURLPROXY_SOCKS5; - config->socks5_resolve_local = TRUE; break; case 't': /* --socks4 specifies a socks4 proxy to use */ GetStr(&config->socksproxy, nextarg); @@ -1920,11 +1917,10 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */ GetStr(&config->socksproxy, nextarg); config->socksver = CURLPROXY_SOCKS4A; break; - case '2': /* --socks5 specifies a socks5 proxy and enables name resolving - with the proxy */ + case '2': /* --socks5-hostname specifies a socks5 proxy and enables name + resolving with the proxy */ GetStr(&config->socksproxy, nextarg); - config->socksver = CURLPROXY_SOCKS5; - config->socks5_resolve_local = FALSE; + config->socksver = CURLPROXY_SOCKS5_HOSTNAME; break; case 'd': /* --tcp-nodelay option */ config->tcp_nodelay ^= TRUE; @@ -4511,10 +4507,6 @@ operate(struct Configurable *config, int argc, argv_item_t argv[]) if(config->socksproxy) { my_setopt(curl, CURLOPT_PROXY, config->socksproxy); my_setopt(curl, CURLOPT_PROXYTYPE, config->socksver); - if(config->socksver==CURLPROXY_SOCKS5) - /* added in 7.17.2 */ - my_setopt(curl, CURLOPT_SOCKS5_RESOLVE_LOCAL, - config->socks5_resolve_local); } /* curl 7.13.0 */