diff options
| -rw-r--r-- | CHANGELOG.rdoc | 2 | ||||
| -rw-r--r-- | lib/net/ssh/authentication/key_manager.rb | 17 | ||||
| -rw-r--r-- | test/authentication/test_key_manager.rb | 7 |
3 files changed, 19 insertions, 7 deletions
diff --git a/CHANGELOG.rdoc b/CHANGELOG.rdoc index 39231cf..54de5b9 100644 --- a/CHANGELOG.rdoc +++ b/CHANGELOG.rdoc @@ -1,5 +1,7 @@ === unreleased +* Revert to pre-2.0.7 key-loading behavior by default, but load private-key if public-key doesn't exist [Jamis Buck] + * Make sure :passphrase option gets passed to key manager [Bob Cotton] diff --git a/lib/net/ssh/authentication/key_manager.rb b/lib/net/ssh/authentication/key_manager.rb index 7e0e9f2..f934bfc 100644 --- a/lib/net/ssh/authentication/key_manager.rb +++ b/lib/net/ssh/authentication/key_manager.rb @@ -88,14 +88,23 @@ module Net end key_files.each do |file| - if File.readable?(file) + public_key_file = file + ".pub" + if File.readable?(public_key_file) begin - private_key = KeyFactory.load_private_key(file,options[:passphrase]) - key = private_key.send :public_key + key = KeyFactory.load_public_key(public_key_file) known_identities[key] = { :from => :file, :file => file } yield key rescue Exception => e - error { "could not load public key file `#{file}.pub': #{e.class} (#{e.message})" } + error { "could not load public key file `#{public_key_file}': #{e.class} (#{e.message})" } + end + elsif File.readable?(file) + begin + private_key = KeyFactory.load_private_key(file, options[:passphrase]) + key = private_key.send(:public_key) + known_identities[key] = { :from => :file, :file => file, :key => private_key } + yield key + rescue Exception => e + error { "could not load private key file `#{file}': #{e.class} (#{e.message})" } end end end diff --git a/test/authentication/test_key_manager.rb b/test/authentication/test_key_manager.rb index ca6b683..af8422b 100644 --- a/test/authentication/test_key_manager.rb +++ b/test/authentication/test_key_manager.rb @@ -41,8 +41,8 @@ module Authentication assert_equal rsa.to_blob, identities.first.to_blob assert_equal dsa.to_blob, identities.last.to_blob - assert_equal({:from => :file, :file => "/first"}, manager.known_identities[rsa]) - assert_equal({:from => :file, :file => "/second"}, manager.known_identities[dsa]) + assert_equal({:from => :file, :file => "/first", :key => rsa}, manager.known_identities[rsa]) + assert_equal({:from => :file, :file => "/second", :key => dsa}, manager.known_identities[dsa]) end def test_identities_should_load_from_agent @@ -78,7 +78,8 @@ module Authentication def stub_file_key(name, key, also_private=false) manager.add(name) - File.expects(:readable?).returns(true) + File.expects(:readable?).with(name).returns(true) + File.expects(:readable?).with(name + ".pub").returns(false) Net::SSH::KeyFactory.expects(:load_private_key).with(name, nil).returns(key).at_least_once key.expects(:public_key).returns(key) end |
