... | ... |
@@ -129,7 +129,7 @@ func ValidateEnv(val string) (string, error) { |
129 | 129 |
} |
130 | 130 |
|
131 | 131 |
func ValidateHost(val string) (string, error) { |
132 |
- host, err := utils.ParseHost(DEFAULTHTTPHOST, DEFAULTHTTPPORT, val) |
|
132 |
+ host, err := utils.ParseHost(DEFAULTHTTPHOST, DEFAULTHTTPPORT, DEFAULTUNIXSOCKET, val) |
|
133 | 133 |
if err != nil { |
134 | 134 |
return val, err |
135 | 135 |
} |
... | ... |
@@ -776,11 +776,21 @@ func GetNameserversAsCIDR(resolvConf []byte) []string { |
776 | 776 |
return nameservers |
777 | 777 |
} |
778 | 778 |
|
779 |
-func ParseHost(host string, port int, addr string) (string, error) { |
|
780 |
- var proto string |
|
779 |
+// FIXME: Change this not to receive default value as parameter |
|
780 |
+func ParseHost(defaultHost string, defaultPort int, defaultUnix, addr string) (string, error) { |
|
781 |
+ var ( |
|
782 |
+ proto string |
|
783 |
+ host string |
|
784 |
+ port int |
|
785 |
+ ) |
|
786 |
+ |
|
781 | 787 |
switch { |
782 | 788 |
case strings.HasPrefix(addr, "unix://"): |
783 |
- return addr, nil |
|
789 |
+ proto = "unix" |
|
790 |
+ addr = strings.TrimPrefix(addr, "unix://") |
|
791 |
+ if addr == "" { |
|
792 |
+ addr = defaultUnix |
|
793 |
+ } |
|
784 | 794 |
case strings.HasPrefix(addr, "tcp://"): |
785 | 795 |
proto = "tcp" |
786 | 796 |
addr = strings.TrimPrefix(addr, "tcp://") |
... | ... |
@@ -791,19 +801,29 @@ func ParseHost(host string, port int, addr string) (string, error) { |
791 | 791 |
proto = "tcp" |
792 | 792 |
} |
793 | 793 |
|
794 |
- if strings.Contains(addr, ":") { |
|
794 |
+ if proto != "unix" && strings.Contains(addr, ":") { |
|
795 | 795 |
hostParts := strings.Split(addr, ":") |
796 | 796 |
if len(hostParts) != 2 { |
797 | 797 |
return "", fmt.Errorf("Invalid bind address format: %s", addr) |
798 | 798 |
} |
799 | 799 |
if hostParts[0] != "" { |
800 | 800 |
host = hostParts[0] |
801 |
+ } else { |
|
802 |
+ host = defaultHost |
|
801 | 803 |
} |
802 |
- if p, err := strconv.Atoi(hostParts[1]); err == nil { |
|
804 |
+ |
|
805 |
+ if p, err := strconv.Atoi(hostParts[1]); err == nil && p != 0 { |
|
803 | 806 |
port = p |
807 |
+ } else { |
|
808 |
+ port = defaultPort |
|
804 | 809 |
} |
810 |
+ |
|
805 | 811 |
} else { |
806 | 812 |
host = addr |
813 |
+ port = defaultPort |
|
814 |
+ } |
|
815 |
+ if proto == "unix" { |
|
816 |
+ return fmt.Sprintf("%s://%s", proto, host), nil |
|
807 | 817 |
} |
808 | 818 |
return fmt.Sprintf("%s://%s:%d", proto, host, port), nil |
809 | 819 |
} |
... | ... |
@@ -299,22 +299,28 @@ func assertRAMInBytes(t *testing.T, size string, expectError bool, expectedBytes |
299 | 299 |
} |
300 | 300 |
|
301 | 301 |
func TestParseHost(t *testing.T) { |
302 |
- if addr, err := ParseHost("127.0.0.1", 4243, "0.0.0.0"); err != nil || addr != "tcp://0.0.0.0:4243" { |
|
302 |
+ if addr, err := ParseHost("127.0.0.1", 4243, "/var/run/docker.sock", "0.0.0.0"); err != nil || addr != "tcp://0.0.0.0:4243" { |
|
303 | 303 |
t.Errorf("0.0.0.0 -> expected tcp://0.0.0.0:4243, got %s", addr) |
304 | 304 |
} |
305 |
- if addr, err := ParseHost("127.0.0.1", 4243, "0.0.0.1:5555"); err != nil || addr != "tcp://0.0.0.1:5555" { |
|
305 |
+ if addr, err := ParseHost("127.0.0.1", 4243, "/var/run/docker.sock", "0.0.0.1:5555"); err != nil || addr != "tcp://0.0.0.1:5555" { |
|
306 | 306 |
t.Errorf("0.0.0.1:5555 -> expected tcp://0.0.0.1:5555, got %s", addr) |
307 | 307 |
} |
308 |
- if addr, err := ParseHost("127.0.0.1", 4243, ":6666"); err != nil || addr != "tcp://127.0.0.1:6666" { |
|
308 |
+ if addr, err := ParseHost("127.0.0.1", 4243, "/var/run/docker.sock", ":6666"); err != nil || addr != "tcp://127.0.0.1:6666" { |
|
309 | 309 |
t.Errorf(":6666 -> expected tcp://127.0.0.1:6666, got %s", addr) |
310 | 310 |
} |
311 |
- if addr, err := ParseHost("127.0.0.1", 4243, "tcp://:7777"); err != nil || addr != "tcp://127.0.0.1:7777" { |
|
311 |
+ if addr, err := ParseHost("127.0.0.1", 4243, "/var/run/docker.sock", "tcp://:7777"); err != nil || addr != "tcp://127.0.0.1:7777" { |
|
312 | 312 |
t.Errorf("tcp://:7777 -> expected tcp://127.0.0.1:7777, got %s", addr) |
313 | 313 |
} |
314 |
- if addr, err := ParseHost("127.0.0.1", 4243, "unix:///var/run/docker.sock"); err != nil || addr != "unix:///var/run/docker.sock" { |
|
314 |
+ if addr, err := ParseHost("127.0.0.1", 4243, "/var/run/docker.sock", "unix:///var/run/docker.sock"); err != nil || addr != "unix:///var/run/docker.sock" { |
|
315 | 315 |
t.Errorf("unix:///var/run/docker.sock -> expected unix:///var/run/docker.sock, got %s", addr) |
316 | 316 |
} |
317 |
- if addr, err := ParseHost("127.0.0.1", 4243, "udp://127.0.0.1"); err == nil { |
|
317 |
+ if addr, err := ParseHost("127.0.0.1", 4243, "/var/run/docker.sock", "unix://"); err != nil || addr != "unix:///var/run/docker.sock" { |
|
318 |
+ t.Errorf("unix:///var/run/docker.sock -> expected unix:///var/run/docker.sock, got %s", addr) |
|
319 |
+ } |
|
320 |
+ if addr, err := ParseHost("127.0.0.1", 4243, "/var/run/docker.sock", "udp://127.0.0.1"); err == nil { |
|
321 |
+ t.Errorf("udp protocol address expected error return, but err == nil. Got %s", addr) |
|
322 |
+ } |
|
323 |
+ if addr, err := ParseHost("127.0.0.1", 4243, "/var/run/docker.sock", "udp://127.0.0.1:4243"); err == nil { |
|
318 | 324 |
t.Errorf("udp protocol address expected error return, but err == nil. Got %s", addr) |
319 | 325 |
} |
320 | 326 |
} |