diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml index 222e00cc4..0525be9b0 100644 --- a/.github/workflows/golangci-lint.yml +++ b/.github/workflows/golangci-lint.yml @@ -13,6 +13,6 @@ jobs: with: go-version: ${{ env.GO_VERSION }} - name: golangci-lint - uses: golangci/golangci-lint-action@55c2c1448f86e01eaae002a5a3a9624417608d84 # v6.5.2 + uses: golangci/golangci-lint-action@1481404843c368bc19ca9406f87d6e0fc97bdcfd # v7.0.0 with: - version: v1.64.8 + version: v2.0.2 diff --git a/.golangci.yml b/.golangci.yml index 20a45f5ef..9da63276a 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,13 +1,30 @@ -run: - timeout: 5m +version: "2" linters: - disable-all: true + default: none enable: - govet - ineffassign - staticcheck - - typecheck - - whitespace - - unused - - gofmt - unconvert + - unused + - whitespace + exclusions: + generated: lax + presets: + - comments + - common-false-positives + - legacy + - std-error-handling + paths: + - third_party$ + - builtin$ + - examples$ +formatters: + enable: + - gofmt + exclusions: + generated: lax + paths: + - third_party$ + - builtin$ + - examples$ diff --git a/core/dnsserver/server_quic.go b/core/dnsserver/server_quic.go index ba7867cfb..7acfd788c 100644 --- a/core/dnsserver/server_quic.go +++ b/core/dnsserver/server_quic.go @@ -63,8 +63,7 @@ func NewServerQUIC(addr string, group []*Config) (*ServerQUIC, error) { tlsConfig.NextProtos = []string{"doq"} } - var quicConfig *quic.Config - quicConfig = &quic.Config{ + var quicConfig = &quic.Config{ MaxIdleTimeout: s.idleTimeout, MaxIncomingStreams: math.MaxUint16, MaxIncomingUniStreams: math.MaxUint16, diff --git a/plugin/acl/setup.go b/plugin/acl/setup.go index 189acc6c4..cd2e222d9 100644 --- a/plugin/acl/setup.go +++ b/plugin/acl/setup.go @@ -50,15 +50,16 @@ func parse(c *caddy.Controller) (ACL, error) { p := policy{} action := strings.ToLower(c.Val()) - if action == "allow" { + switch action { + case "allow": p.action = actionAllow - } else if action == "block" { + case "block": p.action = actionBlock - } else if action == "filter" { + case "filter": p.action = actionFilter - } else if action == "drop" { + case "drop": p.action = actionDrop - } else { + default: return a, c.Errf("unexpected token %q; expect 'allow', 'block', 'filter' or 'drop'", c.Val()) } diff --git a/plugin/auto/auto.go b/plugin/auto/auto.go index 581004b20..b2a7c76ed 100644 --- a/plugin/auto/auto.go +++ b/plugin/auto/auto.go @@ -54,9 +54,9 @@ func (a Auto) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (i return plugin.NextOrFailure(a.Name(), a.Next, ctx, w, r) } - a.Zones.RLock() - z, ok := a.Zones.Z[zone] - a.Zones.RUnlock() + a.RLock() + z, ok := a.Z[zone] + a.RUnlock() if !ok || z == nil { return dns.RcodeServerFailure, nil diff --git a/plugin/auto/setup.go b/plugin/auto/setup.go index ced881366..0d34be464 100644 --- a/plugin/auto/setup.go +++ b/plugin/auto/setup.go @@ -48,11 +48,11 @@ func setup(c *caddy.Controller) error { if err := a.Notify(); err != nil { log.Warning(err) } - if a.loader.ReloadInterval == 0 { + if a.ReloadInterval == 0 { return nil } go func() { - ticker := time.NewTicker(a.loader.ReloadInterval) + ticker := time.NewTicker(a.ReloadInterval) defer ticker.Stop() for { select { @@ -71,7 +71,7 @@ func setup(c *caddy.Controller) error { c.OnShutdown(func() error { close(walkChan) - for _, z := range a.Zones.Z { + for _, z := range a.Z { z.Lock() z.OnShutdown() z.Unlock() @@ -103,8 +103,8 @@ func autoParse(c *caddy.Controller) (Auto, error) { for c.Next() { // auto [ZONES...] args := c.RemainingArgs() - a.Zones.origins = plugin.OriginsFromArgsOrServerBlock(args, c.ServerBlockKeys) - a.loader.upstream = upstream.New() + a.origins = plugin.OriginsFromArgsOrServerBlock(args, c.ServerBlockKeys) + a.upstream = upstream.New() for c.NextBlock() { switch c.Val() { @@ -112,33 +112,33 @@ func autoParse(c *caddy.Controller) (Auto, error) { if !c.NextArg() { return a, c.ArgErr() } - a.loader.directory = c.Val() - if !filepath.IsAbs(a.loader.directory) && config.Root != "" { - a.loader.directory = filepath.Join(config.Root, a.loader.directory) + a.directory = c.Val() + if !filepath.IsAbs(a.directory) && config.Root != "" { + a.directory = filepath.Join(config.Root, a.directory) } - _, err := os.Stat(a.loader.directory) + _, err := os.Stat(a.directory) if err != nil { if os.IsNotExist(err) { - log.Warningf("Directory does not exist: %s", a.loader.directory) + log.Warningf("Directory does not exist: %s", a.directory) } else { - return a, c.Errf("Unable to access root path '%s': %v", a.loader.directory, err) + return a, c.Errf("Unable to access root path '%s': %v", a.directory, err) } } // regexp template if c.NextArg() { - a.loader.re, err = regexp.Compile(c.Val()) + a.re, err = regexp.Compile(c.Val()) if err != nil { return a, err } - if a.loader.re.NumSubexp() == 0 { + if a.re.NumSubexp() == 0 { return a, c.Errf("Need at least one sub expression") } if !c.NextArg() { return a, c.ArgErr() } - a.loader.template = rewriteToExpand(c.Val()) + a.template = rewriteToExpand(c.Val()) } if c.NextArg() { @@ -157,7 +157,7 @@ func autoParse(c *caddy.Controller) (Auto, error) { if err != nil { return a, plugin.Error("file", err) } - a.loader.ReloadInterval = d + a.ReloadInterval = d case "upstream": // remove soon @@ -169,8 +169,8 @@ func autoParse(c *caddy.Controller) (Auto, error) { } } - if a.loader.ReloadInterval == nilInterval { - a.loader.ReloadInterval = 60 * time.Second + if a.ReloadInterval == nilInterval { + a.ReloadInterval = 60 * time.Second } return a, nil diff --git a/plugin/auto/setup_test.go b/plugin/auto/setup_test.go index 4fada6f6b..d66ca074e 100644 --- a/plugin/auto/setup_test.go +++ b/plugin/auto/setup_test.go @@ -111,17 +111,17 @@ func TestAutoParse(t *testing.T) { } else if err != nil && !test.shouldErr { t.Fatalf("Test %d expected no errors, but got '%v'", i, err) } else if !test.shouldErr { - if a.loader.directory != test.expectedDirectory { - t.Fatalf("Test %d expected %v, got %v", i, test.expectedDirectory, a.loader.directory) + if a.directory != test.expectedDirectory { + t.Fatalf("Test %d expected %v, got %v", i, test.expectedDirectory, a.directory) } - if a.loader.template != test.expectedTempl { - t.Fatalf("Test %d expected %v, got %v", i, test.expectedTempl, a.loader.template) + if a.template != test.expectedTempl { + t.Fatalf("Test %d expected %v, got %v", i, test.expectedTempl, a.template) } - if a.loader.re.String() != test.expectedRe { - t.Fatalf("Test %d expected %v, got %v", i, test.expectedRe, a.loader.re) + if a.re.String() != test.expectedRe { + t.Fatalf("Test %d expected %v, got %v", i, test.expectedRe, a.re) } - if a.loader.ReloadInterval != test.expectedReloadInterval { - t.Fatalf("Test %d expected %v, got %v", i, test.expectedReloadInterval, a.loader.ReloadInterval) + if a.ReloadInterval != test.expectedReloadInterval { + t.Fatalf("Test %d expected %v, got %v", i, test.expectedReloadInterval, a.ReloadInterval) } } } diff --git a/plugin/auto/walk.go b/plugin/auto/walk.go index 38f637592..e1743e232 100644 --- a/plugin/auto/walk.go +++ b/plugin/auto/walk.go @@ -15,11 +15,11 @@ func (a Auto) Walk() error { // TODO(miek): should add something so that we don't stomp on each other. toDelete := make(map[string]bool) - for _, n := range a.Zones.Names() { + for _, n := range a.Names() { toDelete[n] = true } - filepath.Walk(a.loader.directory, func(path string, info os.FileInfo, e error) error { + filepath.Walk(a.directory, func(path string, info os.FileInfo, e error) error { if e != nil { log.Warningf("error reading %v: %v", path, e) } @@ -27,12 +27,12 @@ func (a Auto) Walk() error { return nil } - match, origin := matches(a.loader.re, info.Name(), a.loader.template) + match, origin := matches(a.re, info.Name(), a.template) if !match { return nil } - if z, ok := a.Zones.Z[origin]; ok { + if z, ok := a.Z[origin]; ok { // we already have this zone toDelete[origin] = false z.SetFile(path) @@ -53,10 +53,10 @@ func (a Auto) Walk() error { return nil } - zo.ReloadInterval = a.loader.ReloadInterval - zo.Upstream = a.loader.upstream + zo.ReloadInterval = a.ReloadInterval + zo.Upstream = a.upstream - a.Zones.Add(zo, origin, a.transfer) + a.Add(zo, origin, a.transfer) if a.metrics != nil { a.metrics.AddZone(origin) @@ -78,7 +78,7 @@ func (a Auto) Walk() error { a.metrics.RemoveZone(origin) } - a.Zones.Remove(origin) + a.Remove(origin) log.Infof("Deleting zone `%s'", origin) } diff --git a/plugin/auto/walk_test.go b/plugin/auto/walk_test.go index 062c99243..25e89005c 100644 --- a/plugin/auto/walk_test.go +++ b/plugin/auto/walk_test.go @@ -38,7 +38,7 @@ func TestWalk(t *testing.T) { // db.example.org and db.example.com should be here (created in createFiles) for _, name := range []string{"example.com.", "example.org."} { - if _, ok := a.Zones.Z[name]; !ok { + if _, ok := a.Z[name]; !ok { t.Errorf("%s should have been added", name) } } diff --git a/plugin/auto/watcher_test.go b/plugin/auto/watcher_test.go index 9a256f443..0c7e482e6 100644 --- a/plugin/auto/watcher_test.go +++ b/plugin/auto/watcher_test.go @@ -27,10 +27,10 @@ func TestWatcher(t *testing.T) { a.Walk() // example.org and example.com should exist, we have 3 apex rrs and 1 "real" record. All() returns the non-apex ones. - if x := len(a.Zones.Z["example.org."].All()); x != 1 { + if x := len(a.Z["example.org."].All()); x != 1 { t.Fatalf("Expected 1 RRs, got %d", x) } - if x := len(a.Zones.Z["example.com."].All()); x != 1 { + if x := len(a.Z["example.com."].All()); x != 1 { t.Fatalf("Expected 1 RRs, got %d", x) } @@ -41,10 +41,10 @@ func TestWatcher(t *testing.T) { a.Walk() - if _, ok := a.Zones.Z["example.com."]; ok { + if _, ok := a.Z["example.com."]; ok { t.Errorf("Expected %q to be gone.", "example.com.") } - if _, ok := a.Zones.Z["example.org."]; !ok { + if _, ok := a.Z["example.org."]; !ok { t.Errorf("Expected %q to still be there.", "example.org.") } } @@ -83,7 +83,7 @@ func TestSymlinks(t *testing.T) { a.Walk() - if storedZone, ok := a.Zones.Z["example.com."]; ok { + if storedZone, ok := a.Z["example.com."]; ok { storedFile := storedZone.File() if storedFile != newFile { t.Errorf("Expected %q to reflect new path %q", storedFile, newFile) diff --git a/plugin/auto/xfr.go b/plugin/auto/xfr.go index e6a9ba5a5..93e20bc29 100644 --- a/plugin/auto/xfr.go +++ b/plugin/auto/xfr.go @@ -8,9 +8,9 @@ import ( // Transfer implements the transfer.Transfer interface. func (a Auto) Transfer(zone string, serial uint32) (<-chan []dns.RR, error) { - a.Zones.RLock() - z, ok := a.Zones.Z[zone] - a.Zones.RUnlock() + a.RLock() + z, ok := a.Z[zone] + a.RUnlock() if !ok || z == nil { return nil, transfer.ErrNotAuthoritative @@ -21,7 +21,7 @@ func (a Auto) Transfer(zone string, serial uint32) (<-chan []dns.RR, error) { // Notify sends notifies for all zones with secondaries configured with the transfer plugin func (a Auto) Notify() error { var err error - for _, origin := range a.Zones.Names() { + for _, origin := range a.Names() { e := a.transfer.Notify(origin) if e != nil { err = e diff --git a/plugin/azure/azure.go b/plugin/azure/azure.go index e236a08b2..369d33705 100644 --- a/plugin/azure/azure.go +++ b/plugin/azure/azure.go @@ -138,26 +138,26 @@ func (h *Azure) updateZones(ctx context.Context) error { func updateZoneFromPublicResourceSet(recordSet publicdns.RecordSetListResultPage, newZ *file.Zone) { for _, result := range *(recordSet.Response().Value) { - resultFqdn := *(result.RecordSetProperties.Fqdn) - resultTTL := uint32(*(result.RecordSetProperties.TTL)) - if result.RecordSetProperties.ARecords != nil { - for _, A := range *(result.RecordSetProperties.ARecords) { + resultFqdn := *(result.Fqdn) + resultTTL := uint32(*(result.TTL)) + if result.ARecords != nil { + for _, A := range *(result.ARecords) { a := &dns.A{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeA, Class: dns.ClassINET, Ttl: resultTTL}, A: net.ParseIP(*(A.Ipv4Address))} newZ.Insert(a) } } - if result.RecordSetProperties.AaaaRecords != nil { - for _, AAAA := range *(result.RecordSetProperties.AaaaRecords) { + if result.AaaaRecords != nil { + for _, AAAA := range *(result.AaaaRecords) { aaaa := &dns.AAAA{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeAAAA, Class: dns.ClassINET, Ttl: resultTTL}, AAAA: net.ParseIP(*(AAAA.Ipv6Address))} newZ.Insert(aaaa) } } - if result.RecordSetProperties.MxRecords != nil { - for _, MX := range *(result.RecordSetProperties.MxRecords) { + if result.MxRecords != nil { + for _, MX := range *(result.MxRecords) { mx := &dns.MX{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeMX, Class: dns.ClassINET, Ttl: resultTTL}, Preference: uint16(*(MX.Preference)), Mx: dns.Fqdn(*(MX.Exchange))} @@ -165,16 +165,16 @@ func updateZoneFromPublicResourceSet(recordSet publicdns.RecordSetListResultPage } } - if result.RecordSetProperties.PtrRecords != nil { - for _, PTR := range *(result.RecordSetProperties.PtrRecords) { + if result.PtrRecords != nil { + for _, PTR := range *(result.PtrRecords) { ptr := &dns.PTR{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypePTR, Class: dns.ClassINET, Ttl: resultTTL}, Ptr: dns.Fqdn(*(PTR.Ptrdname))} newZ.Insert(ptr) } } - if result.RecordSetProperties.SrvRecords != nil { - for _, SRV := range *(result.RecordSetProperties.SrvRecords) { + if result.SrvRecords != nil { + for _, SRV := range *(result.SrvRecords) { srv := &dns.SRV{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeSRV, Class: dns.ClassINET, Ttl: resultTTL}, Priority: uint16(*(SRV.Priority)), Weight: uint16(*(SRV.Weight)), @@ -184,24 +184,24 @@ func updateZoneFromPublicResourceSet(recordSet publicdns.RecordSetListResultPage } } - if result.RecordSetProperties.TxtRecords != nil { - for _, TXT := range *(result.RecordSetProperties.TxtRecords) { + if result.TxtRecords != nil { + for _, TXT := range *(result.TxtRecords) { txt := &dns.TXT{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeTXT, Class: dns.ClassINET, Ttl: resultTTL}, Txt: *(TXT.Value)} newZ.Insert(txt) } } - if result.RecordSetProperties.NsRecords != nil { - for _, NS := range *(result.RecordSetProperties.NsRecords) { + if result.NsRecords != nil { + for _, NS := range *(result.NsRecords) { ns := &dns.NS{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeNS, Class: dns.ClassINET, Ttl: resultTTL}, Ns: *(NS.Nsdname)} newZ.Insert(ns) } } - if result.RecordSetProperties.SoaRecord != nil { - SOA := result.RecordSetProperties.SoaRecord + if result.SoaRecord != nil { + SOA := result.SoaRecord soa := &dns.SOA{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeSOA, Class: dns.ClassINET, Ttl: resultTTL}, Minttl: uint32(*(SOA.MinimumTTL)), Expire: uint32(*(SOA.ExpireTime)), @@ -213,8 +213,8 @@ func updateZoneFromPublicResourceSet(recordSet publicdns.RecordSetListResultPage newZ.Insert(soa) } - if result.RecordSetProperties.CnameRecord != nil { - CNAME := result.RecordSetProperties.CnameRecord.Cname + if result.CnameRecord != nil { + CNAME := result.CnameRecord.Cname cname := &dns.CNAME{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeCNAME, Class: dns.ClassINET, Ttl: resultTTL}, Target: dns.Fqdn(*CNAME)} newZ.Insert(cname) @@ -224,25 +224,25 @@ func updateZoneFromPublicResourceSet(recordSet publicdns.RecordSetListResultPage func updateZoneFromPrivateResourceSet(recordSet privatedns.RecordSetListResultPage, newZ *file.Zone) { for _, result := range *(recordSet.Response().Value) { - resultFqdn := *(result.RecordSetProperties.Fqdn) - resultTTL := uint32(*(result.RecordSetProperties.TTL)) - if result.RecordSetProperties.ARecords != nil { - for _, A := range *(result.RecordSetProperties.ARecords) { + resultFqdn := *(result.Fqdn) + resultTTL := uint32(*(result.TTL)) + if result.ARecords != nil { + for _, A := range *(result.ARecords) { a := &dns.A{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeA, Class: dns.ClassINET, Ttl: resultTTL}, A: net.ParseIP(*(A.Ipv4Address))} newZ.Insert(a) } } - if result.RecordSetProperties.AaaaRecords != nil { - for _, AAAA := range *(result.RecordSetProperties.AaaaRecords) { + if result.AaaaRecords != nil { + for _, AAAA := range *(result.AaaaRecords) { aaaa := &dns.AAAA{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeAAAA, Class: dns.ClassINET, Ttl: resultTTL}, AAAA: net.ParseIP(*(AAAA.Ipv6Address))} newZ.Insert(aaaa) } } - if result.RecordSetProperties.MxRecords != nil { - for _, MX := range *(result.RecordSetProperties.MxRecords) { + if result.MxRecords != nil { + for _, MX := range *(result.MxRecords) { mx := &dns.MX{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeMX, Class: dns.ClassINET, Ttl: resultTTL}, Preference: uint16(*(MX.Preference)), Mx: dns.Fqdn(*(MX.Exchange))} @@ -250,16 +250,16 @@ func updateZoneFromPrivateResourceSet(recordSet privatedns.RecordSetListResultPa } } - if result.RecordSetProperties.PtrRecords != nil { - for _, PTR := range *(result.RecordSetProperties.PtrRecords) { + if result.PtrRecords != nil { + for _, PTR := range *(result.PtrRecords) { ptr := &dns.PTR{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypePTR, Class: dns.ClassINET, Ttl: resultTTL}, Ptr: dns.Fqdn(*(PTR.Ptrdname))} newZ.Insert(ptr) } } - if result.RecordSetProperties.SrvRecords != nil { - for _, SRV := range *(result.RecordSetProperties.SrvRecords) { + if result.SrvRecords != nil { + for _, SRV := range *(result.SrvRecords) { srv := &dns.SRV{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeSRV, Class: dns.ClassINET, Ttl: resultTTL}, Priority: uint16(*(SRV.Priority)), Weight: uint16(*(SRV.Weight)), @@ -269,16 +269,16 @@ func updateZoneFromPrivateResourceSet(recordSet privatedns.RecordSetListResultPa } } - if result.RecordSetProperties.TxtRecords != nil { - for _, TXT := range *(result.RecordSetProperties.TxtRecords) { + if result.TxtRecords != nil { + for _, TXT := range *(result.TxtRecords) { txt := &dns.TXT{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeTXT, Class: dns.ClassINET, Ttl: resultTTL}, Txt: *(TXT.Value)} newZ.Insert(txt) } } - if result.RecordSetProperties.SoaRecord != nil { - SOA := result.RecordSetProperties.SoaRecord + if result.SoaRecord != nil { + SOA := result.SoaRecord soa := &dns.SOA{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeSOA, Class: dns.ClassINET, Ttl: resultTTL}, Minttl: uint32(*(SOA.MinimumTTL)), Expire: uint32(*(SOA.ExpireTime)), @@ -290,8 +290,8 @@ func updateZoneFromPrivateResourceSet(recordSet privatedns.RecordSetListResultPa newZ.Insert(soa) } - if result.RecordSetProperties.CnameRecord != nil { - CNAME := result.RecordSetProperties.CnameRecord.Cname + if result.CnameRecord != nil { + CNAME := result.CnameRecord.Cname cname := &dns.CNAME{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeCNAME, Class: dns.ClassINET, Ttl: resultTTL}, Target: dns.Fqdn(*CNAME)} newZ.Insert(cname) diff --git a/plugin/cache/cache.go b/plugin/cache/cache.go index 1378263b8..4a6377b9a 100644 --- a/plugin/cache/cache.go +++ b/plugin/cache/cache.go @@ -189,11 +189,12 @@ func (w *ResponseWriter) WriteMsg(res *dns.Msg) error { msgTTL := dnsutil.MinimalTTL(res, mt) var duration time.Duration - if mt == response.NameError || mt == response.NoData { + switch mt { + case response.NameError, response.NoData: duration = computeTTL(msgTTL, w.minnttl, w.nttl) - } else if mt == response.ServerError { + case response.ServerError: duration = w.failttl - } else { + default: duration = computeTTL(msgTTL, w.minpttl, w.pttl) } diff --git a/plugin/cache/cache_test.go b/plugin/cache/cache_test.go index 947c67516..b9c692fd4 100644 --- a/plugin/cache/cache_test.go +++ b/plugin/cache/cache_test.go @@ -467,14 +467,15 @@ func TestServeFromStaleCacheFetchVerify(t *testing.T) { rec := dnstest.NewRecorder(&test.ResponseWriter{}) c.now = func() time.Time { return time.Now().Add(time.Duration(tt.futureMinutes) * time.Minute) } - if tt.upstreamRCode == dns.RcodeSuccess { + switch tt.upstreamRCode { + case dns.RcodeSuccess: c.Next = ttlBackend(tt.upstreamTtl) - } else if tt.upstreamRCode == dns.RcodeServerFailure { + case dns.RcodeServerFailure: // Make upstream fail, should now rely on cache during the c.staleUpTo period c.Next = servFailBackend(tt.upstreamTtl) - } else if tt.upstreamRCode == dns.RcodeNameError { + case dns.RcodeNameError: c.Next = nxDomainBackend(tt.upstreamTtl) - } else { + default: t.Fatal("upstream code not implemented") } @@ -485,12 +486,13 @@ func TestServeFromStaleCacheFetchVerify(t *testing.T) { t.Errorf("Test %d: expected rcode=%v, got rcode=%v", i, tt.expectedRCode, ret) continue } - if ret == dns.RcodeSuccess { + switch ret { + case dns.RcodeSuccess: recTtl := rec.Msg.Answer[0].Header().Ttl if tt.expectedTtl != int(recTtl) { t.Errorf("Test %d: expected TTL=%d, got TTL=%d", i, tt.expectedTtl, recTtl) } - } else if ret == dns.RcodeNameError { + case dns.RcodeNameError: soaTtl := rec.Msg.Ns[0].Header().Ttl if tt.expectedTtl != int(soaTtl) { t.Errorf("Test %d: expected TTL=%d, got TTL=%d", i, tt.expectedTtl, soaTtl) @@ -631,7 +633,7 @@ func nxDomainBackend(ttl int) plugin.Handler { m.Ns = []dns.RR{test.SOA(fmt.Sprintf("example.org. %d IN SOA sns.dns.icann.org. noc.dns.icann.org. 2016082540 7200 3600 1209600 3600", ttl))} - m.MsgHdr.Rcode = dns.RcodeNameError + m.Rcode = dns.RcodeNameError w.WriteMsg(m) return dns.RcodeNameError, nil }) @@ -657,7 +659,7 @@ func servFailBackend(ttl int) plugin.Handler { m.Ns = []dns.RR{test.SOA(fmt.Sprintf("example.org. %d IN SOA sns.dns.icann.org. noc.dns.icann.org. 2016082540 7200 3600 1209600 3600", ttl))} - m.MsgHdr.Rcode = dns.RcodeServerFailure + m.Rcode = dns.RcodeServerFailure w.WriteMsg(m) return dns.RcodeServerFailure, nil }) diff --git a/plugin/cache/handler.go b/plugin/cache/handler.go index 38a8bfebc..394dc7b61 100644 --- a/plugin/cache/handler.go +++ b/plugin/cache/handler.go @@ -100,7 +100,7 @@ func (c *Cache) doPrefetch(ctx context.Context, state request.Request, cw *Respo // that we've gathered sofar. See we copy the frequencies info back // into the new item that was stored in the cache. if i1 := c.exists(state); i1 != nil { - i1.Freq.Reset(now, i.Freq.Hits()) + i1.Reset(now, i.Hits()) } } @@ -112,9 +112,9 @@ func (c *Cache) shouldPrefetch(i *item, now time.Time) bool { if c.prefetch <= 0 { return false } - i.Freq.Update(c.duration, now) + i.Update(c.duration, now) threshold := int(math.Ceil(float64(c.percentage) / 100 * float64(i.origTTL))) - return i.Freq.Hits() >= c.prefetch && i.ttl(now) <= threshold + return i.Hits() >= c.prefetch && i.ttl(now) <= threshold } // Name implements the Handler interface. diff --git a/plugin/dns64/dns64.go b/plugin/dns64/dns64.go index 0a6176fcf..5497dba25 100644 --- a/plugin/dns64/dns64.go +++ b/plugin/dns64/dns64.go @@ -62,7 +62,7 @@ func (d *DNS64) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) RequestsTranslatedCount.WithLabelValues(metrics.WithServer(ctx)).Inc() w.WriteMsg(msg) - return msg.MsgHdr.Rcode, nil + return msg.Rcode, nil } // Name implements the Handler interface. diff --git a/plugin/dnssec/setup.go b/plugin/dnssec/setup.go index 9a87c41c0..0b3574fb9 100644 --- a/plugin/dnssec/setup.go +++ b/plugin/dnssec/setup.go @@ -117,7 +117,8 @@ func keyParse(c *caddy.Controller) ([]*DNSKEY, error) { return nil, c.ArgErr() } value := c.Val() - if value == "file" { + switch value { + case "file": ks := c.RemainingArgs() if len(ks) == 0 { return nil, c.ArgErr() @@ -141,7 +142,7 @@ func keyParse(c *caddy.Controller) ([]*DNSKEY, error) { } keys = append(keys, k) } - } else if value == "aws_secretsmanager" { + case "aws_secretsmanager": ks := c.RemainingArgs() if len(ks) == 0 { return nil, c.ArgErr() diff --git a/plugin/file/closest.go b/plugin/file/closest.go index 5059194e6..86c90fccd 100644 --- a/plugin/file/closest.go +++ b/plugin/file/closest.go @@ -10,7 +10,7 @@ import ( func (z *Zone) ClosestEncloser(qname string) (*tree.Elem, bool) { offset, end := dns.NextLabel(qname, 0) for !end { - elem, _ := z.Tree.Search(qname) + elem, _ := z.Search(qname) if elem != nil { return elem, true } @@ -19,5 +19,5 @@ func (z *Zone) ClosestEncloser(qname string) (*tree.Elem, bool) { offset, end = dns.NextLabel(qname, offset) } - return z.Tree.Search(z.origin) + return z.Search(z.origin) } diff --git a/plugin/file/file.go b/plugin/file/file.go index 468b80a98..323aa69ae 100644 --- a/plugin/file/file.go +++ b/plugin/file/file.go @@ -42,7 +42,7 @@ func (f File) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (i return plugin.NextOrFailure(f.Name(), f.Next, ctx, w, r) } - z, ok := f.Zones.Z[zone] + z, ok := f.Z[zone] if !ok || z == nil { return dns.RcodeServerFailure, nil } diff --git a/plugin/file/lookup.go b/plugin/file/lookup.go index 3f6929939..7e1c6e8fb 100644 --- a/plugin/file/lookup.go +++ b/plugin/file/lookup.go @@ -330,11 +330,11 @@ func (z *Zone) externalLookup(ctx context.Context, state request.Request, elem * } targetName := rrs[0].(*dns.CNAME).Target - elem, _ = z.Tree.Search(targetName) + elem, _ = z.Search(targetName) if elem == nil { lookupRRs, result := z.doLookup(ctx, state, targetName, qtype) rrs = append(rrs, lookupRRs...) - return rrs, z.Apex.ns(do), nil, result + return rrs, z.ns(do), nil, result } i := 0 @@ -350,16 +350,16 @@ Redo: rrs = append(rrs, sigs...) } targetName := cname[0].(*dns.CNAME).Target - elem, _ = z.Tree.Search(targetName) + elem, _ = z.Search(targetName) if elem == nil { lookupRRs, result := z.doLookup(ctx, state, targetName, qtype) rrs = append(rrs, lookupRRs...) - return rrs, z.Apex.ns(do), nil, result + return rrs, z.ns(do), nil, result } i++ if i > 8 { - return rrs, z.Apex.ns(do), nil, Success + return rrs, z.ns(do), nil, Success } goto Redo @@ -376,7 +376,7 @@ Redo: } } - return rrs, z.Apex.ns(do), nil, Success + return rrs, z.ns(do), nil, Success } func (z *Zone) doLookup(ctx context.Context, state request.Request, target string, qtype uint16) ([]dns.RR, Result) { @@ -414,7 +414,7 @@ func (z *Zone) additionalProcessing(answer []dns.RR, do bool) (extra []dns.RR) { continue } - elem, _ := z.Tree.Search(name) + elem, _ := z.Search(name) if elem == nil { continue } diff --git a/plugin/file/reload.go b/plugin/file/reload.go index cdb50f439..4db8e11d2 100644 --- a/plugin/file/reload.go +++ b/plugin/file/reload.go @@ -42,7 +42,7 @@ func (z *Zone) Reload(t *transfer.Transfer) error { z.Tree = zone.Tree z.Unlock() - log.Infof("Successfully reloaded zone %q in %q with %d SOA serial", z.origin, zFile, z.Apex.SOA.Serial) + log.Infof("Successfully reloaded zone %q in %q with %d SOA serial", z.origin, zFile, z.SOA.Serial) if t != nil { if err := t.Notify(z.origin); err != nil { log.Warningf("Failed sending notifies: %s", err) @@ -62,8 +62,8 @@ func (z *Zone) Reload(t *transfer.Transfer) error { func (z *Zone) SOASerialIfDefined() int64 { z.RLock() defer z.RUnlock() - if z.Apex.SOA != nil { - return int64(z.Apex.SOA.Serial) + if z.SOA != nil { + return int64(z.SOA.Serial) } return -1 } diff --git a/plugin/file/secondary.go b/plugin/file/secondary.go index 932916bb3..9898c697f 100644 --- a/plugin/file/secondary.go +++ b/plugin/file/secondary.go @@ -89,10 +89,10 @@ Transfer: if serial == -1 { return false, Err } - if z.Apex.SOA == nil { + if z.SOA == nil { return true, Err } - return less(z.Apex.SOA.Serial, uint32(serial)), Err + return less(z.SOA.Serial, uint32(serial)), Err } // less returns true of a is smaller than b when taking RFC 1982 serial arithmetic into account. @@ -109,15 +109,15 @@ func less(a, b uint32) bool { // will be marked expired. func (z *Zone) Update() error { // If we don't have a SOA, we don't have a zone, wait for it to appear. - for z.Apex.SOA == nil { + for z.SOA == nil { time.Sleep(1 * time.Second) } retryActive := false Restart: - refresh := time.Second * time.Duration(z.Apex.SOA.Refresh) - retry := time.Second * time.Duration(z.Apex.SOA.Retry) - expire := time.Second * time.Duration(z.Apex.SOA.Expire) + refresh := time.Second * time.Duration(z.SOA.Refresh) + retry := time.Second * time.Duration(z.SOA.Retry) + expire := time.Second * time.Duration(z.SOA.Expire) refreshTicker := time.NewTicker(refresh) retryTicker := time.NewTicker(retry) diff --git a/plugin/file/secondary_test.go b/plugin/file/secondary_test.go index 67d151e53..3e36c4b4e 100644 --- a/plugin/file/secondary_test.go +++ b/plugin/file/secondary_test.go @@ -84,7 +84,7 @@ func TestShouldTransfer(t *testing.T) { t.Fatalf("ShouldTransfer should return true for serial: %d", soa.serial) } // Serial smaller - z.Apex.SOA = test.SOA(fmt.Sprintf("%s IN SOA bla. bla. %d 0 0 0 0 ", testZone, soa.serial-1)) + z.SOA = test.SOA(fmt.Sprintf("%s IN SOA bla. bla. %d 0 0 0 0 ", testZone, soa.serial-1)) should, err = z.shouldTransfer() if err != nil { t.Fatalf("Unable to run shouldTransfer: %v", err) @@ -93,7 +93,7 @@ func TestShouldTransfer(t *testing.T) { t.Fatalf("ShouldTransfer should return true for serial: %q", soa.serial-1) } // Serial equal - z.Apex.SOA = test.SOA(fmt.Sprintf("%s IN SOA bla. bla. %d 0 0 0 0 ", testZone, soa.serial)) + z.SOA = test.SOA(fmt.Sprintf("%s IN SOA bla. bla. %d 0 0 0 0 ", testZone, soa.serial)) should, err = z.shouldTransfer() if err != nil { t.Fatalf("Unable to run shouldTransfer: %v", err) @@ -116,7 +116,7 @@ func TestTransferIn(t *testing.T) { if err := z.TransferIn(); err != nil { t.Fatalf("Unable to run TransferIn: %v", err) } - if z.Apex.SOA.String() != fmt.Sprintf("%s 3600 IN SOA bla. bla. 250 0 0 0 0", testZone) { + if z.SOA.String() != fmt.Sprintf("%s 3600 IN SOA bla. bla. 250 0 0 0 0", testZone) { t.Fatalf("Unknown SOA transferred") } } diff --git a/plugin/file/xfr.go b/plugin/file/xfr.go index 28c3a3a9d..eab880c33 100644 --- a/plugin/file/xfr.go +++ b/plugin/file/xfr.go @@ -9,7 +9,7 @@ import ( // Transfer implements the transfer.Transfer interface. func (f File) Transfer(zone string, serial uint32) (<-chan []dns.RR, error) { - z, ok := f.Zones.Z[zone] + z, ok := f.Z[zone] if !ok || z == nil { return nil, transfer.ErrNotAuthoritative } diff --git a/plugin/file/zone.go b/plugin/file/zone.go index aa5f3cac0..0125a1076 100644 --- a/plugin/file/zone.go +++ b/plugin/file/zone.go @@ -80,14 +80,14 @@ func (z *Zone) Insert(r dns.RR) error { r.(*dns.NS).Ns = strings.ToLower(r.(*dns.NS).Ns) if r.Header().Name == z.origin { - z.Apex.NS = append(z.Apex.NS, r) + z.NS = append(z.NS, r) return nil } case dns.TypeSOA: r.(*dns.SOA).Ns = strings.ToLower(r.(*dns.SOA).Ns) r.(*dns.SOA).Mbox = strings.ToLower(r.(*dns.SOA).Mbox) - z.Apex.SOA = r.(*dns.SOA) + z.SOA = r.(*dns.SOA) return nil case dns.TypeNSEC3, dns.TypeNSEC3PARAM: return fmt.Errorf("NSEC3 zone is not supported, dropping RR: %s for zone: %s", r.Header().Name, z.origin) @@ -95,11 +95,11 @@ func (z *Zone) Insert(r dns.RR) error { x := r.(*dns.RRSIG) switch x.TypeCovered { case dns.TypeSOA: - z.Apex.SIGSOA = append(z.Apex.SIGSOA, x) + z.SIGSOA = append(z.SIGSOA, x) return nil case dns.TypeNS: if r.Header().Name == z.origin { - z.Apex.SIGNS = append(z.Apex.SIGNS, x) + z.SIGNS = append(z.SIGNS, x) return nil } } @@ -133,20 +133,20 @@ func (z *Zone) SetFile(path string) { func (z *Zone) ApexIfDefined() ([]dns.RR, error) { z.RLock() defer z.RUnlock() - if z.Apex.SOA == nil { + if z.SOA == nil { return nil, fmt.Errorf("no SOA") } - rrs := []dns.RR{z.Apex.SOA} + rrs := []dns.RR{z.SOA} - if len(z.Apex.SIGSOA) > 0 { - rrs = append(rrs, z.Apex.SIGSOA...) + if len(z.SIGSOA) > 0 { + rrs = append(rrs, z.SIGSOA...) } - if len(z.Apex.NS) > 0 { - rrs = append(rrs, z.Apex.NS...) + if len(z.NS) > 0 { + rrs = append(rrs, z.NS...) } - if len(z.Apex.SIGNS) > 0 { - rrs = append(rrs, z.Apex.SIGNS...) + if len(z.SIGNS) > 0 { + rrs = append(rrs, z.SIGNS...) } return rrs, nil diff --git a/plugin/geoip/geoip.go b/plugin/geoip/geoip.go index 3451c82a0..765ac05c0 100644 --- a/plugin/geoip/geoip.go +++ b/plugin/geoip/geoip.go @@ -91,8 +91,8 @@ func (g GeoIP) Metadata(ctx context.Context, state request.Request) context.Cont } } - switch { - case g.db.provides&city == city: + switch g.db.provides & city { + case city: data, err := g.db.City(srcIP) if err != nil { log.Debugf("Setting up metadata failed due to database lookup error: %v", err) diff --git a/plugin/header/setup.go b/plugin/header/setup.go index 3d6facf08..9c1bdeced 100644 --- a/plugin/header/setup.go +++ b/plugin/header/setup.go @@ -37,7 +37,8 @@ func parse(c *caddy.Controller) ([]Rule, []Rule, error) { selector := strings.ToLower(c.Val()) var action string - if selector == "set" || selector == "clear" { + switch selector { + case "set", "clear": log.Warningf("The selector for header rule in line %d isn't explicit defined. "+ "Assume rule applies for selector 'response'. This syntax is deprecated. "+ "In future versions of CoreDNS the selector must be explicit defined.", @@ -45,11 +46,11 @@ func parse(c *caddy.Controller) ([]Rule, []Rule, error) { action = selector selector = "response" - } else if selector == "query" || selector == "response" { + case "query", "response": if c.NextArg() { action = c.Val() } - } else { + default: return nil, nil, fmt.Errorf("setting up rule: invalid selector=%s should be query or response", selector) } diff --git a/plugin/k8s_external/transfer_test.go b/plugin/k8s_external/transfer_test.go index 4f525f99f..26642bb54 100644 --- a/plugin/k8s_external/transfer_test.go +++ b/plugin/k8s_external/transfer_test.go @@ -13,8 +13,7 @@ import ( ) func TestImplementsTransferer(t *testing.T) { - var e plugin.Handler - e = &External{} + var e plugin.Handler = &External{} _, ok := e.(transfer.Transferer) if !ok { t.Error("Transferer not implemented") diff --git a/plugin/kubernetes/controller_test.go b/plugin/kubernetes/controller_test.go index c36ab6605..1b51954fe 100644 --- a/plugin/kubernetes/controller_test.go +++ b/plugin/kubernetes/controller_test.go @@ -140,8 +140,8 @@ func generateEndpointSlices(cidr string, client kubernetes.Interface) { Hostname: &hostname, }, } - eps.ObjectMeta.Name = "svc" + strconv.Itoa(count) - eps.ObjectMeta.Labels = map[string]string{discovery.LabelServiceName: eps.ObjectMeta.Name} + eps.Name = "svc" + strconv.Itoa(count) + eps.Labels = map[string]string{discovery.LabelServiceName: eps.Name} _, err := client.DiscoveryV1().EndpointSlices("testns").Create(ctx, eps, meta.CreateOptions{}) if err != nil { log.Fatal(err) @@ -175,11 +175,12 @@ func generateSvcs(cidr string, svcType string, client kubernetes.Interface) { } default: for ip := ip.Mask(ipnet.Mask); ipnet.Contains(ip); inc(ip) { - if count%3 == 0 { + switch count % 3 { + case 0: createClusterIPSvc(count, client, ip) - } else if count%3 == 1 { + case 1: createHeadlessSvc(count, client, ip) - } else if count%3 == 2 { + case 2: createExternalSvc(count, client, ip) } count++ diff --git a/plugin/kubernetes/external.go b/plugin/kubernetes/external.go index f6705d22f..fa167782c 100644 --- a/plugin/kubernetes/external.go +++ b/plugin/kubernetes/external.go @@ -62,10 +62,11 @@ func (k *Kubernetes) External(state request.Request, headless bool) ([]msg.Servi service := segs[last] last-- - if last == 0 { + switch last { + case 0: endpoint = stripUnderscore(segs[last]) last-- - } else if last == 1 { + case 1: protocol = stripUnderscore(segs[last]) port = stripUnderscore(segs[last-1]) last -= 2 diff --git a/plugin/kubernetes/kubernetes.go b/plugin/kubernetes/kubernetes.go index e4733c6f2..ad9c05008 100644 --- a/plugin/kubernetes/kubernetes.go +++ b/plugin/kubernetes/kubernetes.go @@ -332,10 +332,10 @@ func endpointHostname(addr object.EndpointAddress, endpointNameMode bool) string return addr.TargetRefName } if strings.Contains(addr.IP, ".") { - return strings.Replace(addr.IP, ".", "-", -1) + return strings.ReplaceAll(addr.IP, ".", "-") } if strings.Contains(addr.IP, ":") { - return strings.Replace(addr.IP, ":", "-", -1) + return strings.ReplaceAll(addr.IP, ":", "-") } return "" } @@ -428,7 +428,7 @@ func (k *Kubernetes) findServices(r recordRequest, zone string) (services []msg. zonePath := msg.Path(zone, coredns) for _, svc := range serviceList { - if !(match(r.namespace, svc.Namespace) && match(r.service, svc.Name)) { + if !match(r.namespace, svc.Namespace) || !match(r.service, svc.Name) { continue } diff --git a/plugin/kubernetes/object/pod.go b/plugin/kubernetes/object/pod.go index aa69150aa..8a9c924b8 100644 --- a/plugin/kubernetes/object/pod.go +++ b/plugin/kubernetes/object/pod.go @@ -36,7 +36,7 @@ func ToPod(obj meta.Object) (meta.Object, error) { Name: apiPod.GetName(), Labels: apiPod.GetLabels(), } - t := apiPod.ObjectMeta.DeletionTimestamp + t := apiPod.DeletionTimestamp if t != nil && !(*t).Time.IsZero() { // if the pod is in the process of termination, return an error so it can be ignored // during add/update event processing diff --git a/plugin/loadbalance/setup.go b/plugin/loadbalance/setup.go index 5706aeb41..6a84e31fd 100644 --- a/plugin/loadbalance/setup.go +++ b/plugin/loadbalance/setup.go @@ -15,7 +15,7 @@ import ( ) var log = clog.NewWithPlugin("loadbalance") -var errOpen = errors.New("Weight file open error") +var errOpen = errors.New("weight file open error") func init() { plugin.Register("loadbalance", setup) } diff --git a/plugin/loadbalance/weighted.go b/plugin/loadbalance/weighted.go index 39b178017..275af6f88 100644 --- a/plugin/loadbalance/weighted.go +++ b/plugin/loadbalance/weighted.go @@ -90,7 +90,7 @@ func createWeightedFuncs(weightFileName string, randomGen: &randomUint{}, }, } - lb.weighted.randomGen.randInit() + lb.weighted.randInit() lb.shuffleFunc = func(res *dns.Msg) *dns.Msg { return weightedShuffle(res, lb.weighted) @@ -285,7 +285,7 @@ func (w *weightedRR) parseWeights(scanner *bufio.Scanner) (map[string]weights, e case 1: // (domain) name sanity check if net.ParseIP(fields[0]) != nil { - return nil, fmt.Errorf("Wrong domain name:\"%s\" in weight file %s. (Maybe a missing weight value?)", + return nil, fmt.Errorf("wrong domain name:\"%s\" in weight file %s. (Maybe a missing weight value?)", fields[0], w.fileName) } dname = fields[0] @@ -304,25 +304,25 @@ func (w *weightedRR) parseWeights(scanner *bufio.Scanner) (map[string]weights, e // IP address and weight value ip := net.ParseIP(fields[0]) if ip == nil { - return nil, fmt.Errorf("Wrong IP address:\"%s\" in weight file %s", fields[0], w.fileName) + return nil, fmt.Errorf("wrong IP address:\"%s\" in weight file %s", fields[0], w.fileName) } weight, err := strconv.ParseUint(fields[1], 10, 8) if err != nil || weight == 0 { - return nil, fmt.Errorf("Wrong weight value:\"%s\" in weight file %s", fields[1], w.fileName) + return nil, fmt.Errorf("wrong weight value:\"%s\" in weight file %s", fields[1], w.fileName) } witem := &weightItem{address: ip, value: uint8(weight)} if dname == "" { - return nil, fmt.Errorf("Missing domain name in weight file %s", w.fileName) + return nil, fmt.Errorf("missing domain name in weight file %s", w.fileName) } ws = append(ws, witem) domains[dname] = ws default: - return nil, fmt.Errorf("Could not parse weight line:\"%s\" in weight file %s", nextLine, w.fileName) + return nil, fmt.Errorf("could not parse weight line:\"%s\" in weight file %s", nextLine, w.fileName) } } if err := scanner.Err(); err != nil { - return nil, fmt.Errorf("Weight file %s parsing error:%s", w.fileName, err) + return nil, fmt.Errorf("weight file %s parsing error:%s", w.fileName, err) } return domains, nil diff --git a/plugin/loadbalance/weighted_test.go b/plugin/loadbalance/weighted_test.go index fa596f0e3..0b407107f 100644 --- a/plugin/loadbalance/weighted_test.go +++ b/plugin/loadbalance/weighted_test.go @@ -96,11 +96,11 @@ func TestWeightFileUpdate(t *testing.T) { {oneDomainWRR, false, testOneDomainWRR, ""}, {twoDomainsWRR, false, testTwoDomainsWRR, ""}, // negative - {missingWeightWRR, true, nil, "Wrong domain name"}, - {missingDomainWRR, true, nil, "Missing domain name"}, - {wrongIpWRR, true, nil, "Wrong IP address"}, - {wrongWeightWRR, true, nil, "Wrong weight value"}, - {zeroWeightWRR, true, nil, "Wrong weight value"}, + {missingWeightWRR, true, nil, "wrong domain name"}, + {missingDomainWRR, true, nil, "missing domain name"}, + {wrongIpWRR, true, nil, "wrong IP address"}, + {wrongWeightWRR, true, nil, "wrong weight value"}, + {zeroWeightWRR, true, nil, "wrong weight value"}, } for i, test := range tests { diff --git a/plugin/log/setup.go b/plugin/log/setup.go index e1d9913e0..ecafb1a54 100644 --- a/plugin/log/setup.go +++ b/plugin/log/setup.go @@ -54,8 +54,8 @@ func logParse(c *caddy.Controller) ([]Rule, error) { if strings.Contains(args[len(args)-1], "{") { format = args[len(args)-1] - format = strings.Replace(format, "{common}", CommonLogFormat, -1) - format = strings.Replace(format, "{combined}", CombinedLogFormat, -1) + format = strings.ReplaceAll(format, "{common}", CommonLogFormat) + format = strings.ReplaceAll(format, "{combined}", CombinedLogFormat) args = args[:len(args)-1] } diff --git a/plugin/pkg/proxy/health.go b/plugin/pkg/proxy/health.go index 4b4b4cc01..ff3dbd6ce 100644 --- a/plugin/pkg/proxy/health.go +++ b/plugin/pkg/proxy/health.go @@ -119,7 +119,7 @@ func (h *dnsHc) Check(p *Proxy) error { func (h *dnsHc) send(addr string) error { ping := new(dns.Msg) ping.SetQuestion(h.domain, dns.TypeNS) - ping.MsgHdr.RecursionDesired = h.recursionDesired + ping.RecursionDesired = h.recursionDesired m, _, err := h.c.Exchange(ping, addr) // If we got a header, we're alright, basically only care about I/O errors 'n stuff. diff --git a/plugin/pkg/replacer/replacer_test.go b/plugin/pkg/replacer/replacer_test.go index aa8ac6fd2..a2d692640 100644 --- a/plugin/pkg/replacer/replacer_test.go +++ b/plugin/pkg/replacer/replacer_test.go @@ -21,7 +21,7 @@ func TestReplacer(t *testing.T) { w := dnstest.NewRecorder(&test.ResponseWriter{}) r := new(dns.Msg) r.SetQuestion("example.org.", dns.TypeHINFO) - r.MsgHdr.AuthenticatedData = true + r.AuthenticatedData = true state := request.Request{W: w, Req: r} replacer := New() @@ -269,7 +269,7 @@ func BenchmarkReplacer(b *testing.B) { w := dnstest.NewRecorder(&test.ResponseWriter{}) r := new(dns.Msg) r.SetQuestion("example.org.", dns.TypeHINFO) - r.MsgHdr.AuthenticatedData = true + r.AuthenticatedData = true state := request.Request{W: w, Req: r} b.ResetTimer() @@ -288,7 +288,7 @@ func BenchmarkReplacer_CommonLogFormat(b *testing.B) { r.Id = 1053 r.AuthenticatedData = true r.CheckingDisabled = true - r.MsgHdr.AuthenticatedData = true + r.AuthenticatedData = true w.WriteMsg(r) state := request.Request{W: w, Req: r} diff --git a/plugin/rewrite/cname_target.go b/plugin/rewrite/cname_target.go index d57bae3b2..dffc5b99e 100644 --- a/plugin/rewrite/cname_target.go +++ b/plugin/rewrite/cname_target.go @@ -49,7 +49,7 @@ func (r *cnameTargetRule) getFromAndToTarget(inputCName string) (from string, to } case SubstringMatch: if strings.Contains(inputCName, r.paramFromTarget) { - return inputCName, strings.Replace(inputCName, r.paramFromTarget, r.paramToTarget, -1) + return inputCName, strings.ReplaceAll(inputCName, r.paramFromTarget, r.paramToTarget) } case RegexMatch: pattern := regexp.MustCompile(r.paramFromTarget) @@ -60,7 +60,7 @@ func (r *cnameTargetRule) getFromAndToTarget(inputCName string) (from string, to substitution := r.paramToTarget for groupIndex, groupValue := range regexGroups { groupIndexStr := "{" + strconv.Itoa(groupIndex) + "}" - substitution = strings.Replace(substitution, groupIndexStr, groupValue, -1) + substitution = strings.ReplaceAll(substitution, groupIndexStr, groupValue) } return inputCName, substitution } diff --git a/plugin/rewrite/name.go b/plugin/rewrite/name.go index d3da9c2b8..b6b5071c7 100644 --- a/plugin/rewrite/name.go +++ b/plugin/rewrite/name.go @@ -40,7 +40,7 @@ func (r *regexStringRewriter) rewriteString(src string) string { s := r.replacement for groupIndex, groupValue := range regexGroups { groupIndexStr := "{" + strconv.Itoa(groupIndex) + "}" - s = strings.Replace(s, groupIndexStr, groupValue, -1) + s = strings.ReplaceAll(s, groupIndexStr, groupValue) } return s } @@ -257,7 +257,7 @@ func newSubstringNameRule(nextAction string, auto bool, substring, replacement s func (rule *substringNameRule) Rewrite(ctx context.Context, state request.Request) (ResponseRules, Result) { if strings.Contains(state.Name(), rule.substring) { - state.Req.Question[0].Name = strings.Replace(state.Name(), rule.substring, rule.replacement, -1) + state.Req.Question[0].Name = strings.ReplaceAll(state.Name(), rule.substring, rule.replacement) return rule.responseRuleFor(state) } return nil, RewriteIgnored @@ -285,7 +285,7 @@ func (rule *regexNameRule) Rewrite(ctx context.Context, state request.Request) ( s := rule.replacement for groupIndex, groupValue := range regexGroups { groupIndexStr := "{" + strconv.Itoa(groupIndex) + "}" - s = strings.Replace(s, groupIndexStr, groupValue, -1) + s = strings.ReplaceAll(s, groupIndexStr, groupValue) } state.Req.Question[0].Name = s return rule.responseRuleFor(state) diff --git a/plugin/rewrite/rcode.go b/plugin/rewrite/rcode.go index 814b95fd9..cf12a8c26 100644 --- a/plugin/rewrite/rcode.go +++ b/plugin/rewrite/rcode.go @@ -19,8 +19,8 @@ type rcodeResponseRule struct { } func (r *rcodeResponseRule) RewriteResponse(res *dns.Msg, rr dns.RR) { - if r.old == res.MsgHdr.Rcode { - res.MsgHdr.Rcode = r.new + if r.old == res.Rcode { + res.Rcode = r.new } } diff --git a/plugin/rewrite/rcode_test.go b/plugin/rewrite/rcode_test.go index e40260719..8f0c2e672 100644 --- a/plugin/rewrite/rcode_test.go +++ b/plugin/rewrite/rcode_test.go @@ -60,13 +60,13 @@ func TestRCodeRewrite(t *testing.T) { m.SetQuestion("srv1.coredns.rocks.", dns.TypeA) m.Question[0].Qclass = dns.ClassINET m.Answer = []dns.RR{test.A("srv1.coredns.rocks. 5 IN A 10.0.0.1")} - m.MsgHdr.Rcode = dns.RcodeServerFailure + m.Rcode = dns.RcodeServerFailure request := request.Request{Req: m} rcRule, _ := rule.(*exactRCodeRule) var rr dns.RR rcRule.response.RewriteResponse(request.Req, rr) - if request.Req.MsgHdr.Rcode != dns.RcodeFormatError { + if request.Req.Rcode != dns.RcodeFormatError { t.Fatalf("RCode rewrite did not apply changes, request=%#v, err=%v", request.Req, err) } } diff --git a/plugin/rewrite/rewrite.go b/plugin/rewrite/rewrite.go index edb11813e..76b60c864 100644 --- a/plugin/rewrite/rewrite.go +++ b/plugin/rewrite/rewrite.go @@ -54,7 +54,7 @@ func (rw Rewrite) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg } wr.ResponseRules = append(wr.ResponseRules, respRules...) if rule.Mode() == Stop { - if !rw.RevertPolicy.DoRevert() { + if !rw.DoRevert() { return plugin.NextOrFailure(rw.Name(), rw.Next, ctx, w, r) } rcode, err := plugin.NextOrFailure(rw.Name(), rw.Next, ctx, wr, r) @@ -71,7 +71,7 @@ func (rw Rewrite) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg } } } - if !rw.RevertPolicy.DoRevert() || len(wr.ResponseRules) == 0 { + if !rw.DoRevert() || len(wr.ResponseRules) == 0 { return plugin.NextOrFailure(rw.Name(), rw.Next, ctx, w, r) } return plugin.NextOrFailure(rw.Name(), rw.Next, ctx, wr, r) diff --git a/plugin/sign/file.go b/plugin/sign/file.go index ad3f18e7e..dc4e73ebd 100644 --- a/plugin/sign/file.go +++ b/plugin/sign/file.go @@ -29,19 +29,19 @@ func (s *Signer) write(z *file.Zone) error { } func write(w io.Writer, z *file.Zone) error { - if _, err := io.WriteString(w, z.Apex.SOA.String()); err != nil { + if _, err := io.WriteString(w, z.SOA.String()); err != nil { return err } w.Write([]byte("\n")) // RR Stringer() method doesn't include newline, which ends the RR in a zone file, write that here. - for _, rr := range z.Apex.SIGSOA { + for _, rr := range z.SIGSOA { io.WriteString(w, rr.String()) w.Write([]byte("\n")) } - for _, rr := range z.Apex.NS { + for _, rr := range z.NS { io.WriteString(w, rr.String()) w.Write([]byte("\n")) } - for _, rr := range z.Apex.SIGNS { + for _, rr := range z.SIGNS { io.WriteString(w, rr.String()) w.Write([]byte("\n")) } diff --git a/plugin/sign/signer.go b/plugin/sign/signer.go index 9c4062c30..742e1555a 100644 --- a/plugin/sign/signer.go +++ b/plugin/sign/signer.go @@ -41,10 +41,10 @@ func (s *Signer) Sign(now time.Time) (*file.Zone, error) { return nil, err } - mttl := z.Apex.SOA.Minttl - ttl := z.Apex.SOA.Header().Ttl + mttl := z.SOA.Minttl + ttl := z.SOA.Header().Ttl inception, expiration := lifetime(now, s.jitterIncep, s.jitterExpir) - z.Apex.SOA.Serial = uint32(now.Unix()) + z.SOA.Serial = uint32(now.Unix()) for _, pair := range s.keys { pair.Public.Header().Ttl = ttl // set TTL on key so it matches the RRSIG. @@ -58,14 +58,14 @@ func (s *Signer) Sign(now time.Time) (*file.Zone, error) { ln := len(names) for _, pair := range s.keys { - rrsig, err := pair.signRRs([]dns.RR{z.Apex.SOA}, s.origin, ttl, inception, expiration) + rrsig, err := pair.signRRs([]dns.RR{z.SOA}, s.origin, ttl, inception, expiration) if err != nil { return nil, err } z.Insert(rrsig) // NS apex may not be set if RR's have been discarded because the origin doesn't match. - if len(z.Apex.NS) > 0 { - rrsig, err = pair.signRRs(z.Apex.NS, s.origin, ttl, inception, expiration) + if len(z.NS) > 0 { + rrsig, err = pair.signRRs(z.NS, s.origin, ttl, inception, expiration) if err != nil { return nil, err } @@ -178,7 +178,7 @@ func signAndLog(s *Signer, why error) { log.Warningf("Error signing %q: failed to move zone file into place: %s", s.origin, err) return } - log.Infof("Successfully signed zone %q in %q with key tags %q and %d SOA serial, elapsed %f, next: %s", s.origin, filepath.Join(s.directory, s.signedfile), keyTag(s.keys), z.Apex.SOA.Serial, time.Since(now).Seconds(), now.Add(durationRefreshHours).Format(timeFmt)) + log.Infof("Successfully signed zone %q in %q with key tags %q and %d SOA serial, elapsed %f, next: %s", s.origin, filepath.Join(s.directory, s.signedfile), keyTag(s.keys), z.SOA.Serial, time.Since(now).Seconds(), now.Add(durationRefreshHours).Format(timeFmt)) } // refresh checks every val if some zones need to be resigned. diff --git a/plugin/sign/signer_test.go b/plugin/sign/signer_test.go index 17f11ab14..a69ae059f 100644 --- a/plugin/sign/signer_test.go +++ b/plugin/sign/signer_test.go @@ -170,7 +170,7 @@ func TestSignDS(t *testing.T) { if x := nsec[0].(*dns.NSEC).NextDomain; x != "www.miek.nl." { t.Errorf("Expected no NSEC NextDomain to be %s for %s, got %s", "www.miek.nl.", name, x) } - minttl := z.Apex.SOA.Minttl + minttl := z.SOA.Minttl if x := nsec[0].Header().Ttl; x != minttl { t.Errorf("Expected no NSEC TTL to be %d for %s, got %d", minttl, "www.miek.nl.", x) } diff --git a/plugin/trace/logger.go b/plugin/trace/logger.go index 649938715..81c8d53f1 100644 --- a/plugin/trace/logger.go +++ b/plugin/trace/logger.go @@ -11,10 +11,10 @@ type loggerAdapter struct { } func (l *loggerAdapter) Write(p []byte) (n int, err error) { - l.P.Warning(string(p)) + l.Warning(string(p)) return len(p), nil } func (l *loggerAdapter) Log(msg string) { - l.P.Warning(msg) + l.Warning(msg) } diff --git a/plugin/trace/setup_test.go b/plugin/trace/setup_test.go index 72de4ab16..080a3d4e3 100644 --- a/plugin/trace/setup_test.go +++ b/plugin/trace/setup_test.go @@ -60,7 +60,7 @@ func TestTraceParse(t *testing.T) { continue } - if "" != m.serviceEndpoint { + if m.serviceEndpoint != "" { t.Errorf("Test %v: Expected serviceEndpoint to be '' but found: %s", i, m.serviceEndpoint) } if test.endpoint != m.Endpoint { diff --git a/plugin/tsig/tsig.go b/plugin/tsig/tsig.go index 6441c8a6b..68f859f81 100644 --- a/plugin/tsig/tsig.go +++ b/plugin/tsig/tsig.go @@ -117,7 +117,7 @@ func (r *restoreTsigWriter) WriteMsg(m *dns.Msg) error { repTSIG = new(dns.TSIG) repTSIG.Hdr = dns.RR_Header{Name: r.reqTSIG.Hdr.Name, Rrtype: dns.TypeTSIG, Class: dns.ClassANY} repTSIG.Algorithm = r.reqTSIG.Algorithm - repTSIG.OrigId = m.MsgHdr.Id + repTSIG.OrigId = m.Id repTSIG.Error = r.reqTSIG.Error repTSIG.MAC = r.reqTSIG.MAC repTSIG.MACSize = r.reqTSIG.MACSize diff --git a/plugin/tsig/tsig_test.go b/plugin/tsig/tsig_test.go index f7ec1fdf1..b84b239b4 100644 --- a/plugin/tsig/tsig_test.go +++ b/plugin/tsig/tsig_test.go @@ -179,9 +179,7 @@ func TestServeDNSTsigErrors(t *testing.T) { t.Run(tc.desc, func(t *testing.T) { ctx := context.TODO() - var w *dnstest.Recorder - - w = dnstest.NewRecorder(&ErrWriter{err: tc.tsigErr}) + var w = dnstest.NewRecorder(&ErrWriter{err: tc.tsigErr}) r := new(dns.Msg) r.SetQuestion("test.example.", dns.TypeA)