aboutsummaryrefslogtreecommitdiff
path: root/middleware/file/secondary.go
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2016-04-15 14:26:27 +0100
committerGravatar Miek Gieben <miek@miek.nl> 2016-04-15 14:26:27 +0100
commitc9d8a57ed66f8debe72856ec9d12c25f97248f0e (patch)
tree479358a120b6d4450e324c1f564f712e1b29f02d /middleware/file/secondary.go
parent29ad957a9da184e6d15c4d61de38f391ec25bdb1 (diff)
downloadcoredns-c9d8a57ed66f8debe72856ec9d12c25f97248f0e.tar.gz
coredns-c9d8a57ed66f8debe72856ec9d12c25f97248f0e.tar.zst
coredns-c9d8a57ed66f8debe72856ec9d12c25f97248f0e.zip
Reload zone when a write is detected (#122)
Zone reloading
Diffstat (limited to 'middleware/file/secondary.go')
-rw-r--r--middleware/file/secondary.go29
1 files changed, 8 insertions, 21 deletions
diff --git a/middleware/file/secondary.go b/middleware/file/secondary.go
index 9b3886a36..eb95392ad 100644
--- a/middleware/file/secondary.go
+++ b/middleware/file/secondary.go
@@ -1,7 +1,6 @@
package file
import (
- "fmt"
"log"
"time"
@@ -16,7 +15,7 @@ func (z *Zone) TransferIn() error {
return nil
}
m := new(dns.Msg)
- m.SetAxfr(z.name)
+ m.SetAxfr(z.origin)
z1 := z.Copy()
var (
@@ -29,32 +28,20 @@ Transfer:
t := new(dns.Transfer)
c, err := t.In(m, tr)
if err != nil {
- log.Printf("[ERROR] Failed to setup transfer `%s' with `%s': %v", z.name, tr, err)
+ log.Printf("[ERROR] Failed to setup transfer `%s' with `%s': %v", z.origin, tr, err)
Err = err
continue Transfer
}
for env := range c {
if env.Error != nil {
- log.Printf("[ERROR] Failed to parse transfer `%s': %v", z.name, env.Error)
+ log.Printf("[ERROR] Failed to parse transfer `%s': %v", z.origin, env.Error)
Err = env.Error
continue Transfer
}
for _, rr := range env.RR {
- switch h := rr.Header().Rrtype; h {
- case dns.TypeSOA:
- z1.SOA = rr.(*dns.SOA)
- case dns.TypeNSEC3, dns.TypeNSEC3PARAM:
- err := fmt.Errorf("NSEC3 zone is not supported, dropping")
- log.Printf("[ERROR] Failed to parse transfer `%s': %v", z.name, err)
+ if err := z1.Insert(rr); err != nil {
+ log.Printf("[ERROR] Failed to parse transfer `%s': %v", z.origin, err)
return err
- case dns.TypeRRSIG:
- if x, ok := rr.(*dns.RRSIG); ok && x.TypeCovered == dns.TypeSOA {
- z1.SIG = append(z1.SIG, x)
- continue
- }
- fallthrough
- default:
- z1.Insert(rr)
}
}
}
@@ -62,7 +49,7 @@ Transfer:
break
}
if Err != nil {
- log.Printf("[ERROR] Failed to transfer %s: %s", z.name, Err)
+ log.Printf("[ERROR] Failed to transfer %s: %s", z.origin, Err)
return Err
}
@@ -70,7 +57,7 @@ Transfer:
z.SOA = z1.SOA
z.SIG = z1.SIG
*z.Expired = false
- log.Printf("[INFO] Transferred: %s from %s", z.name, tr)
+ log.Printf("[INFO] Transferred: %s from %s", z.origin, tr)
return nil
}
@@ -80,7 +67,7 @@ func (z *Zone) shouldTransfer() (bool, error) {
c := new(dns.Client)
c.Net = "tcp" // do this query over TCP to minimize spoofing
m := new(dns.Msg)
- m.SetQuestion(z.name, dns.TypeSOA)
+ m.SetQuestion(z.origin, dns.TypeSOA)
var Err error
serial := -1