Based on further discussion on curl-library, I reverted yesterday's SOCKS5
authorDaniel Stenberg <daniel@haxx.se>
Sat, 5 Jan 2008 22:04:18 +0000 (22:04 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Sat, 5 Jan 2008 22:04:18 +0000 (22:04 +0000)
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.

CHANGES
RELEASE-NOTES
docs/curl.1
docs/libcurl/curl_easy_setopt.3
include/curl/curl.h
lib/socks.c
lib/url.c
lib/urldata.h
src/main.c

diff --git a/CHANGES b/CHANGES
index ae47a1e..30d312a 100644 (file)
--- 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
index 03a3d5b..0eb8520 100644 (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:
 
index 731c945..43d4350 100644 (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.
index 299ac3e..05289e9 100644 (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
index c1288a7..1896931 100644 (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;
 
index 90ec1f2..693daff 100644 (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;
 
index 774e25f..550cb21 100644 (file)
--- 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 */
index 2f061e0..5b5c014 100644 (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 */
 };
 
index 1f3ff70..95046bc 100644 (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 */