mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-30 17:53:21 -04:00 
			
		
		
		
	
		
			
	
	
		
			48 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			48 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
|  | package parse
 | ||
|  | 
 | ||
|  | import (
 | ||
|  | 	"fmt"
 | ||
|  | 
 | ||
|  | 	"github.com/coredns/coredns/plugin/pkg/dnsutil"
 | ||
|  | 	"github.com/mholt/caddy"
 | ||
|  | )
 | ||
|  | 
 | ||
|  | // Transfer parses transfer statements: 'transfer [to|from] [address...]'.
 | ||
|  | func Transfer(c *caddy.Controller, secondary bool) (tos, froms []string, err error) {
 | ||
|  | 	if !c.NextArg() {
 | ||
|  | 		return nil, nil, c.ArgErr()
 | ||
|  | 	}
 | ||
|  | 	value := c.Val()
 | ||
|  | 	switch value {
 | ||
|  | 	case "to":
 | ||
|  | 		tos = c.RemainingArgs()
 | ||
|  | 		for i := range tos {
 | ||
|  | 			if tos[i] != "*" {
 | ||
|  | 				normalized, err := dnsutil.ParseHostPort(tos[i], "53")
 | ||
|  | 				if err != nil {
 | ||
|  | 					return nil, nil, err
 | ||
|  | 				}
 | ||
|  | 				tos[i] = normalized
 | ||
|  | 			}
 | ||
|  | 		}
 | ||
|  | 
 | ||
|  | 	case "from":
 | ||
|  | 		if !secondary {
 | ||
|  | 			return nil, nil, fmt.Errorf("can't use `transfer from` when not being a secondary")
 | ||
|  | 		}
 | ||
|  | 		froms = c.RemainingArgs()
 | ||
|  | 		for i := range froms {
 | ||
|  | 			if froms[i] != "*" {
 | ||
|  | 				normalized, err := dnsutil.ParseHostPort(froms[i], "53")
 | ||
|  | 				if err != nil {
 | ||
|  | 					return nil, nil, err
 | ||
|  | 				}
 | ||
|  | 				froms[i] = normalized
 | ||
|  | 			} else {
 | ||
|  | 				return nil, nil, fmt.Errorf("can't use '*' in transfer from")
 | ||
|  | 			}
 | ||
|  | 		}
 | ||
|  | 	}
 | ||
|  | 	return
 | ||
|  | }
 |