aboutsummaryrefslogtreecommitdiffstats
path: root/gpgme/keylist.c
diff options
context:
space:
mode:
Diffstat (limited to 'gpgme/keylist.c')
-rw-r--r--gpgme/keylist.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/gpgme/keylist.c b/gpgme/keylist.c
index 6bd6833f..c47f3865 100644
--- a/gpgme/keylist.c
+++ b/gpgme/keylist.c
@@ -832,6 +832,7 @@ gpgme_get_key (gpgme_ctx_t ctx, const char *fpr, gpgme_key_t *r_key,
{
gpgme_ctx_t listctx;
gpgme_error_t err;
+ gpgme_key_t key;
if (!ctx || !r_key)
return gpg_error (GPG_ERR_INV_VALUE);
@@ -849,6 +850,21 @@ gpgme_get_key (gpgme_ctx_t ctx, const char *fpr, gpgme_key_t *r_key,
err = gpgme_op_keylist_start (listctx, fpr, secret);
if (!err)
err = gpgme_op_keylist_next (listctx, r_key);
+ if (!err)
+ {
+ err = gpgme_op_keylist_next (listctx, &key);
+ if (gpgme_err_code (err) == GPG_ERR_EOF)
+ err = gpg_error (GPG_ERR_NO_ERROR);
+ else
+ {
+ if (!err)
+ {
+ gpgme_key_unref (key);
+ err = gpg_error (GPG_ERR_AMBIGUOUS_NAME);
+ }
+ gpgme_key_unref (*r_key);
+ }
+ }
gpgme_release (listctx);
return err;
}