aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--g10/ChangeLog8
-rw-r--r--g10/getkey.c3
-rw-r--r--g10/sig-check.c24
3 files changed, 26 insertions, 9 deletions
diff --git a/g10/ChangeLog b/g10/ChangeLog
index dde257b4d..91a8e2438 100644
--- a/g10/ChangeLog
+++ b/g10/ChangeLog
@@ -1,3 +1,11 @@
+2002-08-23 David Shaw <[email protected]>
+
+ * sig-check.c (do_check, do_check_messages): Emit the usual sig
+ warnings even for cached sigs. This also serves to protect
+ against missing a sig expiring while cached.
+
+ * getkey.c (merge_selfsigs_main): Don't check UID self-sigs twice.
+
2002-08-22 David Shaw <[email protected]>
* import.c (clean_subkeys, chk_self_sigs): Merge clean_subkeys
diff --git a/g10/getkey.c b/g10/getkey.c
index 43db3abcb..c62a99709 100644
--- a/g10/getkey.c
+++ b/g10/getkey.c
@@ -1241,7 +1241,7 @@ merge_selfsigs_main( KBNODE keyblock, int *r_revoked )
signode = NULL;
sigdate = 0; /* helper to find the latest signature */
- for(k=keyblock; k && k->pkt->pkttype != PKT_PUBLIC_SUBKEY; k = k->next ) {
+ for(k=keyblock; k && k->pkt->pkttype != PKT_USER_ID; k = k->next ) {
if ( k->pkt->pkttype == PKT_SIGNATURE ) {
PKT_signature *sig = k->pkt->pkt.signature;
if ( sig->keyid[0] == kid[0] && sig->keyid[1]==kid[1] ) {
@@ -1534,6 +1534,7 @@ merge_selfsigs_main( KBNODE keyblock, int *r_revoked )
pk->has_expired = key_expire >= curtime? 0 : key_expire;
pk->expiredate = key_expire;
+
/* Fixme: we should see how to get rid of the expiretime fields but
* this needs changes at other places too. */
diff --git a/g10/sig-check.c b/g10/sig-check.c
index 8dce3cbe9..29a035203 100644
--- a/g10/sig-check.c
+++ b/g10/sig-check.c
@@ -205,14 +205,9 @@ cmp_help( void *opaque, MPI result )
#endif
}
-
static int
-do_check( PKT_public_key *pk, PKT_signature *sig, MD_HANDLE digest,
- int *r_expired )
+do_check_messages( PKT_public_key *pk, PKT_signature *sig, int *r_expired )
{
- MPI result = NULL;
- int rc=0;
- struct cmp_help_context_s ctx;
u32 cur_time;
*r_expired = 0;
@@ -259,7 +254,20 @@ do_check( PKT_public_key *pk, PKT_signature *sig, MD_HANDLE digest,
*r_expired = 1;
}
+ return 0;
+}
+
+static int
+do_check( PKT_public_key *pk, PKT_signature *sig, MD_HANDLE digest,
+ int *r_expired )
+{
+ MPI result = NULL;
+ int rc=0;
+ struct cmp_help_context_s ctx;
+
+ if( (rc=do_check_messages(pk,sig,r_expired)) )
+ return rc;
if( (rc=check_digest_algo(sig->digest_algo)) )
return rc;
if( (rc=check_pubkey_algo(sig->pubkey_algo)) )
@@ -436,6 +444,8 @@ check_key_signature2( KBNODE root, KBNODE node, int *is_selfsig,
if( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1] )
*is_selfsig = 1;
}
+ if((rc=do_check_messages(pk,sig,r_expired)))
+ return rc;
return sig->flags.valid? 0 : G10ERR_BAD_SIGN;
}
}
@@ -532,5 +542,3 @@ check_key_signature2( KBNODE root, KBNODE node, int *is_selfsig,
return rc;
}
-
-