Docker-DCO-1.1-Signed-off-by: Jan Pazdziora <jpazdziora@redhat.com> (github: adelton)
| ... | ... |
@@ -51,7 +51,7 @@ func main() {
|
| 51 | 51 |
flRoot = flag.String([]string{"g", "-graph"}, "/var/lib/docker", "Path to use as the root of the Docker runtime")
|
| 52 | 52 |
flSocketGroup = flag.String([]string{"G", "-group"}, "docker", "Group to assign the unix socket specified by -H when running in daemon mode\nuse '' (the empty string) to disable setting of a group")
|
| 53 | 53 |
flEnableCors = flag.Bool([]string{"#api-enable-cors", "-api-enable-cors"}, false, "Enable CORS headers in the remote API")
|
| 54 |
- flDns = opts.NewListOpts(opts.ValidateIp4Address) |
|
| 54 |
+ flDns = opts.NewListOpts(opts.ValidateIpAddress) |
|
| 55 | 55 |
flDnsSearch = opts.NewListOpts(opts.ValidateDnsSearch) |
| 56 | 56 |
flEnableIptables = flag.Bool([]string{"#iptables", "-iptables"}, true, "Enable Docker's addition of iptables rules")
|
| 57 | 57 |
flEnableIpForward = flag.Bool([]string{"#ip-forward", "-ip-forward"}, true, "Enable net.ipv4.ip_forward")
|
| ... | ... |
@@ -3,6 +3,7 @@ package opts |
| 3 | 3 |
import ( |
| 4 | 4 |
"fmt" |
| 5 | 5 |
"github.com/dotcloud/docker/utils" |
| 6 |
+ "net" |
|
| 6 | 7 |
"os" |
| 7 | 8 |
"path/filepath" |
| 8 | 9 |
"regexp" |
| ... | ... |
@@ -128,13 +129,12 @@ func ValidateEnv(val string) (string, error) {
|
| 128 | 128 |
return fmt.Sprintf("%s=%s", val, os.Getenv(val)), nil
|
| 129 | 129 |
} |
| 130 | 130 |
|
| 131 |
-func ValidateIp4Address(val string) (string, error) {
|
|
| 132 |
- re := regexp.MustCompile(`^(([0-9]+\.){3}([0-9]+))\s*$`)
|
|
| 133 |
- var ns = re.FindSubmatch([]byte(val)) |
|
| 134 |
- if len(ns) > 0 {
|
|
| 135 |
- return string(ns[1]), nil |
|
| 131 |
+func ValidateIpAddress(val string) (string, error) {
|
|
| 132 |
+ var ip = net.ParseIP(strings.TrimSpace(val)) |
|
| 133 |
+ if ip != nil {
|
|
| 134 |
+ return ip.String(), nil |
|
| 136 | 135 |
} |
| 137 |
- return "", fmt.Errorf("%s is not an ip4 address", val)
|
|
| 136 |
+ return "", fmt.Errorf("%s is not an ip address", val)
|
|
| 138 | 137 |
} |
| 139 | 138 |
|
| 140 | 139 |
// Validates domain for resolvconf search configuration. |
| ... | ... |
@@ -5,20 +5,24 @@ import ( |
| 5 | 5 |
) |
| 6 | 6 |
|
| 7 | 7 |
func TestValidateIP4(t *testing.T) {
|
| 8 |
- if ret, err := ValidateIp4Address(`1.2.3.4`); err != nil || ret == "" {
|
|
| 9 |
- t.Fatalf("ValidateIp4Address(`1.2.3.4`) got %s %s", ret, err)
|
|
| 8 |
+ if ret, err := ValidateIpAddress(`1.2.3.4`); err != nil || ret == "" {
|
|
| 9 |
+ t.Fatalf("ValidateIpAddress(`1.2.3.4`) got %s %s", ret, err)
|
|
| 10 | 10 |
} |
| 11 | 11 |
|
| 12 |
- if ret, err := ValidateIp4Address(`127.0.0.1`); err != nil || ret == "" {
|
|
| 13 |
- t.Fatalf("ValidateIp4Address(`127.0.0.1`) got %s %s", ret, err)
|
|
| 12 |
+ if ret, err := ValidateIpAddress(`127.0.0.1`); err != nil || ret == "" {
|
|
| 13 |
+ t.Fatalf("ValidateIpAddress(`127.0.0.1`) got %s %s", ret, err)
|
|
| 14 | 14 |
} |
| 15 | 15 |
|
| 16 |
- if ret, err := ValidateIp4Address(`127`); err == nil || ret != "" {
|
|
| 17 |
- t.Fatalf("ValidateIp4Address(`127`) got %s %s", ret, err)
|
|
| 16 |
+ if ret, err := ValidateIpAddress(`::1`); err != nil || ret == "" {
|
|
| 17 |
+ t.Fatalf("ValidateIpAddress(`::1`) got %s %s", ret, err)
|
|
| 18 | 18 |
} |
| 19 | 19 |
|
| 20 |
- if ret, err := ValidateIp4Address(`random invalid string`); err == nil || ret != "" {
|
|
| 21 |
- t.Fatalf("ValidateIp4Address(`random invalid string`) got %s %s", ret, err)
|
|
| 20 |
+ if ret, err := ValidateIpAddress(`127`); err == nil || ret != "" {
|
|
| 21 |
+ t.Fatalf("ValidateIpAddress(`127`) got %s %s", ret, err)
|
|
| 22 |
+ } |
|
| 23 |
+ |
|
| 24 |
+ if ret, err := ValidateIpAddress(`random invalid string`); err == nil || ret != "" {
|
|
| 25 |
+ t.Fatalf("ValidateIpAddress(`random invalid string`) got %s %s", ret, err)
|
|
| 22 | 26 |
} |
| 23 | 27 |
|
| 24 | 28 |
} |