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 + + * 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 * 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; } - -