From 81973181b956f966d751f9ea2e61caaa4d24cc0a Mon Sep 17 00:00:00 2001 From: jfbus Date: Mon, 7 Jan 2019 21:52:45 +0100 Subject: [PATCH] code review fixes --- src/net/dnsclient_unix.go | 12 +++++++++--- src/net/dnsclient_unix_test.go | 8 ++++---- src/net/dnsconfig_unix.go | 8 ++++++-- src/net/dnsconfig_unix_test.go | 2 +- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/net/dnsclient_unix.go b/src/net/dnsclient_unix.go index 0e0198afe68960..8171b2e47d680e 100644 --- a/src/net/dnsclient_unix.go +++ b/src/net/dnsclient_unix.go @@ -26,6 +26,12 @@ import ( "internal/x/net/dns/dnsmessage" ) +const ( + // to be used as a useTCP parameter to exchange + useTCPOnly = true + useUDPOrTCP = false +) + var ( errLameReferral = errors.New("lame referral") errCannotUnmarshalDNSMessage = errors.New("cannot unmarshal DNS message") @@ -131,14 +137,14 @@ func dnsStreamRoundTrip(c Conn, id uint16, query dnsmessage.Question, b []byte) } // exchange sends a query on the connection and hopes for a response. -func (r *Resolver) exchange(ctx context.Context, server string, q dnsmessage.Question, timeout time.Duration, usetcp bool) (dnsmessage.Parser, dnsmessage.Header, error) { +func (r *Resolver) exchange(ctx context.Context, server string, q dnsmessage.Question, timeout time.Duration, useTCP bool) (dnsmessage.Parser, dnsmessage.Header, error) { q.Class = dnsmessage.ClassINET id, udpReq, tcpReq, err := newRequest(q) if err != nil { return dnsmessage.Parser{}, dnsmessage.Header{}, errCannotMarshalDNSMessage } var networks []string - if usetcp { + if useTCP { networks = []string{"tcp"} } else { networks = []string{"udp", "tcp"} @@ -247,7 +253,7 @@ func (r *Resolver) tryOneName(ctx context.Context, cfg *dnsConfig, name string, for j := uint32(0); j < sLen; j++ { server := cfg.servers[(serverOffset+j)%sLen] - p, h, err := r.exchange(ctx, server, q, cfg.timeout, cfg.usetcp) + p, h, err := r.exchange(ctx, server, q, cfg.timeout, cfg.useTCP) if err != nil { dnsErr := &DNSError{ Err: err.Error(), diff --git a/src/net/dnsclient_unix_test.go b/src/net/dnsclient_unix_test.go index c5ff4a720513c5..591b7ef03fc30c 100644 --- a/src/net/dnsclient_unix_test.go +++ b/src/net/dnsclient_unix_test.go @@ -80,7 +80,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, false) + _, h, err := r.exchange(ctx, tt.server, tt.question, time.Second, useUDPOrTCP) if err != nil { t.Error(err) continue @@ -136,7 +136,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, false) + _, h, err := r.exchange(ctx, server, tt.question, 3*time.Second, useUDPOrTCP) if err != nil { t.Error(err) continue @@ -1563,7 +1563,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, false) + _, _, err := r.exchange(ctx, "0.0.0.0", mustQuestion("com.", dnsmessage.TypeALL, dnsmessage.ClassINET), time.Second, useUDPOrTCP) if err != nil { t.Fatal("exhange failed:", err) } @@ -1643,7 +1643,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, true) + _, _, err := r.exchange(ctx, "0.0.0.0", mustQuestion("com.", dnsmessage.TypeALL, dnsmessage.ClassINET), time.Second, useTCPOnly) if err != nil { t.Fatal("exchange failed:", err) } diff --git a/src/net/dnsconfig_unix.go b/src/net/dnsconfig_unix.go index 208446a5da1bfc..775494468c27c6 100644 --- a/src/net/dnsconfig_unix.go +++ b/src/net/dnsconfig_unix.go @@ -32,7 +32,7 @@ type dnsConfig struct { err error // any error that occurs during open of resolv.conf mtime time.Time // time of resolv.conf modification soffset uint32 // used by serverOffset - usetcp bool // force usage of TCP for DNS resolutions + useTCP bool // force usage of TCP for DNS resolutions } // See resolv.conf(5) on a Linux machine. @@ -117,7 +117,11 @@ func dnsReadConfig(filename string) *dnsConfig { case s == "rotate": conf.rotate = true case s == "use-vc": - conf.usetcp = true + // Linux glibc option: + // http://man7.org/linux/man-pages/man5/resolv.conf.5.html + // "Sets RES_USEVC in _res.options. + // This option forces the use of TCP for DNS resolutions." + conf.useTCP = true default: conf.unknownOpt = true } diff --git a/src/net/dnsconfig_unix_test.go b/src/net/dnsconfig_unix_test.go index 407eedce06edda..acaa7061f322d5 100644 --- a/src/net/dnsconfig_unix_test.go +++ b/src/net/dnsconfig_unix_test.go @@ -107,7 +107,7 @@ var dnsReadConfigTests = []struct { want: &dnsConfig{ servers: defaultNS, ndots: 1, - usetcp: true, + useTCP: true, timeout: 5 * time.Second, attempts: 2, search: []string{"domain.local."},