1
0
Fork 0
mirror of git://git.gnupg.org/gnupg.git synced 2025-07-02 22:46:30 +02:00

* keydb.h, keyring.c (keyring_search), trustdb.c (search_skipfnc): Expand

the skipfnc to include a pointer to the user ID that matched.

* getkey.c (skip_disabled): Rename to skip_unusable, and add checks for
expired or revoked user IDs.
This commit is contained in:
David Shaw 2003-09-23 23:14:03 +00:00
parent b224756fbe
commit 4ccd51cb50
5 changed files with 49 additions and 20 deletions

View file

@ -726,24 +726,44 @@ classify_user_id( const char *name, KEYDB_SEARCH_DESC *desc )
static int
skip_disabled(void *dummy,u32 *keyid)
skip_unusable(void *dummy,u32 *keyid,PKT_user_id *uid)
{
int rc,disabled=0;
PKT_public_key *pk=m_alloc_clear(sizeof(PKT_public_key));
int unusable=0;
KBNODE keyblock;
rc = get_pubkey(pk, keyid);
if(rc)
keyblock=get_pubkeyblock(keyid);
if(!keyblock)
{
log_error("error checking disabled status of %08lX: %s\n",
(ulong)keyid[1],g10_errstr(rc));
log_error("error checking usability status of %08lX\n",(ulong)keyid[1]);
goto leave;
}
disabled=pk_is_disabled(pk);
/* Is the user ID in question revoked/expired? */
if(uid)
{
KBNODE node;
for(node=keyblock;node;node=node->next)
{
if(node->pkt->pkttype==PKT_USER_ID)
{
if(cmp_user_ids(uid,node->pkt->pkt.user_id)==0
&& (node->pkt->pkt.user_id->is_revoked
|| node->pkt->pkt.user_id->is_expired))
{
unusable=1;
break;
}
}
}
}
if(!unusable)
unusable=pk_is_disabled(keyblock->pkt->pkt.public_key);
leave:
free_public_key(pk);
return disabled;
release_kbnode(keyblock);
return unusable;
}
/****************
@ -758,7 +778,7 @@ skip_disabled(void *dummy,u32 *keyid)
static int
key_byname( GETKEY_CTX *retctx, STRLIST namelist,
PKT_public_key *pk, PKT_secret_key *sk,
int secmode, int include_disabled,
int secmode, int include_unusable,
KBNODE *ret_kb, KEYDB_HANDLE *ret_kdbhd )
{
int rc = 0;
@ -790,13 +810,13 @@ key_byname( GETKEY_CTX *retctx, STRLIST namelist,
m_free (ctx);
return G10ERR_INV_USER_ID;
}
if(!include_disabled
if(!include_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_FPR16
&& ctx->items[n].mode!=KEYDB_SEARCH_MODE_FPR20
&& ctx->items[n].mode!=KEYDB_SEARCH_MODE_FPR)
ctx->items[n].skipfnc=skip_disabled;
ctx->items[n].skipfnc=skip_unusable;
}
ctx->kr_handle = keydb_new (secmode);
@ -847,14 +867,14 @@ key_byname( GETKEY_CTX *retctx, STRLIST namelist,
int
get_pubkey_byname (PKT_public_key *pk,
const char *name, KBNODE *ret_keyblock,
KEYDB_HANDLE *ret_kdbhd, int include_disabled )
KEYDB_HANDLE *ret_kdbhd, int include_unusable )
{
int rc;
STRLIST namelist = NULL;
add_to_strlist( &namelist, name );
rc = key_byname( NULL, namelist, pk, NULL, 0,
include_disabled, ret_keyblock, ret_kdbhd);
include_unusable, ret_keyblock, ret_kdbhd);
free_strlist( namelist );
return rc;
}