]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
curl_setup: disable IPv6 resolver without `getaddrinfo`
authorMarcel Raad <Marcel.Raad@teamviewer.com>
Tue, 26 Nov 2019 14:06:31 +0000 (15:06 +0100)
committerMarcel Raad <Marcel.Raad@teamviewer.com>
Tue, 3 Dec 2019 20:37:33 +0000 (21:37 +0100)
Also, use `CURLRES_IPV6` only for actual DNS resolution, not for IPv6
address support. This makes it possible to connect to IPv6 literals by
setting `ENABLE_IPV6` even without `getaddrinfo` support. It also fixes
the CMake build when using the synchronous resolver without
`getaddrinfo` support.

Closes https://github.com/curl/curl/pull/4662

lib/asyn-thread.c
lib/curl_setup.h
lib/hostip4.c
tests/server/resolve.c

index 8c552baa9ad254d583f77e82ddaa625611ac681f..b08497aaa0acb75a29e3ed805b2201ff2149751d 100755 (executable)
@@ -698,6 +698,16 @@ Curl_addrinfo *Curl_resolver_getaddrinfo(struct connectdata *conn,
 
   *waitp = 0; /* default to synchronous response */
 
+#ifdef ENABLE_IPV6
+  {
+    struct in6_addr in6;
+    /* check if this is an IPv6 address string */
+    if(Curl_inet_pton(AF_INET6, hostname, &in6) > 0)
+      /* This is an IPv6 address literal */
+      return Curl_ip2addr(AF_INET6, &in6, hostname, port);
+  }
+#endif /* ENABLE_IPV6 */
+
   if(Curl_inet_pton(AF_INET, hostname, &in) > 0)
     /* This is a dotted IP address 123.123.123.123-style */
     return Curl_ip2addr(AF_INET, &in, hostname, port);
@@ -741,7 +751,7 @@ Curl_addrinfo *Curl_resolver_getaddrinfo(struct connectdata *conn,
       /* This is a dotted IP address 123.123.123.123-style */
       return Curl_ip2addr(AF_INET, &in, hostname, port);
   }
-#ifdef CURLRES_IPV6
+#ifdef ENABLE_IPV6
   {
     struct in6_addr in6;
     /* check if this is an IPv6 address string */
@@ -749,7 +759,7 @@ Curl_addrinfo *Curl_resolver_getaddrinfo(struct connectdata *conn,
       /* This is an IPv6 address literal */
       return Curl_ip2addr(AF_INET6, &in6, hostname, port);
   }
-#endif /* CURLRES_IPV6 */
+#endif /* ENABLE_IPV6 */
 #endif /* !USE_RESOLVE_ON_IPS */
 
 #ifdef CURLRES_IPV6
index cc36e28ec8b514863bf5aac894c1506707bb652b..5d6e8d6f7038cd6e67844c7b6ca4addc0b708564 100644 (file)
 #  define CURLRES_SYNCH
 #endif
 
-#ifdef ENABLE_IPV6
+#if defined(ENABLE_IPV6) && defined(HAVE_GETADDRINFO)
 #  define CURLRES_IPV6
 #else
 #  define CURLRES_IPV4
index e6ba710d8302f95bbea3d2474d619d616347ff3b..750e0dd5ac55f84bd702197526a158e60d8ec528 100644 (file)
@@ -131,6 +131,16 @@ Curl_addrinfo *Curl_ipv4_resolve_r(const char *hostname,
   struct in_addr in;
   struct hostent *buf = NULL;
 
+#ifdef ENABLE_IPV6
+  {
+    struct in6_addr in6;
+    /* check if this is an IPv6 address string */
+    if(Curl_inet_pton(AF_INET6, hostname, &in6) > 0)
+      /* This is an IPv6 address literal */
+      return Curl_ip2addr(AF_INET6, &in6, hostname, port);
+  }
+#endif /* ENABLE_IPV6 */
+
   if(Curl_inet_pton(AF_INET, hostname, &in) > 0)
     /* This is a dotted IP address 123.123.123.123-style */
     return Curl_ip2addr(AF_INET, &in, hostname, port);
index 4cbdba6ec4f2831790e810d4494508cb85e69a2c..993e03125974d2d923f70f8b2dbe1718fc0dc74a 100644 (file)
@@ -68,7 +68,7 @@ int main(int argc, char *argv[])
   while(argc>arg) {
     if(!strcmp("--version", argv[arg])) {
       printf("resolve IPv4%s\n",
-#ifdef ENABLE_IPV6
+#if defined(CURLRES_IPV6)
              "/IPv6"
 #else
              ""
@@ -95,7 +95,7 @@ int main(int argc, char *argv[])
     puts("Usage: resolve [option] <host>\n"
          " --version\n"
          " --ipv4"
-#ifdef ENABLE_IPV6
+#if defined(CURLRES_IPV6)
          "\n --ipv6"
 #endif
          );
@@ -107,7 +107,7 @@ int main(int argc, char *argv[])
   atexit(win32_cleanup);
 #endif
 
-#ifdef ENABLE_IPV6
+#if defined(CURLRES_IPV6)
   if(use_ipv6) {
     /* Check that the system has IPv6 enabled before checking the resolver */
     curl_socket_t s = socket(PF_INET6, SOCK_DGRAM, 0);