gpg: Do not return "Legacy Key" from lookup if a key is expired.
authorWerner Koch <wk@gnupg.org>
Wed, 29 Jul 2015 14:10:54 +0000 (16:10 +0200)
committerWerner Koch <wk@gnupg.org>
Wed, 29 Jul 2015 14:11:17 +0000 (16:11 +0200)
* g10/getkey.c (lookup): Map GPG_ERR_LEGACY_KEY.
--

If an expired key is directly followed by a legacy key in the keyring,
the lookup function incorrectly returned "legacy key" instead of
"unusable key".  We fix it by handling not found identical to a legacy
key if the last finish lookup failed.

Signed-off-by: Werner Koch <wk@gnupg.org>
g10/getkey.c

index 5f118ea..14b912a 100644 (file)
@@ -2633,7 +2633,8 @@ found:
       *ret_keyblock = ctx->keyblock; /* Return the keyblock.  */
       ctx->keyblock = NULL;
     }
-  else if (gpg_err_code (rc) == GPG_ERR_NOT_FOUND && no_suitable_key)
+  else if ((gpg_err_code (rc) == GPG_ERR_NOT_FOUND
+            || gpg_err_code (rc) == GPG_ERR_LEGACY_KEY) && no_suitable_key)
     rc = want_secret? GPG_ERR_UNUSABLE_SECKEY : GPG_ERR_UNUSABLE_PUBKEY;
   else if (gpg_err_code (rc) == GPG_ERR_NOT_FOUND)
     rc = want_secret? GPG_ERR_NO_SECKEY : GPG_ERR_NO_PUBKEY;