aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2025-11-18 10:14:30 +0000
committerWerner Koch <[email protected]>2025-11-18 11:14:55 +0000
commit4f19587b16b0bdd9e9c48e488f150d77e3c3ee52 (patch)
treeb8906f6c3bc862ebb61b0ff5bd11162ba65c4a56
parentpo: Update Japanese Translation. (diff)
downloadgnupg-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.c69
-rw-r--r--g10/keydb.h4
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,