mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-31 10:13:14 -04:00 
			
		
		
		
	middleware/proxy: config syntax cleanups (#435)
* middleware/proxy: config syntax cleanups Allow port numbers to be used in the transfer statements and clean up the proxy stanza parsing. Also allow, when specifying an upstream, /etc/resolv.conf (or any other file) to be used for getting the upstream nameserver. Add tests and fix the documentation to make clear what is allowed. * Fix the other upstream parse as well
This commit is contained in:
		| @@ -1,18 +1,17 @@ | ||||
| package proxy | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"io/ioutil" | ||||
| 	"net" | ||||
| 	"net/http" | ||||
| 	"os" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| 	"sync/atomic" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/miekg/coredns/middleware" | ||||
| 	"github.com/miekg/coredns/middleware/pkg/dnsutil" | ||||
|  | ||||
| 	"github.com/mholt/caddy/caddyfile" | ||||
| 	"github.com/miekg/dns" | ||||
| @@ -68,26 +67,9 @@ func NewStaticUpstreams(c *caddyfile.Dispenser) ([]Upstream, error) { | ||||
| 		} | ||||
|  | ||||
| 		// process the host list, substituting in any nameservers in files | ||||
| 		var toHosts []string | ||||
| 		for _, host := range to { | ||||
| 			h, _, err := net.SplitHostPort(host) | ||||
| 			if err != nil { | ||||
| 				h = host | ||||
| 			} | ||||
| 			if x := net.ParseIP(h); x == nil { | ||||
| 				// it's a file, parse as resolv.conf | ||||
| 				c, err := dns.ClientConfigFromFile(host) | ||||
| 				if err == os.ErrNotExist { | ||||
| 					return upstreams, fmt.Errorf("not an IP address or file: `%s'", h) | ||||
| 				} else if err != nil { | ||||
| 					return upstreams, err | ||||
| 				} | ||||
| 				for _, s := range c.Servers { | ||||
| 					toHosts = append(toHosts, net.JoinHostPort(s, c.Port)) | ||||
| 				} | ||||
| 			} else { | ||||
| 				toHosts = append(toHosts, host) | ||||
| 			} | ||||
| 		toHosts, err := dnsutil.ParseHostPortOrFile(to...) | ||||
| 		if err != nil { | ||||
| 			return upstreams, err | ||||
| 		} | ||||
|  | ||||
| 		for c.NextBlock() { | ||||
| @@ -99,7 +81,7 @@ func NewStaticUpstreams(c *caddyfile.Dispenser) ([]Upstream, error) { | ||||
| 		upstream.Hosts = make([]*UpstreamHost, len(toHosts)) | ||||
| 		for i, host := range toHosts { | ||||
| 			uh := &UpstreamHost{ | ||||
| 				Name:        defaultHostPort(host), | ||||
| 				Name:        host, | ||||
| 				Conns:       0, | ||||
| 				Fails:       0, | ||||
| 				FailTimeout: upstream.FailTimeout, | ||||
| @@ -297,11 +279,3 @@ func (u *staticUpstream) IsAllowedPath(name string) bool { | ||||
| 	} | ||||
| 	return true | ||||
| } | ||||
|  | ||||
| func defaultHostPort(s string) string { | ||||
| 	_, _, e := net.SplitHostPort(s) | ||||
| 	if e == nil { | ||||
| 		return s | ||||
| 	} | ||||
| 	return net.JoinHostPort(s, "53") | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user