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.
This commit is contained in:
Daniel Stenberg 2008-01-05 22:04:18 +00:00
parent 65008a4e55
commit b430576436
9 changed files with 35 additions and 47 deletions

11
CHANGES
View File

@ -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

View File

@ -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:

View File

@ -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 <host[:port]>"
.IP "--socks5-hostname <host[:port]>"
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 <host[:port]>"
.IP "--socks5 <host[:port]>"
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.

View File

@ -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

View File

@ -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=<a|i>) 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;

View File

@ -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;

View File

@ -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 */

View File

@ -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=<a|i>) 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 */
};

View File

@ -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 <seconds> 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 <host[:port]> Use SOCKS4 proxy on given host + port",
" --socks4a <host[:port]> Use SOCKS4a proxy on given host + port",
" --socks5 <host[:port]> Use SOCKS5 proxy and let the proxy resolve names",
" --socks5ip <host[:port]> Use SOCKS5 proxy on given host + port",
" --socks4 <host[:port]> SOCKS4 proxy on given host + port",
" --socks4a <host[:port]> SOCKS4a proxy on given host + port",
" --socks5-hostname <host[:port]> SOCKS5 proxy, pass name instead of IP",
" --socks5 <host[:port]> SOCKS5 proxy on given host + port",
" --stderr <file> Where to redirect stderr. - means stdout",
" -t/--telnet-option <OPT=val> Set telnet option",
" --trace <file> 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 */