Support literal IPv6 nameservers
This effectively means that `doggo @2001:DB8::53 example.org` works just like we know it from `dig(1)`. This already works for IPv4 because `url.Parse` accepts a literal IPv4 address, but not a literal IPv6 address (due to parsing ambiguities with strings that look like an IPv4 address I guess). This is implemented by checking if the nameserver argument is a valid IP if the URL validation failed. If that's the case, `ns` is returned directly with the `[2001:DB8::53]:53` as address (from `net.JoinHostPort` with the default DNS port) and UDP as protocol (also the default if not specified).pull/66/head
parent
c21f90c2bc
commit
88c63d6b41
|
@ -61,7 +61,11 @@ func initNameserver(n string) (models.Nameserver, error) {
|
||||||
}
|
}
|
||||||
u, err := url.Parse(n)
|
u, err := url.Parse(n)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ns, err
|
ip := net.ParseIP(n)
|
||||||
|
if ip == nil {
|
||||||
|
return ns, err
|
||||||
|
}
|
||||||
|
return ns, nil
|
||||||
}
|
}
|
||||||
switch u.Scheme {
|
switch u.Scheme {
|
||||||
case "sdns":
|
case "sdns":
|
||||||
|
|
Loading…
Reference in New Issue