coredns/middleware/file/zone.go
Miek Gieben e56d206542 Support outgoing zone transfers
These can be enabled by adding "transfer out" to the Corefile. Without
it no AXFR is allowed.

For now only AXFR and no IXFR. No TSIG and no ACLs.
2016-03-28 18:23:17 +01:00

60 lines
1.1 KiB
Go

package file
import (
"github.com/miekg/coredns/middleware"
"github.com/miekg/coredns/middleware/file/tree"
"github.com/miekg/dns"
)
type Transfer struct {
Out bool
In bool
// more later
}
type Zone struct {
SOA *dns.SOA
SIG []dns.RR
name string
*tree.Tree
Masters []string
Transfer *Transfer
}
func NewZone(name string) *Zone {
return &Zone{name: dns.Fqdn(name), Tree: &tree.Tree{}, Transfer: &Transfer{}}
}
func (z *Zone) Insert(r dns.RR) {
z.Tree.Insert(r)
}
func (z *Zone) Delete(r dns.RR) {
z.Tree.Delete(r)
}
// It the transfer request allowed.
func (z *Zone) TransferAllowed(state middleware.State) bool {
if z.Transfer == nil {
return false
}
return z.Transfer.Out
}
// All returns all records from the zone, the first record will be the SOA record,
// otionally followed by all RRSIG(SOA)s.
func (z *Zone) All() []dns.RR {
records := []dns.RR{}
allNodes := z.Tree.All()
for _, a := range allNodes {
records = append(records, a.All()...)
}
if len(z.SIG) > 0 {
records = append(z.SIG, records...)
}
return append([]dns.RR{z.SOA}, records...)
}
// Apex function?