diff options
| author | Werner Koch <[email protected]> | 2025-11-18 10:14:30 +0000 |
|---|---|---|
| committer | Werner Koch <[email protected]> | 2025-11-18 11:14:55 +0000 |
| commit | 4f19587b16b0bdd9e9c48e488f150d77e3c3ee52 (patch) | |
| tree | b8906f6c3bc862ebb61b0ff5bd11162ba65c4a56 | |
| parent | po: Update Japanese Translation. (diff) | |
| download | gnupg-4f19587b16b0bdd9e9c48e488f150d77e3c3ee52.tar.gz gnupg-4f19587b16b0bdd9e9c48e488f150d77e3c3ee52.zip | |
gpg: Cleanup of the local function key_byname.
* g10/keydb.h (GETKEY_WANT_SECRET): New.
(GETKEY_WITH_UNUSABLE): New.
* g10/getkey.c (key_byname): Repalce args want_secret and
include_unusable by an arg flags. Change the fucntion and all direc
callers to use these flags.
--
This will eventually allow us to add other flags.
| -rw-r--r-- | g10/getkey.c | 69 | ||||
| -rw-r--r-- | g10/keydb.h | 4 |
2 files changed, 43 insertions, 30 deletions
diff --git a/g10/getkey.c b/g10/getkey.c index efb157645..d9f35a935 100644 --- a/g10/getkey.c +++ b/g10/getkey.c @@ -788,12 +788,13 @@ leave: can use free_public_key, which calls release_public_key_parts(PK) and then xfree(PK)). - If WANT_SECRET is set, then only keys with an available secret key - (either locally or via key registered on a smartcard) are returned. + If the GETKEY_WANT_SECRET bit is set in FLAGS, then only keys with + an available secret key (either locally or via key registered on a + smartcard) are returned. - If INCLUDE_UNUSABLE is set, then unusable keys (see the - documentation for skip_unusable for an exact definition) are - skipped unless they are looked up by key id or by fingerprint. + If the GETKEY_WITH_UNUSABLE bit is set in FLAGS, then unusable keys + (see the documentation for skip_unusable for an exact definition) + are skipped unless they are looked up by key id or by fingerprint. If RET_KB is not NULL, the keyblock is returned in *RET_KB. This should be freed using release_kbnode(). @@ -809,17 +810,16 @@ leave: (if want_secret is set) is returned if the key is not found. */ static int key_byname (ctrl_t ctrl, GETKEY_CTX *retctx, strlist_t namelist, - PKT_public_key *pk, - int want_secret, int include_unusable, - KBNODE * ret_kb, KEYDB_HANDLE * ret_kdbhd) + PKT_public_key *pk, unsigned int flags, + kbnode_t *ret_kb, KEYDB_HANDLE *ret_kdbhd) { int rc = 0; int n; strlist_t r; strlist_t namelist_expanded = NULL; GETKEY_CTX ctx; - KBNODE help_kb = NULL; - KBNODE found_key = NULL; + kbnode_t help_kb = NULL; + kbnode_t found_key = NULL; if (retctx) { @@ -837,7 +837,7 @@ key_byname (ctrl_t ctrl, GETKEY_CTX *retctx, strlist_t namelist, ctx = xmalloc_clear (sizeof *ctx); ctx->nitems = 1; ctx->items[0].mode = KEYDB_SEARCH_MODE_FIRST; - if (!include_unusable) + if (!(flags & GETKEY_WITH_UNUSABLE)) { ctx->items[0].skipfnc = skip_unusable; ctx->items[0].skipfncvalue = ctrl; @@ -872,7 +872,7 @@ key_byname (ctrl_t ctrl, GETKEY_CTX *retctx, strlist_t namelist, rc = gpg_err_code (err); /* FIXME: remove gpg_err_code. */ goto leave; } - if (!include_unusable + if (!(flags & GETKEY_WITH_UNUSABLE) && ctx->items[n].mode != KEYDB_SEARCH_MODE_SHORT_KID && ctx->items[n].mode != KEYDB_SEARCH_MODE_LONG_KID && ctx->items[n].mode != KEYDB_SEARCH_MODE_FPR) @@ -883,7 +883,7 @@ key_byname (ctrl_t ctrl, GETKEY_CTX *retctx, strlist_t namelist, } } - ctx->want_secret = want_secret; + ctx->want_secret = !!(flags & GETKEY_WANT_SECRET); ctx->kr_handle = keydb_new (ctrl); if (!ctx->kr_handle) { @@ -908,7 +908,7 @@ key_byname (ctrl_t ctrl, GETKEY_CTX *retctx, strlist_t namelist, ctx->allow_adsk = 1; } - rc = lookup (ctrl, ctx, want_secret, ret_kb, &found_key); + rc = lookup (ctrl, ctx, ctx->want_secret, ret_kb, &found_key); if (!rc && pk) { pk_from_block (pk, *ret_kb, found_key); @@ -1126,8 +1126,9 @@ get_pubkey_byname (ctrl_t ctrl, enum get_pubkey_modes mode, * only try the local keyring). In this case, lookup NAME in * the local keyring. */ add_to_strlist (&namelist, name); - rc = key_byname (ctrl, retctx, namelist, pk, 0, - include_unusable, ret_keyblock, ret_kdbhd); + rc = key_byname (ctrl, retctx, namelist, pk, + include_unusable? GETKEY_WITH_UNUSABLE:0, + ret_keyblock, ret_kdbhd); } /* If the requested name resembles a valid mailbox and automatic @@ -1176,8 +1177,9 @@ get_pubkey_byname (ctrl_t ctrl, enum get_pubkey_modes mode, } add_to_strlist (&namelist, name); rc = key_byname (ctrl, anylocalfirst ? retctx : NULL, - namelist, pk, 0, - include_unusable, ret_keyblock, ret_kdbhd); + namelist, pk, + include_unusable ? GETKEY_WITH_UNUSABLE : 0, + ret_keyblock, ret_kdbhd); } break; @@ -1386,8 +1388,9 @@ get_pubkey_byname (ctrl_t ctrl, enum get_pubkey_modes mode, *retctx = NULL; } rc = key_byname (ctrl, anylocalfirst ? retctx : NULL, - namelist, pk, 0, - include_unusable, ret_keyblock, ret_kdbhd); + namelist, pk, + include_unusable ? GETKEY_WITH_UNUSABLE : 0, + ret_keyblock, ret_kdbhd); } if (!rc) { @@ -2258,16 +2261,16 @@ get_seckey_default (ctrl_t ctrl, PKT_public_key *pk) { gpg_error_t err; strlist_t namelist = NULL; - int include_unusable = 1; + unsigned int flags = GETKEY_WANT_SECRET | GETKEY_WITH_UNUSABLE; const char *def_secret_key = parse_def_secret_key (ctrl); if (def_secret_key) add_to_strlist (&namelist, def_secret_key); else - include_unusable = 0; + flags &= ~GETKEY_WITH_UNUSABLE; - err = key_byname (ctrl, NULL, namelist, pk, 1, include_unusable, NULL, NULL); + err = key_byname (ctrl, NULL, namelist, pk, flags, NULL, NULL); free_strlist (namelist); @@ -2315,7 +2318,9 @@ gpg_error_t getkey_bynames (ctrl_t ctrl, getkey_ctx_t *retctx, PKT_public_key *pk, strlist_t names, int want_secret, kbnode_t *ret_keyblock) { - return key_byname (ctrl, retctx, names, pk, want_secret, 1, + return key_byname (ctrl, retctx, names, pk, + ((want_secret ? GETKEY_WANT_SECRET : 0) + | GETKEY_WITH_UNUSABLE), ret_keyblock, NULL); } @@ -2366,8 +2371,11 @@ getkey_byname (ctrl_t ctrl, getkey_ctx_t *retctx, PKT_public_key *pk, { gpg_error_t err; strlist_t namelist = NULL; - int with_unusable = 1; const char *def_secret_key = NULL; + unsigned int flags = GETKEY_WITH_UNUSABLE; + + if (want_secret) + flags |= GETKEY_WANT_SECRET; if (want_secret && !name) def_secret_key = parse_def_secret_key (ctrl); @@ -2377,10 +2385,9 @@ getkey_byname (ctrl_t ctrl, getkey_ctx_t *retctx, PKT_public_key *pk, else if (name) add_to_strlist (&namelist, name); else - with_unusable = 0; + flags &= ~GETKEY_WITH_UNUSABLE; - err = key_byname (ctrl, retctx, namelist, pk, want_secret, with_unusable, - ret_keyblock, NULL); + err = key_byname (ctrl, retctx, namelist, pk, flags, ret_keyblock, NULL); /* FIXME: Check that we really return GPG_ERR_NO_SECKEY if WANT_SECRET has been used. */ @@ -4275,13 +4282,15 @@ get_seckey_default_or_card (ctrl_t ctrl, PKT_public_key *pk, if (!fpr_card || (def_secret_key && *def_secret_key && def_secret_key[strlen (def_secret_key)-1] == '!')) { - err = key_byname (ctrl, NULL, namelist, pk, 1, 0, NULL, NULL); + err = key_byname (ctrl, NULL, namelist, pk, GETKEY_WANT_SECRET, + NULL, NULL); } else { /* Default key is specified and card key is also available. */ kbnode_t k, keyblock = NULL; - err = key_byname (ctrl, NULL, namelist, pk, 1, 0, &keyblock, NULL); + err = key_byname (ctrl, NULL, namelist, pk, GETKEY_WANT_SECRET, + &keyblock, NULL); if (err) goto leave; for (k = keyblock; k; k = k->next) diff --git a/g10/keydb.h b/g10/keydb.h index 255110cc7..526620ce4 100644 --- a/g10/keydb.h +++ b/g10/keydb.h @@ -384,6 +384,10 @@ enum get_pubkey_modes GET_PUBKEY_TRY_LDAP = 3 }; +/* Other flags for functions in getkey.c */ +#define GETKEY_WANT_SECRET 1 /* Only return keys having a secret key. */ +#define GETKEY_WITH_UNUSABLE 2 /* Include unusable keys. */ + /* Find a public key identified by NAME. */ int get_pubkey_byname (ctrl_t ctrl, enum get_pubkey_modes mode, GETKEY_CTX *retctx, PKT_public_key *pk, |
