diff options
author | Anders Carling <lowe@lowe.nu> | 2019-10-31 00:48:23 +0100 |
---|---|---|
committer | Anders Carling <lowe@lowe.nu> | 2019-10-31 00:48:23 +0100 |
commit | 5d74905694504ef49a5101ca546c313dda83aa6a (patch) | |
tree | c1ba33c0ee5955987842ca3db89725f4a5894656 | |
parent | 9ffd01bd8590e2950dfef4576c919564ec969331 (diff) | |
download | net-ssh-5d74905694504ef49a5101ca546c313dda83aa6a.tar.gz |
Fix signing with private key file existing both on disk and in agent, without corresponding public key on disk
-rw-r--r-- | lib/net/ssh/authentication/key_manager.rb | 9 | ||||
-rw-r--r-- | test/authentication/test_key_manager.rb | 16 |
2 files changed, 10 insertions, 15 deletions
diff --git a/lib/net/ssh/authentication/key_manager.rb b/lib/net/ssh/authentication/key_manager.rb index 3acb35a..fec15c0 100644 --- a/lib/net/ssh/authentication/key_manager.rb +++ b/lib/net/ssh/authentication/key_manager.rb @@ -118,7 +118,7 @@ module Net user_identities.delete(corresponding_user_identity) if corresponding_user_identity if !options[:keys_only] || corresponding_user_identity - known_identities[key] = { from: :agent } + known_identities[key] = { from: :agent, identity: key } yield key end end @@ -178,12 +178,7 @@ module Net if info[:from] == :agent raise KeyManagerError, "the agent is no longer available" unless agent - agent_identity = if agent.identities.include?(identity) - identity - else - identity.key - end - return agent.sign(agent_identity, data.to_s) + return agent.sign(info[:identity], data.to_s) end raise KeyManagerError, "[BUG] can't determine identity origin (#{info.inspect})" diff --git a/test/authentication/test_key_manager.rb b/test/authentication/test_key_manager.rb index f9299a9..4be78ed 100644 --- a/test/authentication/test_key_manager.rb +++ b/test/authentication/test_key_manager.rb @@ -88,8 +88,8 @@ module Authentication assert_equal rsa.to_blob, identities.first.to_blob assert_equal dsa.to_blob, identities.last.to_blob - assert_equal({ from: :agent }, manager.known_identities[rsa]) - assert_equal({ from: :agent }, manager.known_identities[dsa]) + assert_equal({ from: :agent, identity: rsa }, manager.known_identities[rsa]) + assert_equal({ from: :agent, identity: dsa }, manager.known_identities[dsa]) end def test_identities_with_ecdsa_should_load_from_agent @@ -105,11 +105,11 @@ module Authentication assert_equal ecdsa_sha2_nistp384.to_blob, identities[3].to_blob assert_equal ecdsa_sha2_nistp521.to_blob, identities[4].to_blob - assert_equal({ from: :agent }, manager.known_identities[rsa]) - assert_equal({ from: :agent }, manager.known_identities[dsa]) - assert_equal({ from: :agent }, manager.known_identities[ecdsa_sha2_nistp256]) - assert_equal({ from: :agent }, manager.known_identities[ecdsa_sha2_nistp384]) - assert_equal({ from: :agent }, manager.known_identities[ecdsa_sha2_nistp521]) + assert_equal({ from: :agent, identity: rsa }, manager.known_identities[rsa]) + assert_equal({ from: :agent, identity: dsa }, manager.known_identities[dsa]) + assert_equal({ from: :agent, identity: ecdsa_sha2_nistp256 }, manager.known_identities[ecdsa_sha2_nistp256]) + assert_equal({ from: :agent, identity: ecdsa_sha2_nistp384 }, manager.known_identities[ecdsa_sha2_nistp384]) + assert_equal({ from: :agent, identity: ecdsa_sha2_nistp521 }, manager.known_identities[ecdsa_sha2_nistp521]) end def test_only_identities_with_key_files_should_load_from_agent_of_keys_only_set @@ -124,7 +124,7 @@ module Authentication assert_equal 1, identities.length assert_equal rsa.to_blob, identities.first.to_blob - assert_equal({ from: :agent }, manager.known_identities[rsa]) + assert_equal({ from: :agent, identity: rsa }, manager.known_identities[rsa]) assert manager.use_agent? end |