aboutsummaryrefslogtreecommitdiffstats
path: root/agent/command-ssh.c
diff options
context:
space:
mode:
authorJustus Winter <[email protected]>2017-06-26 12:54:39 +0000
committerJustus Winter <[email protected]>2017-06-26 12:56:54 +0000
commit273964798592cd479c111f47e8ce46d5b1999d6a (patch)
tree810f20caced4e5dbe795f348f4ea76d7a33ad112 /agent/command-ssh.c
parenttests: Improve test. (diff)
downloadgnupg-273964798592cd479c111f47e8ce46d5b1999d6a.tar.gz
gnupg-273964798592cd479c111f47e8ce46d5b1999d6a.zip
agent: Support unprotected ssh keys.
* agent/command-ssh.c (ssh_key_to_protected_buffer): If the empty passphrase is supplied, do not protect the key. GnuPG-bug-id: 2856 Signed-off-by: Justus Winter <[email protected]>
Diffstat (limited to '')
-rw-r--r--agent/command-ssh.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/agent/command-ssh.c b/agent/command-ssh.c
index e450aed30..c5897efba 100644
--- a/agent/command-ssh.c
+++ b/agent/command-ssh.c
@@ -2980,6 +2980,7 @@ ssh_key_extract_comment (gcry_sexp_t key, char **r_comment)
/* This function converts the key contained in the S-Expression KEY
into a buffer, which is protected by the passphrase PASSPHRASE.
+ If PASSPHRASE is the empty passphrase, the key is not protected.
Returns usual error code. */
static gpg_error_t
ssh_key_to_protected_buffer (gcry_sexp_t key, const char *passphrase,
@@ -3000,7 +3001,17 @@ ssh_key_to_protected_buffer (gcry_sexp_t key, const char *passphrase,
gcry_sexp_sprint (key, GCRYSEXP_FMT_CANON, buffer_new, buffer_new_n);
/* FIXME: guarantee? */
- err = agent_protect (buffer_new, passphrase, buffer, buffer_n, 0, -1);
+ if (*passphrase)
+ err = agent_protect (buffer_new, passphrase, buffer, buffer_n, 0, -1);
+ else
+ {
+ /* The key derivation function does not support zero length
+ * strings. Store key unprotected if the user wishes so. */
+ *buffer = buffer_new;
+ *buffer_n = buffer_new_n;
+ buffer_new = NULL;
+ err = 0;
+ }
out: