mirror of
				https://github.com/coredns/coredns.git
				synced 2025-11-03 18:53:13 -05:00 
			
		
		
		
	Fix some file/secondary issues when parsing a Corefile, also allow for multiple origins to be specified. Also don't fail on startup when a zonetransfer fails. Fixes: #54
		
			
				
	
	
		
			50 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.0 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)
 | 
						|
 | 
						|
	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 nil
 | 
						|
	return Err // ignore errors for now. TODO(miek)
 | 
						|
}
 |