<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
Found it, looks like ai_addrlen is being set to sizeof() the wrong
structure ... ugh.<br>
<br>
<a class="moz-txt-link-freetext" href="https://github.com/c-ares/c-ares/commit/71adb3c4170dc47f71c21bf8d95ed7ddd640819e">https://github.com/c-ares/c-ares/commit/71adb3c4170dc47f71c21bf8d95ed7ddd640819e</a><br>
<br>
looks like we need a quick 1.18.1...<br>
<br>
<div class="moz-cite-prefix">On 10/26/21 5:35 PM, Brad House wrote:<br>
</div>
<blockquote type="cite"
cite="mid:a239ffb8-bc0c-4905-3446-75aa94a96e96@brad-house.com">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
Erm, this is really strange. I mean just using the c-ares ahost()
which calls ares_gethostbyname(), I get reasonable results:<br>
<br>
$ ./ahost -t u production-all-ipv6.easypost.com<br>
production-all-ipv6.easypost.com 2607:f0d0:2901:7e::2<br>
production-all-ipv6.easypost.com 2607:f0d0:3803:ca::2<br>
production-all-ipv6.easypost.com 2607:f0d0:2901:7e::3<br>
production-all-ipv6.easypost.com 2607:f0d0:3803:ca::3<br>
<br>
Using ahost instead of adig is more representative of how
consumers of c-ares use it as adig uses low level apis whereas
ahost uses the higher level apis.<br>
<br>
The socket(), connect(), getsockname() pattern you see for each IP
address is actually a weird thing about getaddrinfo() where you
have to determine reach-ability by the routes to the destination
as per rfc6724 section 6. If you notice, the socket() is
SOCK_DGRAM, IPPROTO_UDP and UDP is stateless, so connect() doesn't
actually connect, but it *does* resolve if the system thinks the
endpoint is reachable.<br>
<br>
I guess maybe I need to look at the curl code to see how its
calling into c-ares to see if the change has some weird sanity
check that isn't covered by our test cases.<br>
<br>
<br>
<br>
<div class="moz-cite-prefix">On 10/26/21 5:16 PM, James Brown via
c-ares wrote:<br>
</div>
<blockquote type="cite"
cite="mid:CALgeuKz=jqop9c+CK90sSZZLx2ppaSEMAQQNnPVYv6y+33NT1w@mail.gmail.com">
<meta http-equiv="content-type" content="text/html;
charset=UTF-8">
<div dir="ltr">
<div class="gmail_default" style="font-family:times new
roman,serif">Testing an upgrade from 1.17.2 to 1.18.0 and
all curl requests to internal names started failing with
"Could not resolve host". adig and ahost are both able to
resolve the names just fine. It appears that this affects
any lookup that only returns IPv6 addresses, and possibly
also any lookup that is behind a DNAME. The IPv6 case is
easier to reproduce so that's what I've put below:</div>
<div class="gmail_default" style="font-family:times new
roman,serif"><br>
</div>
<div class="gmail_default" style=""><span
style="font-family:"times new roman",serif">This
can be easily reproduced from `</span><font
face="monospace">curl -vs <a
href="https://production-all-ipv6.easypost.com/health/ok"
moz-do-not-send="true" class="moz-txt-link-freetext">https://production-all-ipv6.easypost.com/health/ok</a></font><font
face="times new roman, serif">` on any host with c-ares
1.18.0 installed and curl linked against c-ares.</font></div>
<div class="gmail_default" style="font-family:times new
roman,serif"><br>
</div>
<div class="gmail_default" style="font-family:times new
roman,serif">Bizarrely enough, if I strace curl, I see it
actually connecting to the correct remote IP before
returning the "Could not resolve host" error. ???</div>
<div class="gmail_default" style="font-family:times new
roman,serif"><br>
</div>
<div class="gmail_default" style="font-family:times new
roman,serif">I did a git-bisect run and it points at <a
href="https://github.com/c-ares/c-ares/commit/778d7cd9e7bf6b31ce697f47cbe935e33a63a5b4"
moz-do-not-send="true">778d7cd9e7bf6b31ce697f47cbe935e33a63a5b4</a> as
the offending commit.</div>
<div class="gmail_default" style="font-family:times new
roman,serif"><br>
</div>
<div class="gmail_default" style="font-family:times new
roman,serif">I'm running dnsmasq on localhost and nothing
about it has changed. Below is some probably-relevant output
from a system with c-ares 1.17.2 installed system wide and
c-ares 1.18.0 installed in the "./prefix" directory.</div>
<div class="gmail_default" style="font-family:times new
roman,serif"><br>
</div>
<div class="gmail_default" style="font-family:times new
roman,serif">$ curl --version<br>
curl 7.79.1 (x86_64-redhat-linux-gnu) libcurl/7.79.1
OpenSSL/1.0.2u zlib/1.2.3 zstd/1.4.9 c-ares/1.17.2
libidn2/2.3.0 libssh2/1.10.0 nghttp2/1.45.1 OpenLDAP/2.4.40<br>
Release-Date: 2021-09-22<br>
Protocols: dict file ftp ftps gopher gophers http https imap
imaps ldap ldaps mqtt pop3 pop3s rtsp scp sftp smb smbs smtp
smtps telnet tftp<br>
Features: alt-svc AsynchDNS HSTS HTTP2 HTTPS-proxy IDN IPv6
Largefile libz NTLM NTLM_WB SSL UnixSockets zstd<br>
</div>
<div class="gmail_default" style="font-family:times new
roman,serif"><br>
</div>
<div class="gmail_default" style="font-family:times new
roman,serif">$ env LD_LIBRARY_PATH=./prefix/lib/ curl
--version<br>
curl 7.79.1 (x86_64-redhat-linux-gnu) libcurl/7.79.1
OpenSSL/1.0.2u zlib/1.2.3 zstd/1.4.9 c-ares/1.18.0
libidn2/2.3.0 libssh2/1.10.0 nghttp2/1.45.1 OpenLDAP/2.4.40<br>
Release-Date: 2021-09-22<br>
Protocols: dict file ftp ftps gopher gophers http https imap
imaps ldap ldaps mqtt pop3 pop3s rtsp scp sftp smb smbs smtp
smtps telnet tftp<br>
Features: alt-svc AsynchDNS HSTS HTTP2 HTTPS-proxy IDN IPv6
Largefile libz NTLM NTLM_WB SSL UnixSockets zstd</div>
<div class="gmail_default" style="font-family:times new
roman,serif"><br>
</div>
<div class="gmail_default" style="font-family:times new
roman,serif">$ curl <a
href="https://production-all-ipv6.easypost.com/health/ok"
moz-do-not-send="true" class="moz-txt-link-freetext">https://production-all-ipv6.easypost.com/health/ok</a><br>
UP<br>
</div>
<div class="gmail_default" style="font-family:times new
roman,serif"><br>
</div>
<div class="gmail_default" style="font-family:times new
roman,serif">$ env LD_LIBRARY_PATH=./prefix/lib/ curl <a
href="https://production-all-ipv6.easypost.com/health/ok"
moz-do-not-send="true" class="moz-txt-link-freetext">https://production-all-ipv6.easypost.com/health/ok</a><br>
curl: (6) Could not resolve host: <a
href="http://production-all-ipv6.easypost.com"
moz-do-not-send="true">production-all-ipv6.easypost.com</a><br>
</div>
<div class="gmail_default" style="font-family:times new
roman,serif"><br>
</div>
<div class="gmail_default" style="font-family:times new
roman,serif">$ env LD_LIBRARY_PATH=./prefix/lib/ strace curl
<a href="https://production-all-ipv6.easypost.com/health/ok"
moz-do-not-send="true" class="moz-txt-link-freetext">https://production-all-ipv6.easypost.com/health/ok</a><br>
</div>
<div class="gmail_default" style="font-family:times new
roman,serif">[snip]</div>
<div class="gmail_default" style="font-family:times new
roman,serif">connect(5, {sa_family=AF_INET6,
sin6_port=htons(53), inet_pton(AF_INET6, "::1",
&sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0<br>
sendto(5,
"Q\337\1\0\0\1\0\0\0\0\0\0\23production-all-ipv6"..., 50,
MSG_NOSIGNAL, NULL, 0) = 50<br>
sendto(5,
"~\311\1\0\0\1\0\0\0\0\0\0\23production-all-ipv6"..., 50,
MSG_NOSIGNAL, NULL, 0) = 50<br>
poll([{fd=5, events=POLLIN|POLLRDNORM}], 1, 0) = 1 ([{fd=5,
revents=POLLIN|POLLRDNORM}])<br>
recvfrom(5,
"Q\337\201\200\0\1\0\0\0\0\0\0\23production-all-ipv6"...,
4097, 0, {sa_family=AF_INET6, sin6_port=htons(53),
inet_pton(AF_INET6, "::1", &sin6_addr), sin6_flowinfo=0,
sin6_scope_id=0}, [28]) = 50<br>
recvfrom(5,
"~\311\201\200\0\1\0\4\0\0\0\0\23production-all-ipv6"...,
4097, 0, {sa_family=AF_INET6, sin6_port=htons(53),
inet_pton(AF_INET6, "::1", &sin6_addr), sin6_flowinfo=0,
sin6_scope_id=0}, [28]) = 162<br>
socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP) = 6<br>
connect(6, {sa_family=AF_INET6, sin6_port=htons(443),
inet_pton(AF_INET6, "2607:f0d0:2901:7e::3", &sin6_addr),
sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0<br>
getsockname(6, {sa_family=AF_INET6, sin6_port=htons(43428),
inet_pton(AF_INET6, "2607:f0d0:2901:4b::66",
&sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) =
0<br>
close(6) = 0<br>
socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP) = 6<br>
connect(6, {sa_family=AF_INET6, sin6_port=htons(443),
inet_pton(AF_INET6, "2607:f0d0:3803:ca::3", &sin6_addr),
sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0<br>
getsockname(6, {sa_family=AF_INET6, sin6_port=htons(44405),
inet_pton(AF_INET6, "2607:f0d0:2901:4b::66",
&sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) =
0<br>
close(6) = 0<br>
socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP) = 6<br>
connect(6, {sa_family=AF_INET6, sin6_port=htons(443),
inet_pton(AF_INET6, "2607:f0d0:3803:ca::2", &sin6_addr),
sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0<br>
getsockname(6, {sa_family=AF_INET6, sin6_port=htons(33765),
inet_pton(AF_INET6, "2607:f0d0:2901:4b::66",
&sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) =
0<br>
close(6) = 0<br>
socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP) = 6<br>
connect(6, {sa_family=AF_INET6, sin6_port=htons(443),
inet_pton(AF_INET6, "2607:f0d0:2901:7e::2", &sin6_addr),
sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0<br>
getsockname(6, {sa_family=AF_INET6, sin6_port=htons(59083),
inet_pton(AF_INET6, "2607:f0d0:2901:4b::66",
&sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) =
0<br>
close(6) = 0<br>
close(5) = 0<br>
rt_sigaction(SIGPIPE, {SIG_IGN, [PIPE],
SA_RESTORER|SA_RESTART, 0x7ff5cb5f4570}, NULL, 8) = 0<br>
rt_sigaction(SIGPIPE, {SIG_IGN, [PIPE],
SA_RESTORER|SA_RESTART, 0x7ff5cb5f4570}, NULL, 8) = 0<br>
write(2, "c", 1c) = 1<br>
write(2, "u", 1u) = 1<br>
write(2, "r", 1r) = 1<br>
write(2, "l", 1l) = 1<br>
write(2, ":", 1:) = 1<br>
write(2, " ", 1 ) = 1<br>
write(2, "(", 1() = 1<br>
write(2, "6", 16) = 1<br>
write(2, ")", 1)) = 1<br>
write(2, " ", 1 ) = 1<br>
write(2, "C", 1C) = 1<br>
write(2, "o", 1o) = 1<br>
write(2, "u", 1u) = 1<br>
write(2, "l", 1l) = 1<br>
write(2, "d", 1d) = 1<br>
write(2, " ", 1 ) = 1<br>
write(2, "n", 1n) = 1<br>
write(2, "o", 1o) = 1<br>
write(2, "t", 1t) = 1<br>
write(2, " ", 1 ) = 1<br>
write(2, "r", 1r) = 1<br>
write(2, "e", 1e) = 1<br>
write(2, "s", 1s) = 1<br>
write(2, "o", 1o) = 1<br>
write(2, "l", 1l) = 1<br>
write(2, "v", 1v) = 1<br>
write(2, "e", 1e) = 1<br>
write(2, " ", 1 ) = 1<br>
write(2, "h", 1h) = 1<br>
write(2, "o", 1o) = 1<br>
write(2, "s", 1s) = 1<br>
write(2, "t", 1t) = 1<br>
write(2, ":", 1:) = 1<br>
</div>
-- <br>
<div dir="ltr" class="gmail_signature"
data-smartmail="gmail_signature">
<div dir="ltr">
<div>
<div dir="ltr"><span style="font-family:times new
roman,serif">James Brown</span>
<div><span style="font-family:times new roman,serif">Engineer</span></div>
</div>
</div>
</div>
</div>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
</blockquote>
<br>
</blockquote>
<br>
</body>
</html>