mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-30 17:53:21 -04:00 
			
		
		
		
	Cleanup the errors and removed deadcode along the way. The leaves some error laying around, mostly about commenting exported identifier. We should look hard if those really are needed.
		
			
				
	
	
		
			80 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package middleware
 | |
| 
 | |
| import (
 | |
| 	"net"
 | |
| 	"strings"
 | |
| 
 | |
| 	"github.com/miekg/dns"
 | |
| )
 | |
| 
 | |
| // Zones respresents a lists of zone names.
 | |
| type Zones []string
 | |
| 
 | |
| // Matches checks is qname is a subdomain of any of the zones in z.  The match
 | |
| // will return the most specific zones that matches other. The empty string
 | |
| // signals a not found condition.
 | |
| func (z Zones) Matches(qname string) string {
 | |
| 	zone := ""
 | |
| 	for _, zname := range z {
 | |
| 		if dns.IsSubDomain(zname, qname) {
 | |
| 			// We want the *longest* matching zone, otherwise we may end up in a parent
 | |
| 			if len(zname) > len(zone) {
 | |
| 				zone = zname
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	return zone
 | |
| }
 | |
| 
 | |
| // Normalize fully qualifies all zones in z.
 | |
| func (z Zones) Normalize() {
 | |
| 	for i := range z {
 | |
| 		z[i] = Name(z[i]).Normalize()
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // Name represents a domain name.
 | |
| type Name string
 | |
| 
 | |
| // Matches checks to see if other is a subdomain (or the same domain) of n.
 | |
| // This method assures that names can be easily and consistently matched.
 | |
| func (n Name) Matches(child string) bool {
 | |
| 	if dns.Name(n) == dns.Name(child) {
 | |
| 		return true
 | |
| 	}
 | |
| 	return dns.IsSubDomain(string(n), child)
 | |
| }
 | |
| 
 | |
| // Normalize lowercases and makes n fully qualified.
 | |
| func (n Name) Normalize() string { return strings.ToLower(dns.Fqdn(string(n))) }
 | |
| 
 | |
| type (
 | |
| 	// Host represents a host from the Corefile, may contain port.
 | |
| 	Host string // Host represents a host from the Corefile, may contain port.
 | |
| 	// Addr resprents an address in the Corefile.
 | |
| 	Addr string // Addr resprents an address in the Corefile.
 | |
| )
 | |
| 
 | |
| // Normalize will return the host portion of host, stripping
 | |
| // of any port. The host will also be fully qualified and lowercased.
 | |
| func (h Host) Normalize() string {
 | |
| 	// separate host and port
 | |
| 	host, _, err := net.SplitHostPort(string(h))
 | |
| 	if err != nil {
 | |
| 		host, _, _ = net.SplitHostPort(string(h) + ":")
 | |
| 	}
 | |
| 	return Name(host).Normalize()
 | |
| }
 | |
| 
 | |
| // Normalize will return a normalized address, if not port is specified
 | |
| // port 53 is added, otherwise the port will be left as is.
 | |
| func (a Addr) Normalize() string {
 | |
| 	// separate host and port
 | |
| 	addr, port, err := net.SplitHostPort(string(a))
 | |
| 	if err != nil {
 | |
| 		addr, port, _ = net.SplitHostPort(string(a) + ":53")
 | |
| 	}
 | |
| 	// TODO(miek): lowercase it?
 | |
| 	return net.JoinHostPort(addr, port)
 | |
| }
 |