| ... | ... |
@@ -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 |
} |