diff options
| author | Dmytro Shynkevych <dmytro@tailscale.com> | 2020-08-20 18:05:40 -0400 |
|---|---|---|
| committer | Dmytro Shynkevych <dmytro@tailscale.com> | 2020-08-20 18:05:40 -0400 |
| commit | 1886dfdca357efbbbe30c1cfcdafb1e8ea5c2e98 (patch) | |
| tree | f68e201b4537505c240173c565996aff9217e20d | |
| parent | 309c15dfddac0e179723e3d8dc49c7e8b4b675b1 (diff) | |
| download | tailscale-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.go | 8 | ||||
| -rw-r--r-- | wgengine/tsdns/tsdns_test.go | 1 |
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}, } |
