diff --git a/libraries/devsec_ssh.rb b/libraries/devsec_ssh.rb index c0a276d..20623bc 100644 --- a/libraries/devsec_ssh.rb +++ b/libraries/devsec_ssh.rb @@ -191,7 +191,7 @@ def get_ssh_version(package) end # Guess the version of ssh via OS matrix - def guess_ssh_version + def guess_ssh_version # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity family = node['platform_family'] platform = node['platform'] version = node['platform_version'].to_f @@ -203,11 +203,20 @@ def guess_ssh_version return 6.6 if version >= 14.04 when 'debian' return 6.6 if version >= 8 + return 6.0 if version >= 7 return 5.3 if version <= 6 end when 'rhel' return 6.6 if version >= 7 return 5.3 if version >= 6 + when 'fedora' + return 7.3 if version >= 25 + return 7.2 if version >= 24 + when 'suse' + case platform + when 'opensuse' + return 6.6 if version >= 13.2 + end end Chef::Log.info("Unknown platform #{node['platform']} with version #{node['platform_version']} and family #{node['platform_family']}. Assuming ssh version #{FALLBACK_SSH_VERSION}") FALLBACK_SSH_VERSION diff --git a/spec/libraries/devsec_ssh_spec.rb b/spec/libraries/devsec_ssh_spec.rb index a2e6e54..1b52891 100644 --- a/spec/libraries/devsec_ssh_spec.rb +++ b/spec/libraries/devsec_ssh_spec.rb @@ -109,6 +109,46 @@ def self.debug(*); end end end + context 'when running on Fedora 25' do + let(:family) { 'fedora' } + let(:platform) { 'fedora' } + let(:version) { '25' } + + it 'should return ssh version 7.3' do + expect(subject.send(:guess_ssh_version)).to eq 7.3 + end + end + + context 'when running on Fedora 24' do + let(:family) { 'fedora' } + let(:platform) { 'fedora' } + let(:version) { '24' } + + it 'should return ssh version 7.2' do + expect(subject.send(:guess_ssh_version)).to eq 7.2 + end + end + + context 'when running on Opensuse 13.2' do + let(:family) { 'opensuse' } + let(:platform) { 'opensuse' } + let(:version) { '13.2' } + + it 'should return ssh version 6.6' do + expect(subject.send(:guess_ssh_version)).to eq 6.6 + end + end + + context 'when running on Opensuse 42.1' do + let(:family) { 'opensuse' } + let(:platform) { 'opensuse' } + let(:version) { '42.1' } + + it 'should return ssh version 6.6' do + expect(subject.send(:guess_ssh_version)).to eq 6.6 + end + end + context 'when running on unknown platform' do let(:family) { 'unknown' } let(:platform) { 'unknown' }