diff options
author | Mateusz Poliwczak <mpoliwczak34@gmail.com> | 2022-09-09 06:40:57 +0000 |
---|---|---|
committer | Gopher Robot <gobot@golang.org> | 2022-09-16 20:39:46 +0000 |
commit | 2d89bec2de0ee9d340346dea6b1506457f5f7722 (patch) | |
tree | 8246c87222f1a440a659e7c110c86969199f2db4 /src/net/dnsclient_unix_test.go | |
parent | a84f46a28a1a9ffc0183fed394b6969c10fad502 (diff) | |
download | go-git-2d89bec2de0ee9d340346dea6b1506457f5f7722.tar.gz |
net: set AD bit in DNS queries when trust-ad in resolv.conf
Fixes #51152
Change-Id: Ib366e733434b4bb60ac93e6e622d9ba50bfe4e26
GitHub-Last-Rev: e98220d62fc4f5b60aa3e4839f46ecf8f8f75485
GitHub-Pull-Request: golang/go#54921
Reviewed-on: https://go-review.googlesource.com/c/go/+/428955
Reviewed-by: Damien Neil <dneil@google.com>
Run-TryBot: Damien Neil <dneil@google.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Auto-Submit: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Diffstat (limited to 'src/net/dnsclient_unix_test.go')
-rw-r--r-- | src/net/dnsclient_unix_test.go | 73 |
1 files changed, 69 insertions, 4 deletions
diff --git a/src/net/dnsclient_unix_test.go b/src/net/dnsclient_unix_test.go index 17798e434b..553b220cbe 100644 --- a/src/net/dnsclient_unix_test.go +++ b/src/net/dnsclient_unix_test.go @@ -79,7 +79,7 @@ func TestDNSTransportFallback(t *testing.T) { for _, tt := range dnsTransportFallbackTests { ctx, cancel := context.WithCancel(context.Background()) defer cancel() - _, h, err := r.exchange(ctx, tt.server, tt.question, time.Second, useUDPOrTCP) + _, h, err := r.exchange(ctx, tt.server, tt.question, time.Second, useUDPOrTCP, false) if err != nil { t.Error(err) continue @@ -135,7 +135,7 @@ func TestSpecialDomainName(t *testing.T) { for _, tt := range specialDomainNameTests { ctx, cancel := context.WithCancel(context.Background()) defer cancel() - _, h, err := r.exchange(ctx, server, tt.question, 3*time.Second, useUDPOrTCP) + _, h, err := r.exchange(ctx, server, tt.question, 3*time.Second, useUDPOrTCP, false) if err != nil { t.Error(err) continue @@ -1593,7 +1593,7 @@ func TestDNSDialTCP(t *testing.T) { } r := Resolver{PreferGo: true, Dial: fake.DialContext} ctx := context.Background() - _, _, err := r.exchange(ctx, "0.0.0.0", mustQuestion("com.", dnsmessage.TypeALL, dnsmessage.ClassINET), time.Second, useUDPOrTCP) + _, _, err := r.exchange(ctx, "0.0.0.0", mustQuestion("com.", dnsmessage.TypeALL, dnsmessage.ClassINET), time.Second, useUDPOrTCP, false) if err != nil { t.Fatal("exhange failed:", err) } @@ -1746,7 +1746,7 @@ func TestDNSUseTCP(t *testing.T) { r := Resolver{PreferGo: true, Dial: fake.DialContext} ctx, cancel := context.WithCancel(context.Background()) defer cancel() - _, _, err := r.exchange(ctx, "0.0.0.0", mustQuestion("com.", dnsmessage.TypeALL, dnsmessage.ClassINET), time.Second, useTCPOnly) + _, _, err := r.exchange(ctx, "0.0.0.0", mustQuestion("com.", dnsmessage.TypeALL, dnsmessage.ClassINET), time.Second, useTCPOnly, false) if err != nil { t.Fatal("exchange failed:", err) } @@ -2344,3 +2344,68 @@ func TestLongDNSNames(t *testing.T) { } } } + +func TestDNSTrustAD(t *testing.T) { + fake := fakeDNSServer{ + rh: func(_, _ string, q dnsmessage.Message, _ time.Time) (dnsmessage.Message, error) { + if q.Questions[0].Name.String() == "notrustad.go.dev." && q.Header.AuthenticData { + t.Error("unexpected AD bit") + } + + if q.Questions[0].Name.String() == "trustad.go.dev." && !q.Header.AuthenticData { + t.Error("expected AD bit") + } + + r := dnsmessage.Message{ + Header: dnsmessage.Header{ + ID: q.Header.ID, + Response: true, + RCode: dnsmessage.RCodeSuccess, + }, + Questions: q.Questions, + } + if q.Questions[0].Type == dnsmessage.TypeA { + r.Answers = []dnsmessage.Resource{ + { + Header: dnsmessage.ResourceHeader{ + Name: q.Questions[0].Name, + Type: dnsmessage.TypeA, + Class: dnsmessage.ClassINET, + Length: 4, + }, + Body: &dnsmessage.AResource{ + A: TestAddr, + }, + }, + } + } + + return r, nil + }} + + r := &Resolver{PreferGo: true, Dial: fake.DialContext} + + conf, err := newResolvConfTest() + if err != nil { + t.Fatal(err) + } + defer conf.teardown() + + err = conf.writeAndUpdate([]string{"nameserver 127.0.0.1"}) + if err != nil { + t.Fatal(err) + } + + if _, err := r.LookupIPAddr(context.Background(), "notrustad.go.dev"); err != nil { + t.Errorf("lookup failed: %v", err) + } + + err = conf.writeAndUpdate([]string{"nameserver 127.0.0.1", "options trust-ad"}) + if err != nil { + t.Fatal(err) + } + + if _, err := r.LookupIPAddr(context.Background(), "trustad.go.dev"); err != nil { + t.Errorf("lookup failed: %v", err) + } +} |