summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Delaney <matthew.l.delaney@gmail.com>2015-05-26 10:21:06 -0600
committerMatt Delaney <delaney@tubularlabs.com>2016-09-10 17:17:10 -0700
commit21d971a74d674aaa6cfd64454061d957dfccecc7 (patch)
treedb9e76de4ecf8a96bfe9b7efed80a3d7d941aeed
parent5b668d5ef34102c9ac159a8f21c889fdc7f99f1b (diff)
downloadnet-ssh-multi-21d971a74d674aaa6cfd64454061d957dfccecc7.tar.gz
Fixed host parsing to work with ipv6 addresses
can now put [ ] around the ip address, without this ipv6 addresses that are like 2605:fd00:4:1000:f816:3eff:fe33:4679 would be have '4679' be interpreted as a port number.
-rw-r--r--lib/net/ssh/multi/server.rb2
-rw-r--r--test/server_test.rb4
2 files changed, 5 insertions, 1 deletions
diff --git a/lib/net/ssh/multi/server.rb b/lib/net/ssh/multi/server.rb
index f8fa552..77c5948 100644
--- a/lib/net/ssh/multi/server.rb
+++ b/lib/net/ssh/multi/server.rb
@@ -44,7 +44,7 @@ module Net; module SSH; module Multi
@master = master
@options = options.dup
- @user, @host, port = host.match(/^(?:([^;,:=]+)@|)(.*?)(?::(\d+)|)$/)[1,3]
+ @user, @host, port = host.match(/^(?:([^;,:=]+)@|)\[?(.*?)\]?(?::(\d+)|)$/)[1,3]
user_opt, port_opt = @options.delete(:user), @options.delete(:port)
diff --git a/test/server_test.rb b/test/server_test.rb
index 544ea16..ecfa12e 100644
--- a/test/server_test.rb
+++ b/test/server_test.rb
@@ -14,6 +14,10 @@ class ServerTest < Minitest::Test
assert_equal "hello", server('host', :properties => { :foo => "hello" })[:foo]
end
+ def test_ipv6_works_with_given_port_using_bracket_notation
+ assert_equal 9022, server('[2001:DB8::1234]:9022').port
+ end
+
def test_port_should_return_22_by_default
assert_equal 22, server('host').port
end