Skip to content

Commit

Permalink
Merge pull request moby#10556 from estesp/ipv6-extra-hosts
Browse files Browse the repository at this point in the history
Allow IPv6 addresses in ExtraHosts option settings
  • Loading branch information
Jessie Frazelle committed Feb 6, 2015
2 parents c2f82bb + fdfa205 commit 76bf543
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 2 deletions.
3 changes: 2 additions & 1 deletion daemon/container.go
Original file line number Diff line number Diff line change
Expand Up @@ -461,7 +461,8 @@ func (container *Container) buildHostsFiles(IP string) error {
}

for _, extraHost := range container.hostConfig.ExtraHosts {
parts := strings.Split(extraHost, ":")
// allow IPv6 addresses in extra hosts; only split on first ":"
parts := strings.SplitN(extraHost, ":", 2)
extraContent = append(extraContent, etchosts.Record{Hosts: parts[0], IP: parts[1]})
}

Expand Down
3 changes: 2 additions & 1 deletion opts/opts.go
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,8 @@ func validateDomain(val string) (string, error) {
}

func ValidateExtraHost(val string) (string, error) {
arr := strings.Split(val, ":")
// allow for IPv6 addresses in extra hosts by only splitting on first ":"
arr := strings.SplitN(val, ":", 2)
if len(arr) != 2 || len(arr[0]) == 0 {
return "", fmt.Errorf("bad format for add-host: %s", val)
}
Expand Down
28 changes: 28 additions & 0 deletions opts/opts_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,3 +104,31 @@ func TestValidateDnsSearch(t *testing.T) {
}
}
}

func TestValidateExtraHosts(t *testing.T) {
valid := []string{
`myhost:192.168.0.1`,
`thathost:10.0.2.1`,
`anipv6host:2003:ab34:e::1`,
`ipv6local:::1`,
}

invalid := []string{
`myhost:192.notanipaddress.1`,
`thathost-nosemicolon10.0.0.1`,
`anipv6host:::::1`,
`ipv6local:::0::`,
}

for _, extrahost := range valid {
if _, err := ValidateExtraHost(extrahost); err != nil {
t.Fatalf("ValidateExtraHost(`"+extrahost+"`) should succeed: error %v", err)
}
}

for _, extrahost := range invalid {
if _, err := ValidateExtraHost(extrahost); err == nil {
t.Fatalf("ValidateExtraHost(`" + extrahost + "`) should have failed validation")
}
}
}

0 comments on commit 76bf543

Please sign in to comment.