diff options
author | Aleksandrs Ļedovskis <aleksandrs@ledovskis.lv> | 2018-11-09 12:22:42 +0200 |
---|---|---|
committer | Aleksandrs Ļedovskis <aleksandrs@ledovskis.lv> | 2018-11-28 12:51:07 +0200 |
commit | 58da992ff59a67e5ed3eb9c8e432956893838890 (patch) | |
tree | 23b298bdee8c0339205df58ef7106b43ddaedc6a /test/test_config.rb | |
parent | 4a75739624190e6076511a84e918f7d199c0de6e (diff) | |
download | net-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.rb | 128 |
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) |