mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-31 02:03:20 -04:00 
			
		
		
		
	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.
		
			
				
	
	
		
			61 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			61 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?
 |