Skip to content

Commit 672729e

Browse files
iangudgerbradfitz
authored andcommitted
net: use golang.org/x/net/dns/dnsmessage for DNS resolution
Vendors golang.org/x/net/dns/dnsmessage from x/net git rev 892bf7b0c6e2f93b51166bf3882e50277fa5afc6 Updates #16218 Updates #21160 Change-Id: Ic4e8f3c3d83c2936354ec14c5be93b0d2b42dd91 Reviewed-on: https://go-review.googlesource.com/37879 Run-TryBot: Matthew Dempsky <[email protected]> TryBot-Result: Gobot Gobot <[email protected]> Reviewed-by: Brad Fitzpatrick <[email protected]>
1 parent c830e05 commit 672729e

File tree

11 files changed

+4164
-1871
lines changed

11 files changed

+4164
-1871
lines changed

src/go/build/deps_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ var pkgDeps = map[string][]string{
313313
"context", "math/rand", "os", "reflect", "sort", "syscall", "time",
314314
"internal/nettrace", "internal/poll",
315315
"internal/syscall/windows", "internal/singleflight", "internal/race",
316-
"golang_org/x/net/lif", "golang_org/x/net/route",
316+
"golang_org/x/net/dns/dnsmessage", "golang_org/x/net/lif", "golang_org/x/net/route",
317317
},
318318

319319
// NET enables use of basic network-related packages.

src/net/dnsclient.go

Lines changed: 7 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ package net
77
import (
88
"math/rand"
99
"sort"
10+
11+
"golang_org/x/net/dns/dnsmessage"
1012
)
1113

1214
// reverseaddr returns the in-addr.arpa. or ip6.arpa. hostname of the IP
@@ -35,71 +37,13 @@ func reverseaddr(addr string) (arpa string, err error) {
3537
return string(buf), nil
3638
}
3739

38-
// Find answer for name in dns message.
39-
// On return, if err == nil, addrs != nil.
40-
func answer(name, server string, dns *dnsMsg, qtype uint16) (cname string, addrs []dnsRR, err error) {
41-
addrs = make([]dnsRR, 0, len(dns.answer))
42-
43-
if dns.rcode == dnsRcodeNameError {
44-
return "", nil, &DNSError{Err: errNoSuchHost.Error(), Name: name, Server: server}
45-
}
46-
if dns.rcode != dnsRcodeSuccess {
47-
// None of the error codes make sense
48-
// for the query we sent. If we didn't get
49-
// a name error and we didn't get success,
50-
// the server is behaving incorrectly or
51-
// having temporary trouble.
52-
err := &DNSError{Err: "server misbehaving", Name: name, Server: server}
53-
if dns.rcode == dnsRcodeServerFailure {
54-
err.IsTemporary = true
55-
}
56-
return "", nil, err
57-
}
58-
59-
// Look for the name.
60-
// Presotto says it's okay to assume that servers listed in
61-
// /etc/resolv.conf are recursive resolvers.
62-
// We asked for recursion, so it should have included
63-
// all the answers we need in this one packet.
64-
Cname:
65-
for cnameloop := 0; cnameloop < 10; cnameloop++ {
66-
addrs = addrs[0:0]
67-
for _, rr := range dns.answer {
68-
if _, justHeader := rr.(*dnsRR_Header); justHeader {
69-
// Corrupt record: we only have a
70-
// header. That header might say it's
71-
// of type qtype, but we don't
72-
// actually have it. Skip.
73-
continue
74-
}
75-
h := rr.Header()
76-
if h.Class == dnsClassINET && equalASCIILabel(h.Name, name) {
77-
switch h.Rrtype {
78-
case qtype:
79-
addrs = append(addrs, rr)
80-
case dnsTypeCNAME:
81-
// redirect to cname
82-
name = rr.(*dnsRR_CNAME).Cname
83-
continue Cname
84-
}
85-
}
86-
}
87-
if len(addrs) == 0 {
88-
return "", nil, &DNSError{Err: errNoSuchHost.Error(), Name: name, Server: server}
89-
}
90-
return name, addrs, nil
91-
}
92-
93-
return "", nil, &DNSError{Err: "too many redirects", Name: name, Server: server}
94-
}
95-
96-
func equalASCIILabel(x, y string) bool {
97-
if len(x) != len(y) {
40+
func equalASCIIName(x, y dnsmessage.Name) bool {
41+
if x.Length != y.Length {
9842
return false
9943
}
100-
for i := 0; i < len(x); i++ {
101-
a := x[i]
102-
b := y[i]
44+
for i := 0; i < int(x.Length); i++ {
45+
a := x.Data[i]
46+
b := y.Data[i]
10347
if 'A' <= a && a <= 'Z' {
10448
a += 0x20
10549
}

src/net/dnsclient_test.go

Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -67,51 +67,3 @@ func testWeighting(t *testing.T, margin float64) {
6767
func TestWeighting(t *testing.T) {
6868
testWeighting(t, 0.05)
6969
}
70-
71-
// Issue 8434: verify that Temporary returns true on an error when rcode
72-
// is SERVFAIL
73-
func TestIssue8434(t *testing.T) {
74-
msg := &dnsMsg{
75-
dnsMsgHdr: dnsMsgHdr{
76-
rcode: dnsRcodeServerFailure,
77-
},
78-
}
79-
80-
_, _, err := answer("golang.org", "foo:53", msg, uint16(dnsTypeSRV))
81-
if err == nil {
82-
t.Fatal("expected an error")
83-
}
84-
if ne, ok := err.(Error); !ok {
85-
t.Fatalf("err = %#v; wanted something supporting net.Error", err)
86-
} else if !ne.Temporary() {
87-
t.Fatalf("Temporary = false for err = %#v; want Temporary == true", err)
88-
}
89-
if de, ok := err.(*DNSError); !ok {
90-
t.Fatalf("err = %#v; wanted a *net.DNSError", err)
91-
} else if !de.IsTemporary {
92-
t.Fatalf("IsTemporary = false for err = %#v; want IsTemporary == true", err)
93-
}
94-
}
95-
96-
// Issue 12778: verify that NXDOMAIN without RA bit errors as
97-
// "no such host" and not "server misbehaving"
98-
func TestIssue12778(t *testing.T) {
99-
msg := &dnsMsg{
100-
dnsMsgHdr: dnsMsgHdr{
101-
rcode: dnsRcodeNameError,
102-
recursion_available: false,
103-
},
104-
}
105-
106-
_, _, err := answer("golang.org", "foo:53", msg, uint16(dnsTypeSRV))
107-
if err == nil {
108-
t.Fatal("expected an error")
109-
}
110-
de, ok := err.(*DNSError)
111-
if !ok {
112-
t.Fatalf("err = %#v; wanted a *net.DNSError", err)
113-
}
114-
if de.Err != errNoSuchHost.Error() {
115-
t.Fatalf("Err = %#v; wanted %q", de.Err, errNoSuchHost.Error())
116-
}
117-
}

0 commit comments

Comments
 (0)