embed: reject binding listeners to domain names

Fixes #6336
This commit is contained in:
Anthony Romano 2016-09-06 15:30:51 -07:00
parent da6a0f0594
commit 2752169d6a

View File

@ -17,6 +17,7 @@ package embed
import (
"fmt"
"io/ioutil"
"net"
"net/http"
"net/url"
"strings"
@ -253,6 +254,13 @@ func (cfg *configYAML) configFromFile(path string) error {
}
func (cfg *Config) Validate() error {
if err := checkBindURLs(cfg.LPUrls); err != nil {
return err
}
if err := checkBindURLs(cfg.LCUrls); err != nil {
return err
}
// Check if conflicting flags are passed.
nSet := 0
for _, v := range []bool{cfg.Durl != "", cfg.InitialCluster != "", cfg.DNSCluster != ""} {
@ -346,3 +354,22 @@ func (cfg Config) IsDefaultHost() (string, error) {
}
return "", defaultHostStatus
}
// checkBindURLs returns an error if any URL uses a domain name.
func checkBindURLs(urls []url.URL) error {
for _, url := range urls {
if url.Scheme == "unix" || url.Scheme == "unixs" {
continue
}
host := strings.Split(url.Host, ":")[0]
if host == "localhost" {
// special case for local address
// TODO: support /etc/hosts ?
continue
}
if net.ParseIP(host) == nil {
return fmt.Errorf("expected IP in URL for binding (%s)", url.String())
}
}
return nil
}