From c73f17fb6eb49f8145c9817ef77f710165a69392 Mon Sep 17 00:00:00 2001 From: Dong Chen Date: Tue, 1 Mar 2016 16:28:24 -0800 Subject: [PATCH] Support IPv6 address format. Signed-off-by: Dong Chen --- cli/join.go | 8 +++++++- cli/join_test.go | 3 +++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/cli/join.go b/cli/join.go index df8c64d245..403b9c150b 100644 --- a/cli/join.go +++ b/cli/join.go @@ -2,6 +2,7 @@ package cli import ( "math/rand" + "net" "regexp" "time" @@ -11,7 +12,12 @@ import ( ) func checkAddrFormat(addr string) bool { - m, _ := regexp.MatchString("^[0-9a-zA-Z._-]+:[0-9]{1,5}$", addr) + // validate addr is in host:port form. Use net function to handle both IPv4/IPv6 cases. + _, port, err := net.SplitHostPort(addr) + if err != nil { + return false + } + m, _ := regexp.MatchString("^[0-9]{1,5}$", port) return m } diff --git a/cli/join_test.go b/cli/join_test.go index fb093caf62..9680b2f831 100644 --- a/cli/join_test.go +++ b/cli/join_test.go @@ -24,4 +24,7 @@ func TestCheckAddrFormat(t *testing.T) { assert.True(t, checkAddrFormat("1.1.1.1:1111")) assert.True(t, checkAddrFormat("hostname:1111")) assert.True(t, checkAddrFormat("host-name_42:1111")) + assert.True(t, checkAddrFormat("[2001:db8:0:f101::3]:2375")) + assert.False(t, checkAddrFormat("2001:db8:0:f101::3:2375")) + assert.False(t, checkAddrFormat("[2001:db8:0:f101::3]:3:2375")) }