Bug 14505 - AI_ADDRCONFIG does not suppress IN A lookups from IPV6-only hosts
Summary: AI_ADDRCONFIG does not suppress IN A lookups from IPV6-only hosts
Status: RESOLVED FIXED
Alias: None
Product: glibc
Classification: Unclassified
Component: network (show other bugs)
Version: 2.17
: P2 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on: 16826
Blocks:
  Show dependency treegraph
 
Reported: 2012-08-21 21:49 UTC by law
Modified: 2017-07-19 02:10 UTC (History)
4 users (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:
fweimer: security-


Attachments
Potential fix (446 bytes, patch)
2012-08-22 16:35 UTC, law
Details | Diff
testcase (991 bytes, text/x-csrc)
2016-11-25 05:15 UTC, Mike Frysinger
Details

Note You need to log in before you can comment on or make changes to this bug.
Description law 2012-08-21 21:49:10 UTC
When looking a host name using getaddrinfo() with AI_ADDRCONFIG from an IPv6-only host, IN A queries are sent to the DNS server. According to RFC 3493, they should not.

Steps to Reproduce:
1. Ensure the system is IPv6-only (it is optional remove 127.0.0.1/8 from the loopback interface, as it is ignored by getaddrinfo() for the purposes of determining whether or not the system has IPv4 connectivity or not). My test system gives the following output:

[tore@laptop ~]$ ip -4 address list; ip -4 route list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    inet 127.0.0.1/8 scope host lo
[tore@laptop ~]$ 

2. Ensure the system has a working IPv6 DNS server configured in /etc/resolv.conf, "echo nameserver 2001:4860:4860::8888 > /etc/resolv.conf" should do the trick.

3. Download and compile my getaddrinfo() test program from http://fud.no/gai.c (or use any other getaddrinfo() test program that can be made to use AI_ADDRCONFIG): "wget -O - http://fud.no/gai.c | gcc -x c -o gai -"

4. Start a tcpdump to inspect DNS server traffic: "tcpdump -i any -n port 53"

5. Resolve a host name using getaddrinfo() w/AI_ADDRCONFIG, e.g. "./gai -ac www.ripe.net"
  
Actual results:

The tcpdump process reports queries being made for both A and AAAA resource records:

11:16:00.685198 IP6 2a02:c0:1002:101:c449:7c3d:76b6:bbd1.48007 > 2001:4860:4860::8888.domain: 44105+ A? www.ripe.net. (30)
11:16:00.685235 IP6 2a02:c0:1002:101:c449:7c3d:76b6:bbd1.48007 > 2001:4860:4860::8888.domain: 35929+ AAAA? www.ripe.net. (30)
11:16:00.727253 IP6 2001:4860:4860::8888.domain > 2a02:c0:1002:101:c449:7c3d:76b6:bbd1.48007: 44105 1/0/0 A 193.0.6.139 (46)
11:16:00.727278 IP6 2001:4860:4860::8888.domain > 2a02:c0:1002:101:c449:7c3d:76b6:bbd1.48007: 35929 1/0/0 AAAA 2001:67c:2e8:22::c100:68b (58)

Expected results:

Only an AAAA record query should have been made; AI_ADDRCONFIG should have suppressed the A queries.
Comment 1 law 2012-08-22 16:35:18 UTC
Created attachment 6599 [details]
Potential fix
Comment 2 law 2012-08-22 17:43:08 UTC
Attached patch was checked in as 8479f23aa1d5e5477a37f46823856bdafaedfa46
Comment 3 Mike Frysinger 2016-11-25 05:15:37 UTC
Created attachment 9668 [details]
testcase