mirror of
git://git.gnupg.org/gnupg.git
synced 2024-11-11 21:48:50 +01:00
* certpath.c (find_up): New to use the authorithKeyIdentifier.
Use it in all other functions to locate the signing cert..
This commit is contained in:
parent
4e5bda7655
commit
73e738388c
@ -1,3 +1,8 @@
|
|||||||
|
2002-04-15 Werner Koch <wk@gnupg.org>
|
||||||
|
|
||||||
|
* certpath.c (find_up): New to use the authorithKeyIdentifier.
|
||||||
|
Use it in all other functions to locate the signing cert..
|
||||||
|
|
||||||
2002-04-11 Werner Koch <wk@gnupg.org>
|
2002-04-11 Werner Koch <wk@gnupg.org>
|
||||||
|
|
||||||
* certlist.c (cert_usable_p): New.
|
* certlist.c (cert_usable_p): New.
|
||||||
|
@ -195,6 +195,33 @@ check_cert_policy (KsbaCert cert)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
find_up (KEYDB_HANDLE kh, KsbaCert cert, const char *issuer)
|
||||||
|
{
|
||||||
|
KsbaName authid;
|
||||||
|
KsbaSexp authidno;
|
||||||
|
int rc = -1;
|
||||||
|
|
||||||
|
if (!ksba_cert_get_auth_key_id (cert, NULL, &authid, &authidno))
|
||||||
|
{
|
||||||
|
const char *s = ksba_name_enum (authid, 0);
|
||||||
|
if (s && *authidno)
|
||||||
|
{
|
||||||
|
rc = keydb_search_issuer_sn (kh, s, authidno);
|
||||||
|
if (rc)
|
||||||
|
keydb_search_reset (kh);
|
||||||
|
}
|
||||||
|
ksba_name_release (authid);
|
||||||
|
xfree (authidno);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rc)
|
||||||
|
rc = keydb_search_subject (kh, issuer);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Return the next certificate up in the chain starting at START.
|
/* Return the next certificate up in the chain starting at START.
|
||||||
Returns -1 when there are no more certificates. */
|
Returns -1 when there are no more certificates. */
|
||||||
int
|
int
|
||||||
@ -234,7 +261,7 @@ gpgsm_walk_cert_chain (KsbaCert start, KsbaCert *r_next)
|
|||||||
goto leave;
|
goto leave;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = keydb_search_subject (kh, issuer);
|
rc = find_up (kh, start, issuer);
|
||||||
if (rc)
|
if (rc)
|
||||||
{
|
{
|
||||||
/* it is quite common not to have a certificate, so better don't
|
/* it is quite common not to have a certificate, so better don't
|
||||||
@ -448,7 +475,7 @@ gpgsm_validate_path (KsbaCert cert)
|
|||||||
|
|
||||||
/* find the next cert up the tree */
|
/* find the next cert up the tree */
|
||||||
keydb_search_reset (kh);
|
keydb_search_reset (kh);
|
||||||
rc = keydb_search_subject (kh, issuer);
|
rc = find_up (kh, subject_cert, issuer);
|
||||||
if (rc)
|
if (rc)
|
||||||
{
|
{
|
||||||
if (rc == -1)
|
if (rc == -1)
|
||||||
@ -569,7 +596,7 @@ gpgsm_basic_cert_check (KsbaCert cert)
|
|||||||
{
|
{
|
||||||
/* find the next cert up the tree */
|
/* find the next cert up the tree */
|
||||||
keydb_search_reset (kh);
|
keydb_search_reset (kh);
|
||||||
rc = keydb_search_subject (kh, issuer);
|
rc = find_up (kh, cert, issuer);
|
||||||
if (rc)
|
if (rc)
|
||||||
{
|
{
|
||||||
if (rc == -1)
|
if (rc == -1)
|
||||||
|
@ -195,6 +195,33 @@ check_cert_policy (KsbaCert cert)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
find_up (KEYDB_HANDLE kh, KsbaCert cert, const char *issuer)
|
||||||
|
{
|
||||||
|
KsbaName authid;
|
||||||
|
KsbaSexp authidno;
|
||||||
|
int rc = -1;
|
||||||
|
|
||||||
|
if (!ksba_cert_get_auth_key_id (cert, NULL, &authid, &authidno))
|
||||||
|
{
|
||||||
|
const char *s = ksba_name_enum (authid, 0);
|
||||||
|
if (s && *authidno)
|
||||||
|
{
|
||||||
|
rc = keydb_search_issuer_sn (kh, s, authidno);
|
||||||
|
if (rc)
|
||||||
|
keydb_search_reset (kh);
|
||||||
|
}
|
||||||
|
ksba_name_release (authid);
|
||||||
|
xfree (authidno);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rc)
|
||||||
|
rc = keydb_search_subject (kh, issuer);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Return the next certificate up in the chain starting at START.
|
/* Return the next certificate up in the chain starting at START.
|
||||||
Returns -1 when there are no more certificates. */
|
Returns -1 when there are no more certificates. */
|
||||||
int
|
int
|
||||||
@ -234,7 +261,7 @@ gpgsm_walk_cert_chain (KsbaCert start, KsbaCert *r_next)
|
|||||||
goto leave;
|
goto leave;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = keydb_search_subject (kh, issuer);
|
rc = find_up (kh, start, issuer);
|
||||||
if (rc)
|
if (rc)
|
||||||
{
|
{
|
||||||
/* it is quite common not to have a certificate, so better don't
|
/* it is quite common not to have a certificate, so better don't
|
||||||
@ -448,7 +475,7 @@ gpgsm_validate_path (KsbaCert cert)
|
|||||||
|
|
||||||
/* find the next cert up the tree */
|
/* find the next cert up the tree */
|
||||||
keydb_search_reset (kh);
|
keydb_search_reset (kh);
|
||||||
rc = keydb_search_subject (kh, issuer);
|
rc = find_up (kh, subject_cert, issuer);
|
||||||
if (rc)
|
if (rc)
|
||||||
{
|
{
|
||||||
if (rc == -1)
|
if (rc == -1)
|
||||||
@ -569,7 +596,7 @@ gpgsm_basic_cert_check (KsbaCert cert)
|
|||||||
{
|
{
|
||||||
/* find the next cert up the tree */
|
/* find the next cert up the tree */
|
||||||
keydb_search_reset (kh);
|
keydb_search_reset (kh);
|
||||||
rc = keydb_search_subject (kh, issuer);
|
rc = find_up (kh, cert, issuer);
|
||||||
if (rc)
|
if (rc)
|
||||||
{
|
{
|
||||||
if (rc == -1)
|
if (rc == -1)
|
||||||
|
Loading…
Reference in New Issue
Block a user