فهرست منبع

Add support for IPv6 addresses in --dns parameters.

Docker-DCO-1.1-Signed-off-by: Jan Pazdziora <jpazdziora@redhat.com> (github: adelton)
Jan Pazdziora 11 سال پیش
والد
کامیت
899e9e7416
3فایلهای تغییر یافته به همراه19 افزوده شده و 15 حذف شده
  1. 1 1
      docker/docker.go
  2. 6 6
      opts/opts.go
  3. 12 8
      opts/opts_test.go

+ 1 - 1
docker/docker.go

@@ -51,7 +51,7 @@ func main() {
 		flRoot               = flag.String([]string{"g", "-graph"}, "/var/lib/docker", "Path to use as the root of the Docker runtime")
 		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")
 		flEnableCors         = flag.Bool([]string{"#api-enable-cors", "-api-enable-cors"}, false, "Enable CORS headers in the remote API")
-		flDns                = opts.NewListOpts(opts.ValidateIp4Address)
+		flDns                = opts.NewListOpts(opts.ValidateIpAddress)
 		flDnsSearch          = opts.NewListOpts(opts.ValidateDnsSearch)
 		flEnableIptables     = flag.Bool([]string{"#iptables", "-iptables"}, true, "Enable Docker's addition of iptables rules")
 		flEnableIpForward    = flag.Bool([]string{"#ip-forward", "-ip-forward"}, true, "Enable net.ipv4.ip_forward")

+ 6 - 6
opts/opts.go

@@ -3,6 +3,7 @@ package opts
 import (
 	"fmt"
 	"github.com/dotcloud/docker/utils"
+	"net"
 	"os"
 	"path/filepath"
 	"regexp"
@@ -128,13 +129,12 @@ func ValidateEnv(val string) (string, error) {
 	return fmt.Sprintf("%s=%s", val, os.Getenv(val)), nil
 }
 
-func ValidateIp4Address(val string) (string, error) {
-	re := regexp.MustCompile(`^(([0-9]+\.){3}([0-9]+))\s*$`)
-	var ns = re.FindSubmatch([]byte(val))
-	if len(ns) > 0 {
-		return string(ns[1]), nil
+func ValidateIpAddress(val string) (string, error) {
+	var ip = net.ParseIP(strings.TrimSpace(val))
+	if ip != nil {
+		return ip.String(), nil
 	}
-	return "", fmt.Errorf("%s is not an ip4 address", val)
+	return "", fmt.Errorf("%s is not an ip address", val)
 }
 
 // Validates domain for resolvconf search configuration.

+ 12 - 8
opts/opts_test.go

@@ -5,20 +5,24 @@ import (
 )
 
 func TestValidateIP4(t *testing.T) {
-	if ret, err := ValidateIp4Address(`1.2.3.4`); err != nil || ret == "" {
-		t.Fatalf("ValidateIp4Address(`1.2.3.4`) got %s %s", ret, err)
+	if ret, err := ValidateIpAddress(`1.2.3.4`); err != nil || ret == "" {
+		t.Fatalf("ValidateIpAddress(`1.2.3.4`) got %s %s", ret, err)
 	}
 
-	if ret, err := ValidateIp4Address(`127.0.0.1`); err != nil || ret == "" {
-		t.Fatalf("ValidateIp4Address(`127.0.0.1`) got %s %s", ret, err)
+	if ret, err := ValidateIpAddress(`127.0.0.1`); err != nil || ret == "" {
+		t.Fatalf("ValidateIpAddress(`127.0.0.1`) got %s %s", ret, err)
 	}
 
-	if ret, err := ValidateIp4Address(`127`); err == nil || ret != "" {
-		t.Fatalf("ValidateIp4Address(`127`) got %s %s", ret, err)
+	if ret, err := ValidateIpAddress(`::1`); err != nil || ret == "" {
+		t.Fatalf("ValidateIpAddress(`::1`) got %s %s", ret, err)
 	}
 
-	if ret, err := ValidateIp4Address(`random invalid string`); err == nil || ret != "" {
-		t.Fatalf("ValidateIp4Address(`random invalid string`) got %s %s", ret, err)
+	if ret, err := ValidateIpAddress(`127`); err == nil || ret != "" {
+		t.Fatalf("ValidateIpAddress(`127`) got %s %s", ret, err)
+	}
+
+	if ret, err := ValidateIpAddress(`random invalid string`); err == nil || ret != "" {
+		t.Fatalf("ValidateIpAddress(`random invalid string`) got %s %s", ret, err)
 	}
 
 }