diff options
author | David Shaw <[email protected]> | 2004-04-26 01:20:03 +0000 |
---|---|---|
committer | David Shaw <[email protected]> | 2004-04-26 01:20:03 +0000 |
commit | 0c67c75cbe8b79c29b031b71c1f31a4d4b449018 (patch) | |
tree | 8d878c16c29d2005b86d2bffe032edbc748a4c24 /g10/getkey.c | |
parent | * getkey.c (key_byname): If namelist is NULL, return the first key in the (diff) | |
download | gnupg-0c67c75cbe8b79c29b031b71c1f31a4d4b449018.tar.gz gnupg-0c67c75cbe8b79c29b031b71c1f31a4d4b449018.zip |
* getkey.c (get_seckey_byname2): Significantly simplify this function by
using key_byname to do the heavy lifting. Note that this also fixes an
old problem when the first key on the secret keyring has an unusable stub
primary, but is still chosen.
Diffstat (limited to '')
-rw-r--r-- | g10/getkey.c | 45 |
1 files changed, 13 insertions, 32 deletions
diff --git a/g10/getkey.c b/g10/getkey.c index 0762a737d..b6c08a5f6 100644 --- a/g10/getkey.c +++ b/g10/getkey.c @@ -1055,44 +1055,25 @@ get_keyblock_byfprint( KBNODE *ret_keyblock, const byte *fprint, */ static int get_seckey_byname2( GETKEY_CTX *retctx, - PKT_secret_key *sk, const char *name, int unprotect, - KBNODE *retblock ) + PKT_secret_key *sk, const char *name, int unprotect, + KBNODE *retblock ) { - STRLIST namelist = NULL; - int rc; + STRLIST namelist = NULL; + int rc; - if( !name && opt.def_secret_key && *opt.def_secret_key ) { - add_to_strlist( &namelist, opt.def_secret_key ); - rc = key_byname( retctx, namelist, NULL, sk, 1, 1, retblock, NULL ); - } - else if( !name ) { /* use the first one as default key */ - struct getkey_ctx_s ctx; - KBNODE kb = NULL; + if( !name && opt.def_secret_key && *opt.def_secret_key ) + add_to_strlist( &namelist, opt.def_secret_key ); + else if(name) + add_to_strlist( &namelist, name ); - assert (!retctx ); /* do we need this at all */ - assert (!retblock); - memset( &ctx, 0, sizeof ctx ); - ctx.not_allocated = 1; - ctx.kr_handle = keydb_new (1); - ctx.nitems = 1; - ctx.items[0].mode = KEYDB_SEARCH_MODE_FIRST; - rc = lookup( &ctx, &kb, 1 ); - if (!rc && sk ) - sk_from_block ( &ctx, sk, kb ); - release_kbnode ( kb ); - get_seckey_end( &ctx ); - } - else { - add_to_strlist( &namelist, name ); - rc = key_byname( retctx, namelist, NULL, sk, 1, 1, retblock, NULL ); - } + rc = key_byname( retctx, namelist, NULL, sk, 1, 1, retblock, NULL ); - free_strlist( namelist ); + free_strlist( namelist ); - if( !rc && unprotect ) - rc = check_secret_key( sk, 0 ); + if( !rc && unprotect ) + rc = check_secret_key( sk, 0 ); - return rc; + return rc; } int |