diff --git a/etcd.go b/etcd.go index 7bfb6c957..1cf9ca41d 100644 --- a/etcd.go +++ b/etcd.go @@ -142,18 +142,27 @@ var info *Info // //------------------------------------------------------------------------------ -// Check a URL and clean it up if the user forgot the schema -func checkURL(u string, defaultSchema string) string { - p, err := url.Parse(u) +// sanitizeURL will cleanup a host string in the format hostname:port and +// attach a schema. +func sanitizeURL(host string, defaultScheme string) string { + // Blank URLs are fine input, just return it + if len(host) == 0 { + return host + } + p, err := url.Parse(host) if err != nil { - panic(err) + fatal(err) } - if len(p.Host) == 0 && len(defaultSchema) != 0 { - return checkURL(fmt.Sprintf("%s://%s", defaultSchema, u), "") + // Make sure the host is in Host:Port format + _, _, err = net.SplitHostPort(host) + if err != nil { + fatal(err) } + p = &url.URL{Host: host, Scheme: defaultScheme} + return p.String() } @@ -226,8 +235,9 @@ func main() { fatal("ERROR: server name required. e.g. '-n=server_name'") } - argInfo.RaftURL = checkURL(argInfo.RaftURL, raftDefaultScheme) - argInfo.EtcdURL = checkURL(argInfo.EtcdURL, etcdDefaultScheme) + argInfo.RaftURL = sanitizeURL(argInfo.RaftURL, raftTlsConfig.Scheme) + argInfo.EtcdURL = sanitizeURL(argInfo.EtcdURL, etcdTlsConfig.Scheme) + argInfo.WebURL = sanitizeURL(argInfo.WebURL, "http") // Setup commands. registerCommands()