chore: Upgrade to golangci-lint v2 (#7236)

Signed-off-by: Manuel Rüger <manuel@rueg.eu>
This commit is contained in:
Manuel Rüger
2025-04-04 20:27:39 +02:00
committed by GitHub
parent e16162dd3c
commit 76ba39ffe9
50 changed files with 240 additions and 219 deletions

View File

@@ -13,6 +13,6 @@ jobs:
with: with:
go-version: ${{ env.GO_VERSION }} go-version: ${{ env.GO_VERSION }}
- name: golangci-lint - name: golangci-lint
uses: golangci/golangci-lint-action@55c2c1448f86e01eaae002a5a3a9624417608d84 # v6.5.2 uses: golangci/golangci-lint-action@1481404843c368bc19ca9406f87d6e0fc97bdcfd # v7.0.0
with: with:
version: v1.64.8 version: v2.0.2

View File

@@ -1,13 +1,30 @@
run: version: "2"
timeout: 5m
linters: linters:
disable-all: true default: none
enable: enable:
- govet - govet
- ineffassign - ineffassign
- staticcheck - staticcheck
- typecheck
- whitespace
- unused
- gofmt
- unconvert - 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$

View File

@@ -63,8 +63,7 @@ func NewServerQUIC(addr string, group []*Config) (*ServerQUIC, error) {
tlsConfig.NextProtos = []string{"doq"} tlsConfig.NextProtos = []string{"doq"}
} }
var quicConfig *quic.Config var quicConfig = &quic.Config{
quicConfig = &quic.Config{
MaxIdleTimeout: s.idleTimeout, MaxIdleTimeout: s.idleTimeout,
MaxIncomingStreams: math.MaxUint16, MaxIncomingStreams: math.MaxUint16,
MaxIncomingUniStreams: math.MaxUint16, MaxIncomingUniStreams: math.MaxUint16,

View File

@@ -50,15 +50,16 @@ func parse(c *caddy.Controller) (ACL, error) {
p := policy{} p := policy{}
action := strings.ToLower(c.Val()) action := strings.ToLower(c.Val())
if action == "allow" { switch action {
case "allow":
p.action = actionAllow p.action = actionAllow
} else if action == "block" { case "block":
p.action = actionBlock p.action = actionBlock
} else if action == "filter" { case "filter":
p.action = actionFilter p.action = actionFilter
} else if action == "drop" { case "drop":
p.action = actionDrop p.action = actionDrop
} else { default:
return a, c.Errf("unexpected token %q; expect 'allow', 'block', 'filter' or 'drop'", c.Val()) return a, c.Errf("unexpected token %q; expect 'allow', 'block', 'filter' or 'drop'", c.Val())
} }

View File

@@ -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) return plugin.NextOrFailure(a.Name(), a.Next, ctx, w, r)
} }
a.Zones.RLock() a.RLock()
z, ok := a.Zones.Z[zone] z, ok := a.Z[zone]
a.Zones.RUnlock() a.RUnlock()
if !ok || z == nil { if !ok || z == nil {
return dns.RcodeServerFailure, nil return dns.RcodeServerFailure, nil

View File

@@ -48,11 +48,11 @@ func setup(c *caddy.Controller) error {
if err := a.Notify(); err != nil { if err := a.Notify(); err != nil {
log.Warning(err) log.Warning(err)
} }
if a.loader.ReloadInterval == 0 { if a.ReloadInterval == 0 {
return nil return nil
} }
go func() { go func() {
ticker := time.NewTicker(a.loader.ReloadInterval) ticker := time.NewTicker(a.ReloadInterval)
defer ticker.Stop() defer ticker.Stop()
for { for {
select { select {
@@ -71,7 +71,7 @@ func setup(c *caddy.Controller) error {
c.OnShutdown(func() error { c.OnShutdown(func() error {
close(walkChan) close(walkChan)
for _, z := range a.Zones.Z { for _, z := range a.Z {
z.Lock() z.Lock()
z.OnShutdown() z.OnShutdown()
z.Unlock() z.Unlock()
@@ -103,8 +103,8 @@ func autoParse(c *caddy.Controller) (Auto, error) {
for c.Next() { for c.Next() {
// auto [ZONES...] // auto [ZONES...]
args := c.RemainingArgs() args := c.RemainingArgs()
a.Zones.origins = plugin.OriginsFromArgsOrServerBlock(args, c.ServerBlockKeys) a.origins = plugin.OriginsFromArgsOrServerBlock(args, c.ServerBlockKeys)
a.loader.upstream = upstream.New() a.upstream = upstream.New()
for c.NextBlock() { for c.NextBlock() {
switch c.Val() { switch c.Val() {
@@ -112,33 +112,33 @@ func autoParse(c *caddy.Controller) (Auto, error) {
if !c.NextArg() { if !c.NextArg() {
return a, c.ArgErr() return a, c.ArgErr()
} }
a.loader.directory = c.Val() a.directory = c.Val()
if !filepath.IsAbs(a.loader.directory) && config.Root != "" { if !filepath.IsAbs(a.directory) && config.Root != "" {
a.loader.directory = filepath.Join(config.Root, a.loader.directory) a.directory = filepath.Join(config.Root, a.directory)
} }
_, err := os.Stat(a.loader.directory) _, err := os.Stat(a.directory)
if err != nil { if err != nil {
if os.IsNotExist(err) { if os.IsNotExist(err) {
log.Warningf("Directory does not exist: %s", a.loader.directory) log.Warningf("Directory does not exist: %s", a.directory)
} else { } 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 // regexp template
if c.NextArg() { if c.NextArg() {
a.loader.re, err = regexp.Compile(c.Val()) a.re, err = regexp.Compile(c.Val())
if err != nil { if err != nil {
return a, err return a, err
} }
if a.loader.re.NumSubexp() == 0 { if a.re.NumSubexp() == 0 {
return a, c.Errf("Need at least one sub expression") return a, c.Errf("Need at least one sub expression")
} }
if !c.NextArg() { if !c.NextArg() {
return a, c.ArgErr() return a, c.ArgErr()
} }
a.loader.template = rewriteToExpand(c.Val()) a.template = rewriteToExpand(c.Val())
} }
if c.NextArg() { if c.NextArg() {
@@ -157,7 +157,7 @@ func autoParse(c *caddy.Controller) (Auto, error) {
if err != nil { if err != nil {
return a, plugin.Error("file", err) return a, plugin.Error("file", err)
} }
a.loader.ReloadInterval = d a.ReloadInterval = d
case "upstream": case "upstream":
// remove soon // remove soon
@@ -169,8 +169,8 @@ func autoParse(c *caddy.Controller) (Auto, error) {
} }
} }
if a.loader.ReloadInterval == nilInterval { if a.ReloadInterval == nilInterval {
a.loader.ReloadInterval = 60 * time.Second a.ReloadInterval = 60 * time.Second
} }
return a, nil return a, nil

View File

@@ -111,17 +111,17 @@ func TestAutoParse(t *testing.T) {
} else if err != nil && !test.shouldErr { } else if err != nil && !test.shouldErr {
t.Fatalf("Test %d expected no errors, but got '%v'", i, err) t.Fatalf("Test %d expected no errors, but got '%v'", i, err)
} else if !test.shouldErr { } else if !test.shouldErr {
if a.loader.directory != test.expectedDirectory { if a.directory != test.expectedDirectory {
t.Fatalf("Test %d expected %v, got %v", i, test.expectedDirectory, a.loader.directory) t.Fatalf("Test %d expected %v, got %v", i, test.expectedDirectory, a.directory)
} }
if a.loader.template != test.expectedTempl { if a.template != test.expectedTempl {
t.Fatalf("Test %d expected %v, got %v", i, test.expectedTempl, a.loader.template) t.Fatalf("Test %d expected %v, got %v", i, test.expectedTempl, a.template)
} }
if a.loader.re.String() != test.expectedRe { if a.re.String() != test.expectedRe {
t.Fatalf("Test %d expected %v, got %v", i, test.expectedRe, a.loader.re) t.Fatalf("Test %d expected %v, got %v", i, test.expectedRe, a.re)
} }
if a.loader.ReloadInterval != test.expectedReloadInterval { if a.ReloadInterval != test.expectedReloadInterval {
t.Fatalf("Test %d expected %v, got %v", i, test.expectedReloadInterval, a.loader.ReloadInterval) t.Fatalf("Test %d expected %v, got %v", i, test.expectedReloadInterval, a.ReloadInterval)
} }
} }
} }

View File

@@ -15,11 +15,11 @@ func (a Auto) Walk() error {
// TODO(miek): should add something so that we don't stomp on each other. // TODO(miek): should add something so that we don't stomp on each other.
toDelete := make(map[string]bool) toDelete := make(map[string]bool)
for _, n := range a.Zones.Names() { for _, n := range a.Names() {
toDelete[n] = true 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 { if e != nil {
log.Warningf("error reading %v: %v", path, e) log.Warningf("error reading %v: %v", path, e)
} }
@@ -27,12 +27,12 @@ func (a Auto) Walk() error {
return nil return nil
} }
match, origin := matches(a.loader.re, info.Name(), a.loader.template) match, origin := matches(a.re, info.Name(), a.template)
if !match { if !match {
return nil return nil
} }
if z, ok := a.Zones.Z[origin]; ok { if z, ok := a.Z[origin]; ok {
// we already have this zone // we already have this zone
toDelete[origin] = false toDelete[origin] = false
z.SetFile(path) z.SetFile(path)
@@ -53,10 +53,10 @@ func (a Auto) Walk() error {
return nil return nil
} }
zo.ReloadInterval = a.loader.ReloadInterval zo.ReloadInterval = a.ReloadInterval
zo.Upstream = a.loader.upstream zo.Upstream = a.upstream
a.Zones.Add(zo, origin, a.transfer) a.Add(zo, origin, a.transfer)
if a.metrics != nil { if a.metrics != nil {
a.metrics.AddZone(origin) a.metrics.AddZone(origin)
@@ -78,7 +78,7 @@ func (a Auto) Walk() error {
a.metrics.RemoveZone(origin) a.metrics.RemoveZone(origin)
} }
a.Zones.Remove(origin) a.Remove(origin)
log.Infof("Deleting zone `%s'", origin) log.Infof("Deleting zone `%s'", origin)
} }

View File

@@ -38,7 +38,7 @@ func TestWalk(t *testing.T) {
// db.example.org and db.example.com should be here (created in createFiles) // db.example.org and db.example.com should be here (created in createFiles)
for _, name := range []string{"example.com.", "example.org."} { 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) t.Errorf("%s should have been added", name)
} }
} }

View File

@@ -27,10 +27,10 @@ func TestWatcher(t *testing.T) {
a.Walk() a.Walk()
// example.org and example.com should exist, we have 3 apex rrs and 1 "real" record. All() returns the non-apex ones. // 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) 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) t.Fatalf("Expected 1 RRs, got %d", x)
} }
@@ -41,10 +41,10 @@ func TestWatcher(t *testing.T) {
a.Walk() 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.") 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.") t.Errorf("Expected %q to still be there.", "example.org.")
} }
} }
@@ -83,7 +83,7 @@ func TestSymlinks(t *testing.T) {
a.Walk() a.Walk()
if storedZone, ok := a.Zones.Z["example.com."]; ok { if storedZone, ok := a.Z["example.com."]; ok {
storedFile := storedZone.File() storedFile := storedZone.File()
if storedFile != newFile { if storedFile != newFile {
t.Errorf("Expected %q to reflect new path %q", storedFile, newFile) t.Errorf("Expected %q to reflect new path %q", storedFile, newFile)

View File

@@ -8,9 +8,9 @@ import (
// Transfer implements the transfer.Transfer interface. // Transfer implements the transfer.Transfer interface.
func (a Auto) Transfer(zone string, serial uint32) (<-chan []dns.RR, error) { func (a Auto) Transfer(zone string, serial uint32) (<-chan []dns.RR, error) {
a.Zones.RLock() a.RLock()
z, ok := a.Zones.Z[zone] z, ok := a.Z[zone]
a.Zones.RUnlock() a.RUnlock()
if !ok || z == nil { if !ok || z == nil {
return nil, transfer.ErrNotAuthoritative 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 // Notify sends notifies for all zones with secondaries configured with the transfer plugin
func (a Auto) Notify() error { func (a Auto) Notify() error {
var err error var err error
for _, origin := range a.Zones.Names() { for _, origin := range a.Names() {
e := a.transfer.Notify(origin) e := a.transfer.Notify(origin)
if e != nil { if e != nil {
err = e err = e

View File

@@ -138,26 +138,26 @@ func (h *Azure) updateZones(ctx context.Context) error {
func updateZoneFromPublicResourceSet(recordSet publicdns.RecordSetListResultPage, newZ *file.Zone) { func updateZoneFromPublicResourceSet(recordSet publicdns.RecordSetListResultPage, newZ *file.Zone) {
for _, result := range *(recordSet.Response().Value) { for _, result := range *(recordSet.Response().Value) {
resultFqdn := *(result.RecordSetProperties.Fqdn) resultFqdn := *(result.Fqdn)
resultTTL := uint32(*(result.RecordSetProperties.TTL)) resultTTL := uint32(*(result.TTL))
if result.RecordSetProperties.ARecords != nil { if result.ARecords != nil {
for _, A := range *(result.RecordSetProperties.ARecords) { for _, A := range *(result.ARecords) {
a := &dns.A{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeA, Class: dns.ClassINET, Ttl: resultTTL}, a := &dns.A{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeA, Class: dns.ClassINET, Ttl: resultTTL},
A: net.ParseIP(*(A.Ipv4Address))} A: net.ParseIP(*(A.Ipv4Address))}
newZ.Insert(a) newZ.Insert(a)
} }
} }
if result.RecordSetProperties.AaaaRecords != nil { if result.AaaaRecords != nil {
for _, AAAA := range *(result.RecordSetProperties.AaaaRecords) { for _, AAAA := range *(result.AaaaRecords) {
aaaa := &dns.AAAA{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeAAAA, Class: dns.ClassINET, Ttl: resultTTL}, aaaa := &dns.AAAA{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeAAAA, Class: dns.ClassINET, Ttl: resultTTL},
AAAA: net.ParseIP(*(AAAA.Ipv6Address))} AAAA: net.ParseIP(*(AAAA.Ipv6Address))}
newZ.Insert(aaaa) newZ.Insert(aaaa)
} }
} }
if result.RecordSetProperties.MxRecords != nil { if result.MxRecords != nil {
for _, MX := range *(result.RecordSetProperties.MxRecords) { for _, MX := range *(result.MxRecords) {
mx := &dns.MX{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeMX, Class: dns.ClassINET, Ttl: resultTTL}, mx := &dns.MX{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeMX, Class: dns.ClassINET, Ttl: resultTTL},
Preference: uint16(*(MX.Preference)), Preference: uint16(*(MX.Preference)),
Mx: dns.Fqdn(*(MX.Exchange))} Mx: dns.Fqdn(*(MX.Exchange))}
@@ -165,16 +165,16 @@ func updateZoneFromPublicResourceSet(recordSet publicdns.RecordSetListResultPage
} }
} }
if result.RecordSetProperties.PtrRecords != nil { if result.PtrRecords != nil {
for _, PTR := range *(result.RecordSetProperties.PtrRecords) { for _, PTR := range *(result.PtrRecords) {
ptr := &dns.PTR{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypePTR, Class: dns.ClassINET, Ttl: resultTTL}, ptr := &dns.PTR{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypePTR, Class: dns.ClassINET, Ttl: resultTTL},
Ptr: dns.Fqdn(*(PTR.Ptrdname))} Ptr: dns.Fqdn(*(PTR.Ptrdname))}
newZ.Insert(ptr) newZ.Insert(ptr)
} }
} }
if result.RecordSetProperties.SrvRecords != nil { if result.SrvRecords != nil {
for _, SRV := range *(result.RecordSetProperties.SrvRecords) { for _, SRV := range *(result.SrvRecords) {
srv := &dns.SRV{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeSRV, Class: dns.ClassINET, Ttl: resultTTL}, srv := &dns.SRV{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeSRV, Class: dns.ClassINET, Ttl: resultTTL},
Priority: uint16(*(SRV.Priority)), Priority: uint16(*(SRV.Priority)),
Weight: uint16(*(SRV.Weight)), Weight: uint16(*(SRV.Weight)),
@@ -184,24 +184,24 @@ func updateZoneFromPublicResourceSet(recordSet publicdns.RecordSetListResultPage
} }
} }
if result.RecordSetProperties.TxtRecords != nil { if result.TxtRecords != nil {
for _, TXT := range *(result.RecordSetProperties.TxtRecords) { for _, TXT := range *(result.TxtRecords) {
txt := &dns.TXT{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeTXT, Class: dns.ClassINET, Ttl: resultTTL}, txt := &dns.TXT{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeTXT, Class: dns.ClassINET, Ttl: resultTTL},
Txt: *(TXT.Value)} Txt: *(TXT.Value)}
newZ.Insert(txt) newZ.Insert(txt)
} }
} }
if result.RecordSetProperties.NsRecords != nil { if result.NsRecords != nil {
for _, NS := range *(result.RecordSetProperties.NsRecords) { for _, NS := range *(result.NsRecords) {
ns := &dns.NS{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeNS, Class: dns.ClassINET, Ttl: resultTTL}, ns := &dns.NS{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeNS, Class: dns.ClassINET, Ttl: resultTTL},
Ns: *(NS.Nsdname)} Ns: *(NS.Nsdname)}
newZ.Insert(ns) newZ.Insert(ns)
} }
} }
if result.RecordSetProperties.SoaRecord != nil { if result.SoaRecord != nil {
SOA := result.RecordSetProperties.SoaRecord SOA := result.SoaRecord
soa := &dns.SOA{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeSOA, Class: dns.ClassINET, Ttl: resultTTL}, soa := &dns.SOA{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeSOA, Class: dns.ClassINET, Ttl: resultTTL},
Minttl: uint32(*(SOA.MinimumTTL)), Minttl: uint32(*(SOA.MinimumTTL)),
Expire: uint32(*(SOA.ExpireTime)), Expire: uint32(*(SOA.ExpireTime)),
@@ -213,8 +213,8 @@ func updateZoneFromPublicResourceSet(recordSet publicdns.RecordSetListResultPage
newZ.Insert(soa) newZ.Insert(soa)
} }
if result.RecordSetProperties.CnameRecord != nil { if result.CnameRecord != nil {
CNAME := result.RecordSetProperties.CnameRecord.Cname CNAME := result.CnameRecord.Cname
cname := &dns.CNAME{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeCNAME, Class: dns.ClassINET, Ttl: resultTTL}, cname := &dns.CNAME{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeCNAME, Class: dns.ClassINET, Ttl: resultTTL},
Target: dns.Fqdn(*CNAME)} Target: dns.Fqdn(*CNAME)}
newZ.Insert(cname) newZ.Insert(cname)
@@ -224,25 +224,25 @@ func updateZoneFromPublicResourceSet(recordSet publicdns.RecordSetListResultPage
func updateZoneFromPrivateResourceSet(recordSet privatedns.RecordSetListResultPage, newZ *file.Zone) { func updateZoneFromPrivateResourceSet(recordSet privatedns.RecordSetListResultPage, newZ *file.Zone) {
for _, result := range *(recordSet.Response().Value) { for _, result := range *(recordSet.Response().Value) {
resultFqdn := *(result.RecordSetProperties.Fqdn) resultFqdn := *(result.Fqdn)
resultTTL := uint32(*(result.RecordSetProperties.TTL)) resultTTL := uint32(*(result.TTL))
if result.RecordSetProperties.ARecords != nil { if result.ARecords != nil {
for _, A := range *(result.RecordSetProperties.ARecords) { for _, A := range *(result.ARecords) {
a := &dns.A{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeA, Class: dns.ClassINET, Ttl: resultTTL}, a := &dns.A{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeA, Class: dns.ClassINET, Ttl: resultTTL},
A: net.ParseIP(*(A.Ipv4Address))} A: net.ParseIP(*(A.Ipv4Address))}
newZ.Insert(a) newZ.Insert(a)
} }
} }
if result.RecordSetProperties.AaaaRecords != nil { if result.AaaaRecords != nil {
for _, AAAA := range *(result.RecordSetProperties.AaaaRecords) { for _, AAAA := range *(result.AaaaRecords) {
aaaa := &dns.AAAA{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeAAAA, Class: dns.ClassINET, Ttl: resultTTL}, aaaa := &dns.AAAA{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeAAAA, Class: dns.ClassINET, Ttl: resultTTL},
AAAA: net.ParseIP(*(AAAA.Ipv6Address))} AAAA: net.ParseIP(*(AAAA.Ipv6Address))}
newZ.Insert(aaaa) newZ.Insert(aaaa)
} }
} }
if result.RecordSetProperties.MxRecords != nil { if result.MxRecords != nil {
for _, MX := range *(result.RecordSetProperties.MxRecords) { for _, MX := range *(result.MxRecords) {
mx := &dns.MX{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeMX, Class: dns.ClassINET, Ttl: resultTTL}, mx := &dns.MX{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeMX, Class: dns.ClassINET, Ttl: resultTTL},
Preference: uint16(*(MX.Preference)), Preference: uint16(*(MX.Preference)),
Mx: dns.Fqdn(*(MX.Exchange))} Mx: dns.Fqdn(*(MX.Exchange))}
@@ -250,16 +250,16 @@ func updateZoneFromPrivateResourceSet(recordSet privatedns.RecordSetListResultPa
} }
} }
if result.RecordSetProperties.PtrRecords != nil { if result.PtrRecords != nil {
for _, PTR := range *(result.RecordSetProperties.PtrRecords) { for _, PTR := range *(result.PtrRecords) {
ptr := &dns.PTR{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypePTR, Class: dns.ClassINET, Ttl: resultTTL}, ptr := &dns.PTR{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypePTR, Class: dns.ClassINET, Ttl: resultTTL},
Ptr: dns.Fqdn(*(PTR.Ptrdname))} Ptr: dns.Fqdn(*(PTR.Ptrdname))}
newZ.Insert(ptr) newZ.Insert(ptr)
} }
} }
if result.RecordSetProperties.SrvRecords != nil { if result.SrvRecords != nil {
for _, SRV := range *(result.RecordSetProperties.SrvRecords) { for _, SRV := range *(result.SrvRecords) {
srv := &dns.SRV{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeSRV, Class: dns.ClassINET, Ttl: resultTTL}, srv := &dns.SRV{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeSRV, Class: dns.ClassINET, Ttl: resultTTL},
Priority: uint16(*(SRV.Priority)), Priority: uint16(*(SRV.Priority)),
Weight: uint16(*(SRV.Weight)), Weight: uint16(*(SRV.Weight)),
@@ -269,16 +269,16 @@ func updateZoneFromPrivateResourceSet(recordSet privatedns.RecordSetListResultPa
} }
} }
if result.RecordSetProperties.TxtRecords != nil { if result.TxtRecords != nil {
for _, TXT := range *(result.RecordSetProperties.TxtRecords) { for _, TXT := range *(result.TxtRecords) {
txt := &dns.TXT{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeTXT, Class: dns.ClassINET, Ttl: resultTTL}, txt := &dns.TXT{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeTXT, Class: dns.ClassINET, Ttl: resultTTL},
Txt: *(TXT.Value)} Txt: *(TXT.Value)}
newZ.Insert(txt) newZ.Insert(txt)
} }
} }
if result.RecordSetProperties.SoaRecord != nil { if result.SoaRecord != nil {
SOA := result.RecordSetProperties.SoaRecord SOA := result.SoaRecord
soa := &dns.SOA{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeSOA, Class: dns.ClassINET, Ttl: resultTTL}, soa := &dns.SOA{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeSOA, Class: dns.ClassINET, Ttl: resultTTL},
Minttl: uint32(*(SOA.MinimumTTL)), Minttl: uint32(*(SOA.MinimumTTL)),
Expire: uint32(*(SOA.ExpireTime)), Expire: uint32(*(SOA.ExpireTime)),
@@ -290,8 +290,8 @@ func updateZoneFromPrivateResourceSet(recordSet privatedns.RecordSetListResultPa
newZ.Insert(soa) newZ.Insert(soa)
} }
if result.RecordSetProperties.CnameRecord != nil { if result.CnameRecord != nil {
CNAME := result.RecordSetProperties.CnameRecord.Cname CNAME := result.CnameRecord.Cname
cname := &dns.CNAME{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeCNAME, Class: dns.ClassINET, Ttl: resultTTL}, cname := &dns.CNAME{Hdr: dns.RR_Header{Name: resultFqdn, Rrtype: dns.TypeCNAME, Class: dns.ClassINET, Ttl: resultTTL},
Target: dns.Fqdn(*CNAME)} Target: dns.Fqdn(*CNAME)}
newZ.Insert(cname) newZ.Insert(cname)

View File

@@ -189,11 +189,12 @@ func (w *ResponseWriter) WriteMsg(res *dns.Msg) error {
msgTTL := dnsutil.MinimalTTL(res, mt) msgTTL := dnsutil.MinimalTTL(res, mt)
var duration time.Duration 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) duration = computeTTL(msgTTL, w.minnttl, w.nttl)
} else if mt == response.ServerError { case response.ServerError:
duration = w.failttl duration = w.failttl
} else { default:
duration = computeTTL(msgTTL, w.minpttl, w.pttl) duration = computeTTL(msgTTL, w.minpttl, w.pttl)
} }

View File

@@ -467,14 +467,15 @@ func TestServeFromStaleCacheFetchVerify(t *testing.T) {
rec := dnstest.NewRecorder(&test.ResponseWriter{}) rec := dnstest.NewRecorder(&test.ResponseWriter{})
c.now = func() time.Time { return time.Now().Add(time.Duration(tt.futureMinutes) * time.Minute) } 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) 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 // Make upstream fail, should now rely on cache during the c.staleUpTo period
c.Next = servFailBackend(tt.upstreamTtl) c.Next = servFailBackend(tt.upstreamTtl)
} else if tt.upstreamRCode == dns.RcodeNameError { case dns.RcodeNameError:
c.Next = nxDomainBackend(tt.upstreamTtl) c.Next = nxDomainBackend(tt.upstreamTtl)
} else { default:
t.Fatal("upstream code not implemented") 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) t.Errorf("Test %d: expected rcode=%v, got rcode=%v", i, tt.expectedRCode, ret)
continue continue
} }
if ret == dns.RcodeSuccess { switch ret {
case dns.RcodeSuccess:
recTtl := rec.Msg.Answer[0].Header().Ttl recTtl := rec.Msg.Answer[0].Header().Ttl
if tt.expectedTtl != int(recTtl) { if tt.expectedTtl != int(recTtl) {
t.Errorf("Test %d: expected TTL=%d, got TTL=%d", i, tt.expectedTtl, 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 soaTtl := rec.Msg.Ns[0].Header().Ttl
if tt.expectedTtl != int(soaTtl) { if tt.expectedTtl != int(soaTtl) {
t.Errorf("Test %d: expected TTL=%d, got TTL=%d", i, tt.expectedTtl, 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.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) w.WriteMsg(m)
return dns.RcodeNameError, nil 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.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) w.WriteMsg(m)
return dns.RcodeServerFailure, nil return dns.RcodeServerFailure, nil
}) })

View File

@@ -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 // that we've gathered sofar. See we copy the frequencies info back
// into the new item that was stored in the cache. // into the new item that was stored in the cache.
if i1 := c.exists(state); i1 != nil { 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 { if c.prefetch <= 0 {
return false return false
} }
i.Freq.Update(c.duration, now) i.Update(c.duration, now)
threshold := int(math.Ceil(float64(c.percentage) / 100 * float64(i.origTTL))) 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. // Name implements the Handler interface.

View File

@@ -62,7 +62,7 @@ func (d *DNS64) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg)
RequestsTranslatedCount.WithLabelValues(metrics.WithServer(ctx)).Inc() RequestsTranslatedCount.WithLabelValues(metrics.WithServer(ctx)).Inc()
w.WriteMsg(msg) w.WriteMsg(msg)
return msg.MsgHdr.Rcode, nil return msg.Rcode, nil
} }
// Name implements the Handler interface. // Name implements the Handler interface.

View File

@@ -117,7 +117,8 @@ func keyParse(c *caddy.Controller) ([]*DNSKEY, error) {
return nil, c.ArgErr() return nil, c.ArgErr()
} }
value := c.Val() value := c.Val()
if value == "file" { switch value {
case "file":
ks := c.RemainingArgs() ks := c.RemainingArgs()
if len(ks) == 0 { if len(ks) == 0 {
return nil, c.ArgErr() return nil, c.ArgErr()
@@ -141,7 +142,7 @@ func keyParse(c *caddy.Controller) ([]*DNSKEY, error) {
} }
keys = append(keys, k) keys = append(keys, k)
} }
} else if value == "aws_secretsmanager" { case "aws_secretsmanager":
ks := c.RemainingArgs() ks := c.RemainingArgs()
if len(ks) == 0 { if len(ks) == 0 {
return nil, c.ArgErr() return nil, c.ArgErr()

View File

@@ -10,7 +10,7 @@ import (
func (z *Zone) ClosestEncloser(qname string) (*tree.Elem, bool) { func (z *Zone) ClosestEncloser(qname string) (*tree.Elem, bool) {
offset, end := dns.NextLabel(qname, 0) offset, end := dns.NextLabel(qname, 0)
for !end { for !end {
elem, _ := z.Tree.Search(qname) elem, _ := z.Search(qname)
if elem != nil { if elem != nil {
return elem, true return elem, true
} }
@@ -19,5 +19,5 @@ func (z *Zone) ClosestEncloser(qname string) (*tree.Elem, bool) {
offset, end = dns.NextLabel(qname, offset) offset, end = dns.NextLabel(qname, offset)
} }
return z.Tree.Search(z.origin) return z.Search(z.origin)
} }

View File

@@ -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) 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 { if !ok || z == nil {
return dns.RcodeServerFailure, nil return dns.RcodeServerFailure, nil
} }

View File

@@ -330,11 +330,11 @@ func (z *Zone) externalLookup(ctx context.Context, state request.Request, elem *
} }
targetName := rrs[0].(*dns.CNAME).Target targetName := rrs[0].(*dns.CNAME).Target
elem, _ = z.Tree.Search(targetName) elem, _ = z.Search(targetName)
if elem == nil { if elem == nil {
lookupRRs, result := z.doLookup(ctx, state, targetName, qtype) lookupRRs, result := z.doLookup(ctx, state, targetName, qtype)
rrs = append(rrs, lookupRRs...) rrs = append(rrs, lookupRRs...)
return rrs, z.Apex.ns(do), nil, result return rrs, z.ns(do), nil, result
} }
i := 0 i := 0
@@ -350,16 +350,16 @@ Redo:
rrs = append(rrs, sigs...) rrs = append(rrs, sigs...)
} }
targetName := cname[0].(*dns.CNAME).Target targetName := cname[0].(*dns.CNAME).Target
elem, _ = z.Tree.Search(targetName) elem, _ = z.Search(targetName)
if elem == nil { if elem == nil {
lookupRRs, result := z.doLookup(ctx, state, targetName, qtype) lookupRRs, result := z.doLookup(ctx, state, targetName, qtype)
rrs = append(rrs, lookupRRs...) rrs = append(rrs, lookupRRs...)
return rrs, z.Apex.ns(do), nil, result return rrs, z.ns(do), nil, result
} }
i++ i++
if i > 8 { if i > 8 {
return rrs, z.Apex.ns(do), nil, Success return rrs, z.ns(do), nil, Success
} }
goto Redo 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) { 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 continue
} }
elem, _ := z.Tree.Search(name) elem, _ := z.Search(name)
if elem == nil { if elem == nil {
continue continue
} }

View File

@@ -42,7 +42,7 @@ func (z *Zone) Reload(t *transfer.Transfer) error {
z.Tree = zone.Tree z.Tree = zone.Tree
z.Unlock() 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 t != nil {
if err := t.Notify(z.origin); err != nil { if err := t.Notify(z.origin); err != nil {
log.Warningf("Failed sending notifies: %s", err) log.Warningf("Failed sending notifies: %s", err)
@@ -62,8 +62,8 @@ func (z *Zone) Reload(t *transfer.Transfer) error {
func (z *Zone) SOASerialIfDefined() int64 { func (z *Zone) SOASerialIfDefined() int64 {
z.RLock() z.RLock()
defer z.RUnlock() defer z.RUnlock()
if z.Apex.SOA != nil { if z.SOA != nil {
return int64(z.Apex.SOA.Serial) return int64(z.SOA.Serial)
} }
return -1 return -1
} }

View File

@@ -89,10 +89,10 @@ Transfer:
if serial == -1 { if serial == -1 {
return false, Err return false, Err
} }
if z.Apex.SOA == nil { if z.SOA == nil {
return true, Err 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. // 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. // will be marked expired.
func (z *Zone) Update() error { func (z *Zone) Update() error {
// If we don't have a SOA, we don't have a zone, wait for it to appear. // 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) time.Sleep(1 * time.Second)
} }
retryActive := false retryActive := false
Restart: Restart:
refresh := time.Second * time.Duration(z.Apex.SOA.Refresh) refresh := time.Second * time.Duration(z.SOA.Refresh)
retry := time.Second * time.Duration(z.Apex.SOA.Retry) retry := time.Second * time.Duration(z.SOA.Retry)
expire := time.Second * time.Duration(z.Apex.SOA.Expire) expire := time.Second * time.Duration(z.SOA.Expire)
refreshTicker := time.NewTicker(refresh) refreshTicker := time.NewTicker(refresh)
retryTicker := time.NewTicker(retry) retryTicker := time.NewTicker(retry)

View File

@@ -84,7 +84,7 @@ func TestShouldTransfer(t *testing.T) {
t.Fatalf("ShouldTransfer should return true for serial: %d", soa.serial) t.Fatalf("ShouldTransfer should return true for serial: %d", soa.serial)
} }
// Serial smaller // 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() should, err = z.shouldTransfer()
if err != nil { if err != nil {
t.Fatalf("Unable to run shouldTransfer: %v", err) 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) t.Fatalf("ShouldTransfer should return true for serial: %q", soa.serial-1)
} }
// Serial equal // 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() should, err = z.shouldTransfer()
if err != nil { if err != nil {
t.Fatalf("Unable to run shouldTransfer: %v", err) t.Fatalf("Unable to run shouldTransfer: %v", err)
@@ -116,7 +116,7 @@ func TestTransferIn(t *testing.T) {
if err := z.TransferIn(); err != nil { if err := z.TransferIn(); err != nil {
t.Fatalf("Unable to run TransferIn: %v", err) 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") t.Fatalf("Unknown SOA transferred")
} }
} }

View File

@@ -9,7 +9,7 @@ import (
// Transfer implements the transfer.Transfer interface. // Transfer implements the transfer.Transfer interface.
func (f File) Transfer(zone string, serial uint32) (<-chan []dns.RR, error) { 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 { if !ok || z == nil {
return nil, transfer.ErrNotAuthoritative return nil, transfer.ErrNotAuthoritative
} }

View File

@@ -80,14 +80,14 @@ func (z *Zone) Insert(r dns.RR) error {
r.(*dns.NS).Ns = strings.ToLower(r.(*dns.NS).Ns) r.(*dns.NS).Ns = strings.ToLower(r.(*dns.NS).Ns)
if r.Header().Name == z.origin { if r.Header().Name == z.origin {
z.Apex.NS = append(z.Apex.NS, r) z.NS = append(z.NS, r)
return nil return nil
} }
case dns.TypeSOA: case dns.TypeSOA:
r.(*dns.SOA).Ns = strings.ToLower(r.(*dns.SOA).Ns) r.(*dns.SOA).Ns = strings.ToLower(r.(*dns.SOA).Ns)
r.(*dns.SOA).Mbox = strings.ToLower(r.(*dns.SOA).Mbox) r.(*dns.SOA).Mbox = strings.ToLower(r.(*dns.SOA).Mbox)
z.Apex.SOA = r.(*dns.SOA) z.SOA = r.(*dns.SOA)
return nil return nil
case dns.TypeNSEC3, dns.TypeNSEC3PARAM: case dns.TypeNSEC3, dns.TypeNSEC3PARAM:
return fmt.Errorf("NSEC3 zone is not supported, dropping RR: %s for zone: %s", r.Header().Name, z.origin) 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) x := r.(*dns.RRSIG)
switch x.TypeCovered { switch x.TypeCovered {
case dns.TypeSOA: case dns.TypeSOA:
z.Apex.SIGSOA = append(z.Apex.SIGSOA, x) z.SIGSOA = append(z.SIGSOA, x)
return nil return nil
case dns.TypeNS: case dns.TypeNS:
if r.Header().Name == z.origin { if r.Header().Name == z.origin {
z.Apex.SIGNS = append(z.Apex.SIGNS, x) z.SIGNS = append(z.SIGNS, x)
return nil return nil
} }
} }
@@ -133,20 +133,20 @@ func (z *Zone) SetFile(path string) {
func (z *Zone) ApexIfDefined() ([]dns.RR, error) { func (z *Zone) ApexIfDefined() ([]dns.RR, error) {
z.RLock() z.RLock()
defer z.RUnlock() defer z.RUnlock()
if z.Apex.SOA == nil { if z.SOA == nil {
return nil, fmt.Errorf("no SOA") return nil, fmt.Errorf("no SOA")
} }
rrs := []dns.RR{z.Apex.SOA} rrs := []dns.RR{z.SOA}
if len(z.Apex.SIGSOA) > 0 { if len(z.SIGSOA) > 0 {
rrs = append(rrs, z.Apex.SIGSOA...) rrs = append(rrs, z.SIGSOA...)
} }
if len(z.Apex.NS) > 0 { if len(z.NS) > 0 {
rrs = append(rrs, z.Apex.NS...) rrs = append(rrs, z.NS...)
} }
if len(z.Apex.SIGNS) > 0 { if len(z.SIGNS) > 0 {
rrs = append(rrs, z.Apex.SIGNS...) rrs = append(rrs, z.SIGNS...)
} }
return rrs, nil return rrs, nil

View File

@@ -91,8 +91,8 @@ func (g GeoIP) Metadata(ctx context.Context, state request.Request) context.Cont
} }
} }
switch { switch g.db.provides & city {
case g.db.provides&city == city: case city:
data, err := g.db.City(srcIP) data, err := g.db.City(srcIP)
if err != nil { if err != nil {
log.Debugf("Setting up metadata failed due to database lookup error: %v", err) log.Debugf("Setting up metadata failed due to database lookup error: %v", err)

View File

@@ -37,7 +37,8 @@ func parse(c *caddy.Controller) ([]Rule, []Rule, error) {
selector := strings.ToLower(c.Val()) selector := strings.ToLower(c.Val())
var action string 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. "+ log.Warningf("The selector for header rule in line %d isn't explicit defined. "+
"Assume rule applies for selector 'response'. This syntax is deprecated. "+ "Assume rule applies for selector 'response'. This syntax is deprecated. "+
"In future versions of CoreDNS the selector must be explicit defined.", "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 action = selector
selector = "response" selector = "response"
} else if selector == "query" || selector == "response" { case "query", "response":
if c.NextArg() { if c.NextArg() {
action = c.Val() action = c.Val()
} }
} else { default:
return nil, nil, fmt.Errorf("setting up rule: invalid selector=%s should be query or response", selector) return nil, nil, fmt.Errorf("setting up rule: invalid selector=%s should be query or response", selector)
} }

View File

@@ -13,8 +13,7 @@ import (
) )
func TestImplementsTransferer(t *testing.T) { func TestImplementsTransferer(t *testing.T) {
var e plugin.Handler var e plugin.Handler = &External{}
e = &External{}
_, ok := e.(transfer.Transferer) _, ok := e.(transfer.Transferer)
if !ok { if !ok {
t.Error("Transferer not implemented") t.Error("Transferer not implemented")

View File

@@ -140,8 +140,8 @@ func generateEndpointSlices(cidr string, client kubernetes.Interface) {
Hostname: &hostname, Hostname: &hostname,
}, },
} }
eps.ObjectMeta.Name = "svc" + strconv.Itoa(count) eps.Name = "svc" + strconv.Itoa(count)
eps.ObjectMeta.Labels = map[string]string{discovery.LabelServiceName: eps.ObjectMeta.Name} eps.Labels = map[string]string{discovery.LabelServiceName: eps.Name}
_, err := client.DiscoveryV1().EndpointSlices("testns").Create(ctx, eps, meta.CreateOptions{}) _, err := client.DiscoveryV1().EndpointSlices("testns").Create(ctx, eps, meta.CreateOptions{})
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
@@ -175,11 +175,12 @@ func generateSvcs(cidr string, svcType string, client kubernetes.Interface) {
} }
default: default:
for ip := ip.Mask(ipnet.Mask); ipnet.Contains(ip); inc(ip) { for ip := ip.Mask(ipnet.Mask); ipnet.Contains(ip); inc(ip) {
if count%3 == 0 { switch count % 3 {
case 0:
createClusterIPSvc(count, client, ip) createClusterIPSvc(count, client, ip)
} else if count%3 == 1 { case 1:
createHeadlessSvc(count, client, ip) createHeadlessSvc(count, client, ip)
} else if count%3 == 2 { case 2:
createExternalSvc(count, client, ip) createExternalSvc(count, client, ip)
} }
count++ count++

View File

@@ -62,10 +62,11 @@ func (k *Kubernetes) External(state request.Request, headless bool) ([]msg.Servi
service := segs[last] service := segs[last]
last-- last--
if last == 0 { switch last {
case 0:
endpoint = stripUnderscore(segs[last]) endpoint = stripUnderscore(segs[last])
last-- last--
} else if last == 1 { case 1:
protocol = stripUnderscore(segs[last]) protocol = stripUnderscore(segs[last])
port = stripUnderscore(segs[last-1]) port = stripUnderscore(segs[last-1])
last -= 2 last -= 2

View File

@@ -332,10 +332,10 @@ func endpointHostname(addr object.EndpointAddress, endpointNameMode bool) string
return addr.TargetRefName return addr.TargetRefName
} }
if strings.Contains(addr.IP, ".") { if strings.Contains(addr.IP, ".") {
return strings.Replace(addr.IP, ".", "-", -1) return strings.ReplaceAll(addr.IP, ".", "-")
} }
if strings.Contains(addr.IP, ":") { if strings.Contains(addr.IP, ":") {
return strings.Replace(addr.IP, ":", "-", -1) return strings.ReplaceAll(addr.IP, ":", "-")
} }
return "" return ""
} }
@@ -428,7 +428,7 @@ func (k *Kubernetes) findServices(r recordRequest, zone string) (services []msg.
zonePath := msg.Path(zone, coredns) zonePath := msg.Path(zone, coredns)
for _, svc := range serviceList { 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 continue
} }

View File

@@ -36,7 +36,7 @@ func ToPod(obj meta.Object) (meta.Object, error) {
Name: apiPod.GetName(), Name: apiPod.GetName(),
Labels: apiPod.GetLabels(), Labels: apiPod.GetLabels(),
} }
t := apiPod.ObjectMeta.DeletionTimestamp t := apiPod.DeletionTimestamp
if t != nil && !(*t).Time.IsZero() { if t != nil && !(*t).Time.IsZero() {
// if the pod is in the process of termination, return an error so it can be ignored // if the pod is in the process of termination, return an error so it can be ignored
// during add/update event processing // during add/update event processing

View File

@@ -15,7 +15,7 @@ import (
) )
var log = clog.NewWithPlugin("loadbalance") 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) } func init() { plugin.Register("loadbalance", setup) }

View File

@@ -90,7 +90,7 @@ func createWeightedFuncs(weightFileName string,
randomGen: &randomUint{}, randomGen: &randomUint{},
}, },
} }
lb.weighted.randomGen.randInit() lb.weighted.randInit()
lb.shuffleFunc = func(res *dns.Msg) *dns.Msg { lb.shuffleFunc = func(res *dns.Msg) *dns.Msg {
return weightedShuffle(res, lb.weighted) return weightedShuffle(res, lb.weighted)
@@ -285,7 +285,7 @@ func (w *weightedRR) parseWeights(scanner *bufio.Scanner) (map[string]weights, e
case 1: case 1:
// (domain) name sanity check // (domain) name sanity check
if net.ParseIP(fields[0]) != nil { 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) fields[0], w.fileName)
} }
dname = fields[0] dname = fields[0]
@@ -304,25 +304,25 @@ func (w *weightedRR) parseWeights(scanner *bufio.Scanner) (map[string]weights, e
// IP address and weight value // IP address and weight value
ip := net.ParseIP(fields[0]) ip := net.ParseIP(fields[0])
if ip == nil { 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) weight, err := strconv.ParseUint(fields[1], 10, 8)
if err != nil || weight == 0 { 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)} witem := &weightItem{address: ip, value: uint8(weight)}
if dname == "" { 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) ws = append(ws, witem)
domains[dname] = ws domains[dname] = ws
default: 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 { 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 return domains, nil

View File

@@ -96,11 +96,11 @@ func TestWeightFileUpdate(t *testing.T) {
{oneDomainWRR, false, testOneDomainWRR, ""}, {oneDomainWRR, false, testOneDomainWRR, ""},
{twoDomainsWRR, false, testTwoDomainsWRR, ""}, {twoDomainsWRR, false, testTwoDomainsWRR, ""},
// negative // negative
{missingWeightWRR, true, nil, "Wrong domain name"}, {missingWeightWRR, true, nil, "wrong domain name"},
{missingDomainWRR, true, nil, "Missing domain name"}, {missingDomainWRR, true, nil, "missing domain name"},
{wrongIpWRR, true, nil, "Wrong IP address"}, {wrongIpWRR, true, nil, "wrong IP address"},
{wrongWeightWRR, true, nil, "Wrong weight value"}, {wrongWeightWRR, true, nil, "wrong weight value"},
{zeroWeightWRR, true, nil, "Wrong weight value"}, {zeroWeightWRR, true, nil, "wrong weight value"},
} }
for i, test := range tests { for i, test := range tests {

View File

@@ -54,8 +54,8 @@ func logParse(c *caddy.Controller) ([]Rule, error) {
if strings.Contains(args[len(args)-1], "{") { if strings.Contains(args[len(args)-1], "{") {
format = args[len(args)-1] format = args[len(args)-1]
format = strings.Replace(format, "{common}", CommonLogFormat, -1) format = strings.ReplaceAll(format, "{common}", CommonLogFormat)
format = strings.Replace(format, "{combined}", CombinedLogFormat, -1) format = strings.ReplaceAll(format, "{combined}", CombinedLogFormat)
args = args[:len(args)-1] args = args[:len(args)-1]
} }

View File

@@ -119,7 +119,7 @@ func (h *dnsHc) Check(p *Proxy) error {
func (h *dnsHc) send(addr string) error { func (h *dnsHc) send(addr string) error {
ping := new(dns.Msg) ping := new(dns.Msg)
ping.SetQuestion(h.domain, dns.TypeNS) ping.SetQuestion(h.domain, dns.TypeNS)
ping.MsgHdr.RecursionDesired = h.recursionDesired ping.RecursionDesired = h.recursionDesired
m, _, err := h.c.Exchange(ping, addr) m, _, err := h.c.Exchange(ping, addr)
// If we got a header, we're alright, basically only care about I/O errors 'n stuff. // If we got a header, we're alright, basically only care about I/O errors 'n stuff.

View File

@@ -21,7 +21,7 @@ func TestReplacer(t *testing.T) {
w := dnstest.NewRecorder(&test.ResponseWriter{}) w := dnstest.NewRecorder(&test.ResponseWriter{})
r := new(dns.Msg) r := new(dns.Msg)
r.SetQuestion("example.org.", dns.TypeHINFO) r.SetQuestion("example.org.", dns.TypeHINFO)
r.MsgHdr.AuthenticatedData = true r.AuthenticatedData = true
state := request.Request{W: w, Req: r} state := request.Request{W: w, Req: r}
replacer := New() replacer := New()
@@ -269,7 +269,7 @@ func BenchmarkReplacer(b *testing.B) {
w := dnstest.NewRecorder(&test.ResponseWriter{}) w := dnstest.NewRecorder(&test.ResponseWriter{})
r := new(dns.Msg) r := new(dns.Msg)
r.SetQuestion("example.org.", dns.TypeHINFO) r.SetQuestion("example.org.", dns.TypeHINFO)
r.MsgHdr.AuthenticatedData = true r.AuthenticatedData = true
state := request.Request{W: w, Req: r} state := request.Request{W: w, Req: r}
b.ResetTimer() b.ResetTimer()
@@ -288,7 +288,7 @@ func BenchmarkReplacer_CommonLogFormat(b *testing.B) {
r.Id = 1053 r.Id = 1053
r.AuthenticatedData = true r.AuthenticatedData = true
r.CheckingDisabled = true r.CheckingDisabled = true
r.MsgHdr.AuthenticatedData = true r.AuthenticatedData = true
w.WriteMsg(r) w.WriteMsg(r)
state := request.Request{W: w, Req: r} state := request.Request{W: w, Req: r}

View File

@@ -49,7 +49,7 @@ func (r *cnameTargetRule) getFromAndToTarget(inputCName string) (from string, to
} }
case SubstringMatch: case SubstringMatch:
if strings.Contains(inputCName, r.paramFromTarget) { 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: case RegexMatch:
pattern := regexp.MustCompile(r.paramFromTarget) pattern := regexp.MustCompile(r.paramFromTarget)
@@ -60,7 +60,7 @@ func (r *cnameTargetRule) getFromAndToTarget(inputCName string) (from string, to
substitution := r.paramToTarget substitution := r.paramToTarget
for groupIndex, groupValue := range regexGroups { for groupIndex, groupValue := range regexGroups {
groupIndexStr := "{" + strconv.Itoa(groupIndex) + "}" groupIndexStr := "{" + strconv.Itoa(groupIndex) + "}"
substitution = strings.Replace(substitution, groupIndexStr, groupValue, -1) substitution = strings.ReplaceAll(substitution, groupIndexStr, groupValue)
} }
return inputCName, substitution return inputCName, substitution
} }

View File

@@ -40,7 +40,7 @@ func (r *regexStringRewriter) rewriteString(src string) string {
s := r.replacement s := r.replacement
for groupIndex, groupValue := range regexGroups { for groupIndex, groupValue := range regexGroups {
groupIndexStr := "{" + strconv.Itoa(groupIndex) + "}" groupIndexStr := "{" + strconv.Itoa(groupIndex) + "}"
s = strings.Replace(s, groupIndexStr, groupValue, -1) s = strings.ReplaceAll(s, groupIndexStr, groupValue)
} }
return s 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) { func (rule *substringNameRule) Rewrite(ctx context.Context, state request.Request) (ResponseRules, Result) {
if strings.Contains(state.Name(), rule.substring) { 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 rule.responseRuleFor(state)
} }
return nil, RewriteIgnored return nil, RewriteIgnored
@@ -285,7 +285,7 @@ func (rule *regexNameRule) Rewrite(ctx context.Context, state request.Request) (
s := rule.replacement s := rule.replacement
for groupIndex, groupValue := range regexGroups { for groupIndex, groupValue := range regexGroups {
groupIndexStr := "{" + strconv.Itoa(groupIndex) + "}" groupIndexStr := "{" + strconv.Itoa(groupIndex) + "}"
s = strings.Replace(s, groupIndexStr, groupValue, -1) s = strings.ReplaceAll(s, groupIndexStr, groupValue)
} }
state.Req.Question[0].Name = s state.Req.Question[0].Name = s
return rule.responseRuleFor(state) return rule.responseRuleFor(state)

View File

@@ -19,8 +19,8 @@ type rcodeResponseRule struct {
} }
func (r *rcodeResponseRule) RewriteResponse(res *dns.Msg, rr dns.RR) { func (r *rcodeResponseRule) RewriteResponse(res *dns.Msg, rr dns.RR) {
if r.old == res.MsgHdr.Rcode { if r.old == res.Rcode {
res.MsgHdr.Rcode = r.new res.Rcode = r.new
} }
} }

View File

@@ -60,13 +60,13 @@ func TestRCodeRewrite(t *testing.T) {
m.SetQuestion("srv1.coredns.rocks.", dns.TypeA) m.SetQuestion("srv1.coredns.rocks.", dns.TypeA)
m.Question[0].Qclass = dns.ClassINET m.Question[0].Qclass = dns.ClassINET
m.Answer = []dns.RR{test.A("srv1.coredns.rocks. 5 IN A 10.0.0.1")} 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} request := request.Request{Req: m}
rcRule, _ := rule.(*exactRCodeRule) rcRule, _ := rule.(*exactRCodeRule)
var rr dns.RR var rr dns.RR
rcRule.response.RewriteResponse(request.Req, 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) t.Fatalf("RCode rewrite did not apply changes, request=%#v, err=%v", request.Req, err)
} }
} }

View File

@@ -54,7 +54,7 @@ func (rw Rewrite) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg
} }
wr.ResponseRules = append(wr.ResponseRules, respRules...) wr.ResponseRules = append(wr.ResponseRules, respRules...)
if rule.Mode() == Stop { if rule.Mode() == Stop {
if !rw.RevertPolicy.DoRevert() { if !rw.DoRevert() {
return plugin.NextOrFailure(rw.Name(), rw.Next, ctx, w, r) return plugin.NextOrFailure(rw.Name(), rw.Next, ctx, w, r)
} }
rcode, err := plugin.NextOrFailure(rw.Name(), rw.Next, ctx, wr, 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, w, r)
} }
return plugin.NextOrFailure(rw.Name(), rw.Next, ctx, wr, r) return plugin.NextOrFailure(rw.Name(), rw.Next, ctx, wr, r)

View File

@@ -29,19 +29,19 @@ func (s *Signer) write(z *file.Zone) error {
} }
func write(w io.Writer, 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 return err
} }
w.Write([]byte("\n")) // RR Stringer() method doesn't include newline, which ends the RR in a zone file, write that here. 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()) io.WriteString(w, rr.String())
w.Write([]byte("\n")) w.Write([]byte("\n"))
} }
for _, rr := range z.Apex.NS { for _, rr := range z.NS {
io.WriteString(w, rr.String()) io.WriteString(w, rr.String())
w.Write([]byte("\n")) w.Write([]byte("\n"))
} }
for _, rr := range z.Apex.SIGNS { for _, rr := range z.SIGNS {
io.WriteString(w, rr.String()) io.WriteString(w, rr.String())
w.Write([]byte("\n")) w.Write([]byte("\n"))
} }

View File

@@ -41,10 +41,10 @@ func (s *Signer) Sign(now time.Time) (*file.Zone, error) {
return nil, err return nil, err
} }
mttl := z.Apex.SOA.Minttl mttl := z.SOA.Minttl
ttl := z.Apex.SOA.Header().Ttl ttl := z.SOA.Header().Ttl
inception, expiration := lifetime(now, s.jitterIncep, s.jitterExpir) 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 { for _, pair := range s.keys {
pair.Public.Header().Ttl = ttl // set TTL on key so it matches the RRSIG. 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) ln := len(names)
for _, pair := range s.keys { 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 { if err != nil {
return nil, err return nil, err
} }
z.Insert(rrsig) z.Insert(rrsig)
// NS apex may not be set if RR's have been discarded because the origin doesn't match. // NS apex may not be set if RR's have been discarded because the origin doesn't match.
if len(z.Apex.NS) > 0 { if len(z.NS) > 0 {
rrsig, err = pair.signRRs(z.Apex.NS, s.origin, ttl, inception, expiration) rrsig, err = pair.signRRs(z.NS, s.origin, ttl, inception, expiration)
if err != nil { if err != nil {
return nil, err 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) log.Warningf("Error signing %q: failed to move zone file into place: %s", s.origin, err)
return 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. // refresh checks every val if some zones need to be resigned.

View File

@@ -170,7 +170,7 @@ func TestSignDS(t *testing.T) {
if x := nsec[0].(*dns.NSEC).NextDomain; x != "www.miek.nl." { 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) 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 { 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) t.Errorf("Expected no NSEC TTL to be %d for %s, got %d", minttl, "www.miek.nl.", x)
} }

View File

@@ -11,10 +11,10 @@ type loggerAdapter struct {
} }
func (l *loggerAdapter) Write(p []byte) (n int, err error) { func (l *loggerAdapter) Write(p []byte) (n int, err error) {
l.P.Warning(string(p)) l.Warning(string(p))
return len(p), nil return len(p), nil
} }
func (l *loggerAdapter) Log(msg string) { func (l *loggerAdapter) Log(msg string) {
l.P.Warning(msg) l.Warning(msg)
} }

View File

@@ -60,7 +60,7 @@ func TestTraceParse(t *testing.T) {
continue continue
} }
if "" != m.serviceEndpoint { if m.serviceEndpoint != "" {
t.Errorf("Test %v: Expected serviceEndpoint to be '' but found: %s", i, m.serviceEndpoint) t.Errorf("Test %v: Expected serviceEndpoint to be '' but found: %s", i, m.serviceEndpoint)
} }
if test.endpoint != m.Endpoint { if test.endpoint != m.Endpoint {

View File

@@ -117,7 +117,7 @@ func (r *restoreTsigWriter) WriteMsg(m *dns.Msg) error {
repTSIG = new(dns.TSIG) repTSIG = new(dns.TSIG)
repTSIG.Hdr = dns.RR_Header{Name: r.reqTSIG.Hdr.Name, Rrtype: dns.TypeTSIG, Class: dns.ClassANY} repTSIG.Hdr = dns.RR_Header{Name: r.reqTSIG.Hdr.Name, Rrtype: dns.TypeTSIG, Class: dns.ClassANY}
repTSIG.Algorithm = r.reqTSIG.Algorithm repTSIG.Algorithm = r.reqTSIG.Algorithm
repTSIG.OrigId = m.MsgHdr.Id repTSIG.OrigId = m.Id
repTSIG.Error = r.reqTSIG.Error repTSIG.Error = r.reqTSIG.Error
repTSIG.MAC = r.reqTSIG.MAC repTSIG.MAC = r.reqTSIG.MAC
repTSIG.MACSize = r.reqTSIG.MACSize repTSIG.MACSize = r.reqTSIG.MACSize

View File

@@ -179,9 +179,7 @@ func TestServeDNSTsigErrors(t *testing.T) {
t.Run(tc.desc, func(t *testing.T) { t.Run(tc.desc, func(t *testing.T) {
ctx := context.TODO() ctx := context.TODO()
var w *dnstest.Recorder var w = dnstest.NewRecorder(&ErrWriter{err: tc.tsigErr})
w = dnstest.NewRecorder(&ErrWriter{err: tc.tsigErr})
r := new(dns.Msg) r := new(dns.Msg)
r.SetQuestion("test.example.", dns.TypeA) r.SetQuestion("test.example.", dns.TypeA)