diff --git a/agent/command.c b/agent/command.c index 446cf2433..718a5e6bb 100644 --- a/agent/command.c +++ b/agent/command.c @@ -2151,7 +2151,7 @@ cmd_import_key (assuan_context_t ctx, char *line) xfree (key); key = NULL; - err = convert_from_openpgp (ctrl, openpgp_sexp, grip, + err = convert_from_openpgp (ctrl, openpgp_sexp, force, grip, ctrl->server_local->keydesc, cache_nonce, &key, opt_unattended? NULL : &passphrase); if (err) diff --git a/agent/cvt-openpgp.c b/agent/cvt-openpgp.c index 0b9ecf083..8df6b8eb7 100644 --- a/agent/cvt-openpgp.c +++ b/agent/cvt-openpgp.c @@ -685,7 +685,7 @@ try_do_unprotect_cb (struct pin_entry_info_s *pi) silently decrypt the key; CACHE_NONCE and R_PASSPHRASE must both be NULL in this mode. */ static gpg_error_t -convert_from_openpgp_main (ctrl_t ctrl, gcry_sexp_t s_pgp, +convert_from_openpgp_main (ctrl_t ctrl, gcry_sexp_t s_pgp, int dontcare_exist, unsigned char *grip, const char *prompt, const char *cache_nonce, const char *passphrase, unsigned char **r_key, char **r_passphrase) @@ -894,7 +894,7 @@ convert_from_openpgp_main (ctrl_t ctrl, gcry_sexp_t s_pgp, if (err) goto leave; - if (!from_native && !agent_key_available (grip)) + if (!dontcare_exist && !from_native && !agent_key_available (grip)) { err = gpg_error (GPG_ERR_EEXIST); goto leave; @@ -1028,12 +1028,12 @@ convert_from_openpgp_main (ctrl_t ctrl, gcry_sexp_t s_pgp, the key. The keygrip will be stored at the 20 byte buffer pointed to by GRIP. On error NULL is stored at all return arguments. */ gpg_error_t -convert_from_openpgp (ctrl_t ctrl, gcry_sexp_t s_pgp, +convert_from_openpgp (ctrl_t ctrl, gcry_sexp_t s_pgp, int dontcare_exist, unsigned char *grip, const char *prompt, const char *cache_nonce, unsigned char **r_key, char **r_passphrase) { - return convert_from_openpgp_main (ctrl, s_pgp, grip, prompt, + return convert_from_openpgp_main (ctrl, s_pgp, dontcare_exist, grip, prompt, cache_nonce, NULL, r_key, r_passphrase); } @@ -1052,7 +1052,7 @@ convert_from_openpgp_native (ctrl_t ctrl, if (!passphrase) return gpg_error (GPG_ERR_INTERNAL); - err = convert_from_openpgp_main (ctrl, s_pgp, grip, NULL, + err = convert_from_openpgp_main (ctrl, s_pgp, 0, grip, NULL, NULL, passphrase, r_key, NULL); diff --git a/agent/cvt-openpgp.h b/agent/cvt-openpgp.h index d27a776ef..9a4fc3dbf 100644 --- a/agent/cvt-openpgp.h +++ b/agent/cvt-openpgp.h @@ -20,6 +20,7 @@ #define GNUPG_AGENT_CVT_OPENPGP_H gpg_error_t convert_from_openpgp (ctrl_t ctrl, gcry_sexp_t s_pgp, + int dontcare_exist, unsigned char *grip, const char *prompt, const char *cache_nonce, unsigned char **r_key, char **r_passphrase);