Commit 308bdd02 authored by Tom Wilkie's avatar Tom Wilkie Committed by Chris Broadfoot

[release-branch.go1.7] net: don't avoid resolving .local addresses

.local addresses are used by things like Kubernetes and Weave DNS; Go
should not avoid resolving them.

This is a partial revert of https://golang.org/cl/21328 which was too
strict of an interpretation of RFC 6762.

Fixes #16739

Change-Id: I349415b4eab5d61240dd18217bd95dc7d2105cd5
Reviewed-on: https://go-review.googlesource.com/27250Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-on: https://go-review.googlesource.com/28632
parent 9b4e323e
...@@ -338,8 +338,9 @@ func lookup(ctx context.Context, name string, qtype uint16) (cname string, rrs [ ...@@ -338,8 +338,9 @@ func lookup(ctx context.Context, name string, qtype uint16) (cname string, rrs [
} }
// avoidDNS reports whether this is a hostname for which we should not // avoidDNS reports whether this is a hostname for which we should not
// use DNS. Currently this includes only .onion and .local names, // use DNS. Currently this includes only .onion, per RFC 7686. See
// per RFC 7686 and RFC 6762, respectively. See golang.org/issue/13705. // golang.org/issue/13705. Does not cover .local names (RFC 6762),
// see golang.org/issue/16739.
func avoidDNS(name string) bool { func avoidDNS(name string) bool {
if name == "" { if name == "" {
return true return true
...@@ -347,7 +348,7 @@ func avoidDNS(name string) bool { ...@@ -347,7 +348,7 @@ func avoidDNS(name string) bool {
if name[len(name)-1] == '.' { if name[len(name)-1] == '.' {
name = name[:len(name)-1] name = name[:len(name)-1]
} }
return stringsHasSuffixFold(name, ".onion") || stringsHasSuffixFold(name, ".local") return stringsHasSuffixFold(name, ".onion")
} }
// nameList returns a list of names for sequential DNS queries. // nameList returns a list of names for sequential DNS queries.
......
...@@ -112,10 +112,11 @@ func TestAvoidDNSName(t *testing.T) { ...@@ -112,10 +112,11 @@ func TestAvoidDNSName(t *testing.T) {
{"foo.ONION", true}, {"foo.ONION", true},
{"foo.ONION.", true}, {"foo.ONION.", true},
{"foo.local.", true}, // But do resolve *.local address; Issue 16739
{"foo.local", true}, {"foo.local.", false},
{"foo.LOCAL", true}, {"foo.local", false},
{"foo.LOCAL.", true}, {"foo.LOCAL", false},
{"foo.LOCAL.", false},
{"", true}, // will be rejected earlier too {"", true}, // will be rejected earlier too
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment