agent: IMPORT_KEY with --force option fix.

* agent/cvt-openpgp.c (convert_from_openpgp_main): Add an option not
to check existing key.
(convert_from_openpgp): Ditto.
(convert_from_openpgp_native): Call convert_from_openpgp_main with
dontcare_exist=0.
* agent/command.c (cmd_import_key): Call with dontcare_exist=force.
This commit is contained in:
NIIBE Yutaka 2015-12-24 14:19:53 +09:00
parent 5ca57f1a69
commit 79b51bb872
3 changed files with 7 additions and 6 deletions

View File

@ -2151,7 +2151,7 @@ cmd_import_key (assuan_context_t ctx, char *line)
xfree (key); xfree (key);
key = NULL; 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, ctrl->server_local->keydesc, cache_nonce,
&key, opt_unattended? NULL : &passphrase); &key, opt_unattended? NULL : &passphrase);
if (err) if (err)

View File

@ -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 silently decrypt the key; CACHE_NONCE and R_PASSPHRASE must both be
NULL in this mode. */ NULL in this mode. */
static gpg_error_t 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, unsigned char *grip, const char *prompt,
const char *cache_nonce, const char *passphrase, const char *cache_nonce, const char *passphrase,
unsigned char **r_key, char **r_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) if (err)
goto leave; goto leave;
if (!from_native && !agent_key_available (grip)) if (!dontcare_exist && !from_native && !agent_key_available (grip))
{ {
err = gpg_error (GPG_ERR_EEXIST); err = gpg_error (GPG_ERR_EEXIST);
goto leave; 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 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. */ to by GRIP. On error NULL is stored at all return arguments. */
gpg_error_t 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, unsigned char *grip, const char *prompt,
const char *cache_nonce, const char *cache_nonce,
unsigned char **r_key, char **r_passphrase) 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, cache_nonce, NULL,
r_key, r_passphrase); r_key, r_passphrase);
} }
@ -1052,7 +1052,7 @@ convert_from_openpgp_native (ctrl_t ctrl,
if (!passphrase) if (!passphrase)
return gpg_error (GPG_ERR_INTERNAL); 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, NULL, passphrase,
r_key, NULL); r_key, NULL);

View File

@ -20,6 +20,7 @@
#define GNUPG_AGENT_CVT_OPENPGP_H #define GNUPG_AGENT_CVT_OPENPGP_H
gpg_error_t convert_from_openpgp (ctrl_t ctrl, gcry_sexp_t s_pgp, gpg_error_t convert_from_openpgp (ctrl_t ctrl, gcry_sexp_t s_pgp,
int dontcare_exist,
unsigned char *grip, const char *prompt, unsigned char *grip, const char *prompt,
const char *cache_nonce, const char *cache_nonce,
unsigned char **r_key, char **r_passphrase); unsigned char **r_key, char **r_passphrase);