This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] posix/tst-getaddrinfo4: Consider EAI_NODATA as an expected result


Some proxy DNS servers might not resolve IPv6 names to addresses.
Instead they reply with NOERROR while passing no real data.
That combination of NOERROR and EAI_NODATA happen because the DNS
server has a recored for requested name (example.net in our case)
but that record is not of AAAA type which was requested.

That's what Wireshark sees in that case:
---------------------------------->8-----------------------------
Domain Name System (response)
   Transaction ID: 0x6e2e
   Flags: 0x8180 Standard query response, No error
       1... .... .... .... = Response: Message is a response
       .000 0... .... .... = Opcode: Standard query (0)
       .... .0.. .... .... = Authoritative: Server is not an authority for domain
       .... ..0. .... .... = Truncated: Message is not truncated
       .... ...1 .... .... = Recursion desired: Do query recursively
       .... .... 1... .... = Recursion available: Server can do recursive queries
       .... .... .0.. .... = Z: reserved (0)
       .... .... ..0. .... = Answer authenticated: Answer/authority portion was not authenticated by the server
       .... .... ...0 .... = Non-authenticated data: Unacceptable
       .... .... .... 0000 = Reply code: No error (0)
   Questions: 1
   Answer RRs: 0
   Authority RRs: 0
   Additional RRs: 0
   Queries
       example.net: type AAAA, class IN
           Name: example.net
           [Name Length: 11]
           [Label Count: 2]
           Type: AAAA (IPv6 Address) (28)
           Class: IN (0x0001)
---------------------------------->8-----------------------------

And that's what we see if Google DNS server (8.8.8.8) is used instead:
---------------------------------->8-----------------------------
Domain Name System (response)
   Transaction ID: 0x3cd4
   Flags: 0x8180 Standard query response, No error
       1... .... .... .... = Response: Message is a response
       .000 0... .... .... = Opcode: Standard query (0)
       .... .0.. .... .... = Authoritative: Server is not an authority for domain
       .... ..0. .... .... = Truncated: Message is not truncated
       .... ...1 .... .... = Recursion desired: Do query recursively
       .... .... 1... .... = Recursion available: Server can do recursive queries
       .... .... .0.. .... = Z: reserved (0)
       .... .... ..0. .... = Answer authenticated: Answer/authority portion was not authenticated by the server
       .... .... ...0 .... = Non-authenticated data: Unacceptable
       .... .... .... 0000 = Reply code: No error (0)
   Questions: 1
   Answer RRs: 1
   Authority RRs: 0
   Additional RRs: 0
   Queries
       example.net: type AAAA, class IN
           Name: example.net
           [Name Length: 11]
           [Label Count: 2]
           Type: AAAA (IPv6 Address) (28)
           Class: IN (0x0001)
Answers
   example.net: type AAAA, class IN, addr 2606:2800:220:1:248:1893:25c8:1946
---------------------------------->8-----------------------------
---
 posix/tst-getaddrinfo4.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/posix/tst-getaddrinfo4.c b/posix/tst-getaddrinfo4.c
index dc9e423448af..0139dee777a1 100644
--- a/posix/tst-getaddrinfo4.c
+++ b/posix/tst-getaddrinfo4.c
@@ -39,6 +39,7 @@ try (const char *service, int family, int flags)
     case 0:
     case EAI_AGAIN:
     case EAI_NONAME:
+    case EAI_NODATA:
       printf ("SUCCESS getaddrinfo(service=%s, family=%d, flags=%d): %s: %m\n",
               service ?: "NULL", family, flags, gai_strerror (res));
       return 0;
-- 
2.17.1


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]