summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDmytro Shynkevych <dmytro@tailscale.com>2020-08-20 18:05:40 -0400
committerDmytro Shynkevych <dmytro@tailscale.com>2020-08-20 18:05:40 -0400
commit1886dfdca357efbbbe30c1cfcdafb1e8ea5c2e98 (patch)
treef68e201b4537505c240173c565996aff9217e20d
parent309c15dfddac0e179723e3d8dc49c7e8b4b675b1 (diff)
downloadtailscale-1886dfdca357efbbbe30c1cfcdafb1e8ea5c2e98.tar.xz
tailscale-1886dfdca357efbbbe30c1cfcdafb1e8ea5c2e98.zip
tsdns: lowercase the name in parseQuery.
Domains in DNS should be case-insensitive. Signed-off-by: Dmytro Shynkevych <dmytro@tailscale.com>
-rw-r--r--wgengine/tsdns/tsdns.go8
-rw-r--r--wgengine/tsdns/tsdns_test.go1
2 files changed, 9 insertions, 0 deletions
diff --git a/wgengine/tsdns/tsdns.go b/wgengine/tsdns/tsdns.go
index e4ecf90f6..6aa637ac5 100644
--- a/wgengine/tsdns/tsdns.go
+++ b/wgengine/tsdns/tsdns.go
@@ -293,6 +293,14 @@ func (r *Resolver) parseQuery(query []byte, resp *response) error {
return err
}
+ // Lowercase the name: DOMAIN.COM. should resolve the same as domain.com.
+ name := resp.Question.Name.Data[:resp.Question.Name.Length]
+ for i, b := range name {
+ if 'A' <= b && b <= 'Z' {
+ name[i] = b - 'A' + 'a'
+ }
+ }
+
return nil
}
diff --git a/wgengine/tsdns/tsdns_test.go b/wgengine/tsdns/tsdns_test.go
index 72e4031bd..4cca1a108 100644
--- a/wgengine/tsdns/tsdns_test.go
+++ b/wgengine/tsdns/tsdns_test.go
@@ -550,6 +550,7 @@ func TestFull(t *testing.T) {
}{
{"ipv4", dnspacket("test1.ipn.dev.", dns.TypeA), validIPv4Response},
{"ipv6", dnspacket("test2.ipn.dev.", dns.TypeAAAA), validIPv6Response},
+ {"upper", dnspacket("TEST1.IPN.DEV.", dns.TypeA), validIPv4Response},
{"ptr", dnspacket("4.3.2.1.in-addr.arpa.", dns.TypePTR), validPTRResponse},
{"error", dnspacket("test3.ipn.dev.", dns.TypeA), nxdomainResponse},
}