aboutsummaryrefslogtreecommitdiffstats
path: root/g10/getkey.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>1998-11-10 12:59:59 +0000
committerWerner Koch <[email protected]>1998-11-10 12:59:59 +0000
commitb076ce302189d619d170089f70afdb72dd0bf967 (patch)
tree736281f795268c3f712ed29167e21bc9078fc698 /g10/getkey.c
parentready to release 0.4.3 (diff)
downloadgnupg-b076ce302189d619d170089f70afdb72dd0bf967.tar.gz
gnupg-b076ce302189d619d170089f70afdb72dd0bf967.zip
Some bug fixes of the last release
Diffstat (limited to '')
-rw-r--r--g10/getkey.c33
1 files changed, 25 insertions, 8 deletions
diff --git a/g10/getkey.c b/g10/getkey.c
index e322d60c6..dcc90a5be 100644
--- a/g10/getkey.c
+++ b/g10/getkey.c
@@ -160,7 +160,7 @@ cache_public_key( PKT_public_key *pk )
if( pk_cache_entries >= MAX_PK_CACHE_ENTRIES ) {
/* fixme: use another algorithm to free some cache slots */
pk_cache_disabled=1;
- log_info("too many entries in pk cache - disabled\n");
+ log_info(_("too many entries in pk cache - disabled\n"));
return;
}
pk_cache_entries++;
@@ -258,7 +258,7 @@ get_pubkey( PKT_public_key *pk, u32 *keyid )
;
else if( ++unk_cache_entries > MAX_UNK_CACHE_ENTRIES ) {
unk_cache_disabled = 1;
- log_info("too many entries in unk cache - disabled\n");
+ log_info(_("too many entries in unk cache - disabled\n"));
}
else {
keyid_list_t kl;
@@ -937,12 +937,29 @@ finish_lookup( KBNODE keyblock, PKT_public_key *pk, KBNODE k, byte *namehash,
/* if the usage is not correct, try to use a subkey */
KBNODE save_k = k;
- for( ; k; k = k->next ) {
- if( k->pkt->pkttype == PKT_PUBLIC_SUBKEY
- && !check_pubkey_algo2(
- k->pkt->pkt.public_key->pubkey_algo,
- pk->pubkey_usage ) )
- break;
+ k = NULL;
+ /* kludge for pgp 5: which doesn't accept type 20:
+ * try to use a type 16 subkey instead */
+ if( pk->pubkey_usage == PUBKEY_USAGE_ENC ) {
+ for( k = save_k; k; k = k->next ) {
+ if( k->pkt->pkttype == PKT_PUBLIC_SUBKEY
+ && k->pkt->pkt.public_key->pubkey_algo
+ == PUBKEY_ALGO_ELGAMAL_E
+ && !check_pubkey_algo2(
+ k->pkt->pkt.public_key->pubkey_algo,
+ pk->pubkey_usage ) )
+ break;
+ }
+ }
+
+ if( !k ) {
+ for(k = save_k ; k; k = k->next ) {
+ if( k->pkt->pkttype == PKT_PUBLIC_SUBKEY
+ && !check_pubkey_algo2(
+ k->pkt->pkt.public_key->pubkey_algo,
+ pk->pubkey_usage ) )
+ break;
+ }
}
if( !k )
k = save_k;