diff options
Diffstat (limited to 'gmime/gmime-gpgme-utils.c')
-rw-r--r-- | gmime/gmime-gpgme-utils.c | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/gmime/gmime-gpgme-utils.c b/gmime/gmime-gpgme-utils.c index b86a1011..041dd020 100644 --- a/gmime/gmime-gpgme-utils.c +++ b/gmime/gmime-gpgme-utils.c @@ -129,18 +129,25 @@ g_mime_gpgme_get_key_by_name (gpgme_ctx_t ctx, const char *name, gboolean secret if (KEY_IS_OK (key)) { subkey = key->subkeys; - while (subkey && ((secret && !subkey->can_sign) || (!secret && !subkey->can_encrypt))) - subkey = subkey->next; - - if (subkey) { - if (KEY_IS_OK (subkey) && (subkey->expires == 0 || subkey->expires > now)) - break; + while (subkey) { + if ((secret && subkey->can_sign) || (!secret && subkey->can_encrypt)) { + if (KEY_IS_OK (subkey) && (subkey->expires == 0 || subkey->expires > now)) { + errval = GPG_ERR_NO_ERROR; + break; + } + + if (subkey->expired) + errval = GPG_ERR_KEY_EXPIRED; + } - if (subkey->expired) - errval = GPG_ERR_KEY_EXPIRED; - else - errval = GPG_ERR_BAD_KEY; + subkey = subkey->next; } + + if (subkey) + break; + + if (errval == GPG_ERR_NO_ERROR) + errval = GPG_ERR_BAD_KEY; } else { if (key->expired) errval = GPG_ERR_KEY_EXPIRED; |