summaryrefslogtreecommitdiff
path: root/test/test_config.rb
diff options
context:
space:
mode:
authorAleksandrs Ļedovskis <aleksandrs@ledovskis.lv>2018-11-09 12:22:42 +0200
committerAleksandrs Ļedovskis <aleksandrs@ledovskis.lv>2018-11-28 12:51:07 +0200
commit58da992ff59a67e5ed3eb9c8e432956893838890 (patch)
tree23b298bdee8c0339205df58ef7106b43ddaedc6a /test/test_config.rb
parent4a75739624190e6076511a84e918f7d199c0de6e (diff)
downloadnet-ssh-58da992ff59a67e5ed3eb9c8e432956893838890.tar.gz
Improve processing of ssh_config Match conditions
Previously wasn't correctly handling quoted and `=` delimited values. Also, fixes logic that unsupported `Match` conditions result in subsequent declarations to be applied for configuration. OpenSSH implementation details: - https://github.com/openssh/openssh-portable/blob/624d19ac2d56fa86a22417c35536caceb3be346f/readconf.c#L599 - https://github.com/openssh/openssh-portable/blob/624d19ac2d56fa86a22417c35536caceb3be346f/misc.c#L284-L285 Signed-off-by: Aleksandrs Ļedovskis <aleksandrs@ledovskis.lv>
Diffstat (limited to 'test/test_config.rb')
-rw-r--r--test/test_config.rb128
1 files changed, 127 insertions, 1 deletions
diff --git a/test/test_config.rb b/test/test_config.rb
index 3a10cd2..d44fbce 100644
--- a/test/test_config.rb
+++ b/test/test_config.rb
@@ -310,7 +310,7 @@ class TestConfig < NetSSHTest
net_ssh = Net::SSH::Config.translate(config)
assert_equal true, net_ssh[:forward_agent]
assert_equal true, net_ssh[:compression]
- assert_equal 2345, net_ssh[:port]
+ assert_equal 22, net_ssh[:port]
end
def test_load_with_match_block_with_host
@@ -361,6 +361,132 @@ class TestConfig < NetSSHTest
end
end
+ def test_load_with_match_block_with_multi_space_separated_hosts_condition
+ # Extra tabs are thrown in between, for good measure
+ data = %q{
+ Match host foo,*.baz.com
+ Port 1234
+ Compression no
+ }
+ with_config_from_data data do |f|
+ config = Net::SSH::Config.load(f, "bar2")
+ assert_nil config['port']
+ config = Net::SSH::Config.load(f, "bbaz.com")
+ assert_nil config['port']
+ config = Net::SSH::Config.load(f, "bar.baz.com")
+ assert_equal 1234, config['port']
+ config = Net::SSH::Config.load(f, "foo")
+ assert_equal 1234, config['port']
+ end
+ end
+
+ def test_load_with_match_block_with_quoted_hosts_condition
+ data = %q{
+ Match host "foo,*.baz.com"
+ Port 1234
+ Compression no
+ }
+ with_config_from_data data do |f|
+ config = Net::SSH::Config.load(f, "bar2")
+ assert_nil config['port']
+ config = Net::SSH::Config.load(f, "bbaz.com")
+ assert_nil config['port']
+ config = Net::SSH::Config.load(f, "bar.baz.com")
+ assert_equal 1234, config['port']
+ config = Net::SSH::Config.load(f, "foo")
+ assert_equal 1234, config['port']
+ end
+ end
+
+ def test_load_with_match_block_with_equal_signed_hosts_condition
+ data = %q{
+ Match host=foo,*.baz.com
+ Port 1234
+ Compression no
+ }
+ with_config_from_data data do |f|
+ config = Net::SSH::Config.load(f, "bar2")
+ assert_nil config['port']
+ config = Net::SSH::Config.load(f, "bbaz.com")
+ assert_nil config['port']
+ config = Net::SSH::Config.load(f, "bar.baz.com")
+ assert_equal 1234, config['port']
+ config = Net::SSH::Config.load(f, "foo")
+ assert_equal 1234, config['port']
+ end
+ end
+
+ def test_load_with_match_block_with_quoted_equal_signed_hosts_condition
+ data = %q{
+ Match host="foo,*.baz.com"
+ Port 1234
+ Compression no
+ }
+ with_config_from_data data do |f|
+ config = Net::SSH::Config.load(f, "bar2")
+ assert_nil config['port']
+ config = Net::SSH::Config.load(f, "bbaz.com")
+ assert_nil config['port']
+ config = Net::SSH::Config.load(f, "bar.baz.com")
+ assert_equal 1234, config['port']
+ config = Net::SSH::Config.load(f, "foo")
+ assert_equal 1234, config['port']
+ end
+ end
+
+ def test_load_with_match_block_with_whitespace_separated_equal_signed_hosts_condition
+ data = %q{
+ Match host = foo,*.baz.com
+ Port 1234
+ Compression no
+ }
+ with_config_from_data data do |f|
+ config = Net::SSH::Config.load(f, "bar2")
+ assert_nil config['port']
+ config = Net::SSH::Config.load(f, "bbaz.com")
+ assert_nil config['port']
+ config = Net::SSH::Config.load(f, "bar.baz.com")
+ assert_equal 1234, config['port']
+ config = Net::SSH::Config.load(f, "foo")
+ assert_equal 1234, config['port']
+ end
+ end
+
+ def test_load_with_match_block_with_multi_equal_signed_hosts_condition
+ data = %q{
+ Match host==foo,*.baz.com
+ Port 1234
+ Compression no
+ }
+ with_config_from_data data do |f|
+ config = Net::SSH::Config.load(f, "bar2")
+ assert_nil config['port']
+ config = Net::SSH::Config.load(f, "bbaz.com")
+ assert_nil config['port']
+ config = Net::SSH::Config.load(f, "bar.baz.com")
+ assert_nil config['port']
+ config = Net::SSH::Config.load(f, "foo")
+ assert_nil config['port']
+ end
+ end
+
+ def test_load_with_multiple_hosts_criteria
+ data = %q{
+ Match host *.baz.com host !bar.baz.com
+ Port 1234
+ }
+ with_config_from_data data do |f|
+ config = Net::SSH::Config.load(f, "bar2")
+ assert_nil config['port']
+ config = Net::SSH::Config.load(f, "bbaz.com")
+ assert_nil config['port']
+ config = Net::SSH::Config.load(f, "bar.baz.com")
+ assert_nil config['port']
+ config = Net::SSH::Config.load(f, "meh.baz.com")
+ assert_equal 1234, config['port']
+ end
+ end
+
private
def with_home_env(value,&block)