mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-30 17:53:21 -04: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)
 | |
| }
 |