diff options
author | Werner Koch <[email protected]> | 1998-09-28 19:25:31 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 1998-09-28 19:25:31 +0000 |
commit | 41fa8a3345aecf9b85c1eebb33f9b961a558db1c (patch) | |
tree | 4f5745dc77207f40dabd7f9a176b7255e8994223 /g10/getkey.c | |
parent | . (diff) | |
download | gnupg-41fa8a3345aecf9b85c1eebb33f9b961a558db1c.tar.gz gnupg-41fa8a3345aecf9b85c1eebb33f9b961a558db1c.zip |
*** empty log message ***
Diffstat (limited to 'g10/getkey.c')
-rw-r--r-- | g10/getkey.c | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/g10/getkey.c b/g10/getkey.c index f9f4c9f43..eed62e916 100644 --- a/g10/getkey.c +++ b/g10/getkey.c @@ -31,6 +31,7 @@ #include "keydb.h" #include "options.h" #include "main.h" +#include "i18n.h" #define MAX_PK_CACHE_ENTRIES 500 @@ -789,9 +790,6 @@ lookup( PKT_public_key *pk, int mode, u32 *keyid, } } else { /* keyid or fingerprint lookup */ - /* No need to compare the usage here, as we already have the - * keyid to use - */ if( DBG_CACHE && (mode== 10 || mode==11) ) { log_debug("lookup keyid=%08lx%08lx req_algo=%d mode=%d\n", (ulong)keyid[0], (ulong)keyid[1], @@ -867,6 +865,29 @@ lookup( PKT_public_key *pk, int mode, u32 *keyid, merge_one_pk_and_selfsig( keyblock, keyblock ); } else { + if( primary && pk->pubkey_usage + && check_pubkey_algo2( k->pkt->pkt.public_key->pubkey_algo, + pk->pubkey_usage ) == G10ERR_WR_PUBKEY_ALGO ) { + /* 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; + } + if( !k ) + k = save_k; + else + log_info(_("using secondary key %08lX " + "instead of primary key %08lX\n"), + (ulong)keyid_from_pk( k->pkt->pkt.public_key, NULL), + (ulong)keyid_from_pk( save_k->pkt->pkt.public_key, NULL) + ); + } + copy_public_key_new_namehash( pk, k->pkt->pkt.public_key, use_namehash? namehash:NULL); merge_one_pk_and_selfsig( keyblock, k ); |