Allow IPv6 addresses in ExtraHosts option settings

Since the separator for extra host settings (for /etc/hosts in a
container) is a ":", the code that handles extra hosts needed to only
split on the first ":" to preserve IPv6 addresses which are passed via
the command line settings as well as stored in the JSON container
config.

Docker-DCO-1.1-Signed-off-by: Phil Estes <estesp@linux.vnet.ibm.com> (github: estesp)
This commit is contained in:
Phil Estes 2015-02-04 10:20:28 -05:00 committed by Vincent Demeester
parent 67735d2a16
commit d656c63b21
2 changed files with 30 additions and 1 deletions

View File

@ -204,7 +204,8 @@ func validateDomain(val string) (string, error) {
} }
func ValidateExtraHost(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 { if len(arr) != 2 || len(arr[0]) == 0 {
return "", fmt.Errorf("bad format for add-host: %s", val) return "", fmt.Errorf("bad format for add-host: %s", val)
} }

View File

@ -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")
}
}
}