From 8972795de7653aea732bfe097b1ae7aed1e904a1 Mon Sep 17 00:00:00 2001 From: Lei Jitang Date: Fri, 27 Feb 2015 07:27:12 -0800 Subject: [PATCH] Add validate the input mac address on docker run command Signed-off-by: Lei Jitang --- opts/opts.go | 9 +++++++++ opts/opts_test.go | 14 ++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/opts/opts.go b/opts/opts.go index 6b42fa6871..cd720c9a92 100644 --- a/opts/opts.go +++ b/opts/opts.go @@ -188,6 +188,15 @@ func ValidateIPAddress(val string) (string, error) { return "", fmt.Errorf("%s is not an ip address", val) } +func ValidateMACAddress(val string) (string, error) { + _, err := net.ParseMAC(strings.TrimSpace(val)) + if err != nil { + return "", err + } else { + return val, nil + } +} + // Validates domain for resolvconf search configuration. // A zero length domain is represented by . func ValidateDnsSearch(val string) (string, error) { diff --git a/opts/opts_test.go b/opts/opts_test.go index 0f6bc4c28d..631d4c6b60 100644 --- a/opts/opts_test.go +++ b/opts/opts_test.go @@ -28,6 +28,20 @@ func TestValidateIPAddress(t *testing.T) { } +func TestValidateMACAddress(t *testing.T) { + if _, err := ValidateMACAddress(`92:d0:c6:0a:29:33`); err != nil { + t.Fatalf("ValidateMACAddress(`92:d0:c6:0a:29:33`) got %s", err) + } + + if _, err := ValidateMACAddress(`92:d0:c6:0a:33`); err == nil { + t.Fatalf("ValidateMACAddress(`92:d0:c6:0a:33`) succeeded; expected failure on invalid MAC") + } + + if _, err := ValidateMACAddress(`random invalid string`); err == nil { + t.Fatalf("ValidateMACAddress(`random invalid string`) succeeded; expected failure on invalid MAC") + } +} + func TestListOpts(t *testing.T) { o := NewListOpts(nil) o.Set("foo")