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