Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

hostip: Make Curl_ipv6works function independent of getaddrinfo #7529

Closed
wants to merge 1 commit into from

Conversation

@jay
Copy link
Member

@jay jay commented Aug 3, 2021

  • Do not assume IPv6 is not working when getaddrinfo is not present.

The check to see if IPv6 actually works is now independent of whether
there is any resolver that can potentially resolve a hostname to IPv6.

Prior to this change if getaddrinfo() was not found at compile time then
Curl_ipv6works() would be defined as a macro that returns FALSE.

When getaddrinfo is not found then libcurl is built with CURLRES_IPV4
defined instead of CURLRES_IPV6, meaning that it cannot do IPv6 lookups
in the traditional way. With this commit if libcurl is built with IPv6
support (ENABLE_IPV6) but without getaddrinfo (CURLRES_IPV6), and the
IPv6 stack is actually working, then it is possible for libcurl to
resolve IPv6 addresses by using DoH.

Ref: #7483 (comment)

Closes #xxxx

- Do not assume IPv6 is not working when getaddrinfo is not present.

The check to see if IPv6 actually works is now independent of whether
there is any resolver that can potentially resolve a hostname to IPv6.

Prior to this change if getaddrinfo() was not found at compile time then
Curl_ipv6works() would be defined as a macro that returns FALSE.

When getaddrinfo is not found then libcurl is built with CURLRES_IPV4
defined instead of CURLRES_IPV6, meaning that it cannot do IPv6 lookups
in the traditional way. With this commit if libcurl is built with IPv6
support (ENABLE_IPV6) but without getaddrinfo (CURLRES_IPV6), and the
IPv6 stack is actually working, then it is possible for libcurl to
resolve IPv6 addresses by using DoH.

Ref: curl#7483 (comment)

Closes #xxxx
@jay
Copy link
Member Author

@jay jay commented Aug 3, 2021

It may be possible to improve this for c-ares IPv6 when getaddrinfo is not present in curl, by using CURLRES_IPV6 for c-ares, but it seems unusual that getaddrinfo would be in one and not the other.

curl/lib/curl_setup.h

Lines 565 to 577 in bfbde88

#if defined(ENABLE_IPV6) && defined(HAVE_GETADDRINFO)
# define CURLRES_IPV6
#else
# define CURLRES_IPV4
#endif
#ifdef USE_ARES
# define CURLRES_ASYNCH
# define CURLRES_ARES
/* now undef the stock libc functions just to avoid them being used */
# undef HAVE_GETADDRINFO
# undef HAVE_FREEADDRINFO
# undef HAVE_GETHOSTBYNAME

Copy link
Member

@MarcelRaad MarcelRaad left a comment

👍

mback2k
mback2k approved these changes Aug 3, 2021
bagder
bagder approved these changes Aug 4, 2021
Copy link
Member

@bagder bagder left a comment

I wouldn't have bothered since such platforms are virtually not used, but since you've already written the code...

@jay jay closed this in 16e9c8e Aug 10, 2021
@jay jay deleted the fix_Curl_ipv6works branch Aug 10, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked issues

Successfully merging this pull request may close these issues.

None yet

4 participants