summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnders Carling <lowe@lowe.nu>2019-10-31 00:48:23 +0100
committerAnders Carling <lowe@lowe.nu>2019-10-31 00:48:23 +0100
commit5d74905694504ef49a5101ca546c313dda83aa6a (patch)
treec1ba33c0ee5955987842ca3db89725f4a5894656
parent9ffd01bd8590e2950dfef4576c919564ec969331 (diff)
downloadnet-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.rb9
-rw-r--r--test/authentication/test_key_manager.rb16
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