Make DefaultPort just be 53. And use the value of Port to make the zone stanzas complete (instead of defaulting to 53 always). This allows you to override the port with dns.port.
46 lines
1 KiB
Go
46 lines
1 KiB
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.
|
|
//
|
|
// TODO(miek): possibly move this to middleware/normalize.go
|
|
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 = Port
|
|
}
|
|
|
|
return zoneAddr{Zone: strings.ToLower(dns.Fqdn(host)), Port: port}, err
|
|
}
|