mirror of
https://github.com/coredns/coredns.git
synced 2025-10-29 17:24:20 -04:00
64 lines
1.4 KiB
Go
64 lines
1.4 KiB
Go
|
|
package file
|
||
|
|
|
||
|
|
import (
|
||
|
|
"log"
|
||
|
|
|
||
|
|
"github.com/miekg/dns"
|
||
|
|
)
|
||
|
|
|
||
|
|
// TransferIn retrieves the zone from the masters, parses it and sets it live.
|
||
|
|
func (z *Zone) TransferIn() error {
|
||
|
|
if len(z.TransferFrom) == 0 {
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
t := new(dns.Transfer)
|
||
|
|
m := new(dns.Msg)
|
||
|
|
m.SetAxfr(z.name)
|
||
|
|
/*
|
||
|
|
t.TsigSecret = map[string]string{"axfr.": "so6ZGir4GPAqINNh9U5c3A=="}
|
||
|
|
m.SetTsig("axfr.", dns.HmacMD5, 300, time.Now().Unix())
|
||
|
|
*/
|
||
|
|
|
||
|
|
var Err error
|
||
|
|
Transfer:
|
||
|
|
for _, tr := range z.TransferFrom {
|
||
|
|
c, err := t.In(m, tr)
|
||
|
|
if err != nil {
|
||
|
|
log.Printf("[ERROR] failed to setup transfer %s with %s: %v", z.name, z.TransferFrom[0], 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)
|
||
|
|
Err = env.Error
|
||
|
|
continue Transfer
|
||
|
|
}
|
||
|
|
for _, rr := range env.RR {
|
||
|
|
if rr.Header().Rrtype == dns.TypeSOA {
|
||
|
|
z.SOA = rr.(*dns.SOA)
|
||
|
|
continue
|
||
|
|
}
|
||
|
|
if rr.Header().Rrtype == dns.TypeRRSIG {
|
||
|
|
if x, ok := rr.(*dns.RRSIG); ok && x.TypeCovered == dns.TypeSOA {
|
||
|
|
z.SIG = append(z.SIG, x)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
z.Insert(rr)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return Err
|
||
|
|
}
|
||
|
|
|
||
|
|
/*
|
||
|
|
|
||
|
|
28800 ; refresh (8 hours)
|
||
|
|
7200 ; retry (2 hours)
|
||
|
|
604800 ; expire (1 week)
|
||
|
|
3600 ; minimum (1 hour)
|
||
|
|
// Check SOA
|
||
|
|
// Just check every refresh hours, if fail set to retry until succeeds
|
||
|
|
// expire is need: to give SERVFAIL.
|
||
|
|
*/
|