mirror of
https://github.com/coredns/coredns.git
synced 2025-10-27 16:24:19 -04:00
45 lines
1000 B
Go
45 lines
1000 B
Go
|
|
package dnsserver
|
||
|
|
|
||
|
|
import (
|
||
|
|
"fmt"
|
||
|
|
"net"
|
||
|
|
"strings"
|
||
|
|
|
||
|
|
"github.com/miekg/dns"
|
||
|
|
)
|
||
|
|
|
||
|
|
type zoneAddr struct {
|
||
|
|
Zone string
|
||
|
|
Port string
|
||
|
|
}
|
||
|
|
|
||
|
|
// String return z.Zone + ":" + z.Port as a string.
|
||
|
|
func (z zoneAddr) String() string { return z.Zone + ":" + z.Port }
|
||
|
|
|
||
|
|
// normalizeZone parses an zone string into a structured format with separate
|
||
|
|
// host, and port portions, as well as the original input string.
|
||
|
|
func normalizeZone(str string) (zoneAddr, error) {
|
||
|
|
var err error
|
||
|
|
|
||
|
|
// separate host and port
|
||
|
|
host, port, err := net.SplitHostPort(str)
|
||
|
|
if err != nil {
|
||
|
|
host, port, err = net.SplitHostPort(str + ":")
|
||
|
|
// no error check here; return err at end of function
|
||
|
|
}
|
||
|
|
|
||
|
|
if len(host) > 255 {
|
||
|
|
return zoneAddr{}, fmt.Errorf("specified zone is too long: %d > 255", len(host))
|
||
|
|
}
|
||
|
|
_, d := dns.IsDomainName(host)
|
||
|
|
if !d {
|
||
|
|
return zoneAddr{}, fmt.Errorf("zone is not a valid domain name: %s", host)
|
||
|
|
}
|
||
|
|
|
||
|
|
if port == "" {
|
||
|
|
port = "53"
|
||
|
|
}
|
||
|
|
|
||
|
|
return zoneAddr{Zone: strings.ToLower(dns.Fqdn(host)), Port: port}, err
|
||
|
|
}
|