summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.rdoc2
-rw-r--r--lib/net/ssh/authentication/key_manager.rb17
-rw-r--r--test/authentication/test_key_manager.rb7
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