diff --git a/g10/ChangeLog b/g10/ChangeLog index f1c56382f..31310f90f 100644 --- a/g10/ChangeLog +++ b/g10/ChangeLog @@ -1,3 +1,22 @@ +2003-01-10 David Shaw + + * armor.c (armor_filter): Comment about PGP's end of line tab + problem. + + * trustdb.h, trustdb.c (trust_letter): Make + static. (get_ownertrust_info, get_validity_info): Don't mask the + trust level twice. + + * trustdb.h, gpgv.c, trustdb.c (get_validity, get_validity_info), + keylist.c (list_keyblock_colon), keyedit.c + (show_key_with_all_names_colon, menu_revuid): Pass a user ID in + rather than a namehash, so we only have to do the hashing in one + place. + + * packet.h, pkclist.c (build_pk_list), free-packet.c + (release_public_key_parts): Remove unused namehash element for + public keys. + 2003-01-07 David Shaw * keygen.c (keygen_set_std_prefs): Warn when setting an IDEA diff --git a/g10/armor.c b/g10/armor.c index 9c7858fe6..70d4d5aac 100644 --- a/g10/armor.c +++ b/g10/armor.c @@ -1,5 +1,6 @@ /* armor.c - Armor flter - * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 + * Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -871,6 +872,9 @@ armor_filter( void *opaque, int control, hashes &= 1|2|4|8; if( !hashes ) { hashes |= 4; /* default to MD 5 */ + /* This is non-ideal since PGP 5-8 have the same + end-of-line bugs as PGP 2. However, we only + enable pgp2mode if there is no Hash: header. */ if( opt.pgp2_workarounds ) afx->pgp2mode = 1; } diff --git a/g10/free-packet.c b/g10/free-packet.c index e760999be..7cd05497b 100644 --- a/g10/free-packet.c +++ b/g10/free-packet.c @@ -1,5 +1,6 @@ /* free-packet.c - cleanup stuff for packets - * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 + * Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -68,7 +69,6 @@ free_seckey_enc( PKT_signature *sig ) } - void release_public_key_parts( PKT_public_key *pk ) { @@ -84,10 +84,6 @@ release_public_key_parts( PKT_public_key *pk ) m_free (pk->prefs); pk->prefs = NULL; } - if( pk->namehash ) { - m_free(pk->namehash); - pk->namehash = NULL; - } if (pk->user_id) { free_user_id (pk->user_id); pk->user_id = NULL; diff --git a/g10/gpgv.c b/g10/gpgv.c index 389cb40f8..8e22d50e3 100644 --- a/g10/gpgv.c +++ b/g10/gpgv.c @@ -239,7 +239,7 @@ is_disabled(void *dummy,u32 *keyid) } int -get_validity_info (PKT_public_key *pk, const byte *namehash ) +get_validity_info (PKT_public_key *pk, PKT_user_id *uid) { return '?'; } diff --git a/g10/keyedit.c b/g10/keyedit.c index 02031fe1b..12d6f7c2b 100644 --- a/g10/keyedit.c +++ b/g10/keyedit.c @@ -1,5 +1,6 @@ /* keyedit.c - keyedit stuff - * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 + * Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -1816,18 +1817,10 @@ show_key_with_all_names_colon (KBNODE keyblock) printf("::::::::"); else { - byte namehash[20]; int uid_validity; if( primary && !ulti_hack ) - { - if( uid->attrib_data ) - rmd160_hash_buffer(namehash, - uid->attrib_data, uid->attrib_len); - else - rmd160_hash_buffer( namehash, uid->name, uid->len ); - uid_validity = get_validity_info( primary, namehash ); - } + uid_validity = get_validity_info( primary, uid ); else uid_validity = 'u'; printf("%c::::::::",uid_validity); @@ -3407,8 +3400,6 @@ menu_revuid( KBNODE pub_keyblock, KBNODE sec_keyblock ) } else { - byte namehash[20]; - pkt = m_alloc_clear( sizeof *pkt ); pkt->pkttype = PKT_SIGNATURE; pkt->pkt.signature = sig; @@ -3418,13 +3409,7 @@ menu_revuid( KBNODE pub_keyblock, KBNODE sec_keyblock ) { /* If the trustdb has an entry for this key+uid then the trustdb needs an update. */ - if( uid->attrib_data ) - rmd160_hash_buffer(namehash, - uid->attrib_data, uid->attrib_len); - else - rmd160_hash_buffer( namehash, uid->name, uid->len ); - - if((get_validity(pk,namehash)&TRUST_MASK)>=TRUST_UNDEFINED) + if((get_validity(pk,uid)&TRUST_MASK)>=TRUST_UNDEFINED) update_trust=1; } diff --git a/g10/keylist.c b/g10/keylist.c index 9dd55a1a4..0c8277a02 100644 --- a/g10/keylist.c +++ b/g10/keylist.c @@ -1,5 +1,6 @@ /* keylist.c - * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 + * Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -766,20 +767,11 @@ list_keyblock_colon( KBNODE keyblock, int secret, int fpr ) printf("%s:::::::::",str); } else { - byte namehash[20]; int uid_validity; - if( pk && !ulti_hack ) { - if( node->pkt->pkt.user_id->attrib_data ) - rmd160_hash_buffer( namehash, - node->pkt->pkt.user_id->attrib_data, - node->pkt->pkt.user_id->attrib_len); - else - rmd160_hash_buffer( namehash, - node->pkt->pkt.user_id->name, - node->pkt->pkt.user_id->len ); - uid_validity = get_validity_info( pk, namehash ); - } + if( pk && !ulti_hack ) + uid_validity=get_validity_info (pk, + node->pkt->pkt.user_id); else uid_validity = 'u'; printf("%s:%c::::::::",str,uid_validity); diff --git a/g10/packet.h b/g10/packet.h index 05e7c261a..d7a795a77 100644 --- a/g10/packet.h +++ b/g10/packet.h @@ -1,5 +1,6 @@ /* packet.h - packet definitions - * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 + * Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -210,7 +211,6 @@ typedef struct { byte is_primary; prefitem_t *prefs; /* list of preferences (may be NULL) */ int mdc_feature; /* mdc feature set */ - byte *namehash; /* if != NULL: found by this name */ PKT_user_id *user_id; /* if != NULL: found by that uid */ struct revocation_key *revkey; int numrevkeys; diff --git a/g10/pkclist.c b/g10/pkclist.c index f5c596027..e2c4209c0 100644 --- a/g10/pkclist.c +++ b/g10/pkclist.c @@ -1,5 +1,6 @@ /* pkclist.c - * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 + * Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -1027,7 +1028,7 @@ build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned use ) else if( !(rc=check_pubkey_algo2(pk->pubkey_algo, use )) ) { int trustlevel; - trustlevel = get_validity (pk, pk->namehash); + trustlevel = get_validity (pk, NULL); if( (trustlevel & TRUST_FLAG_DISABLED) ) { free_public_key(pk); pk = NULL; log_info(_("%s: skipped: public key is disabled\n"), diff --git a/g10/trustdb.c b/g10/trustdb.c index ed4a9379a..16f8f7cb0 100644 --- a/g10/trustdb.c +++ b/g10/trustdb.c @@ -1,5 +1,6 @@ /* trustdb.c - * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 + * Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -439,7 +440,7 @@ init_trustdb() * This function returns a letter for a trustvalue Trust flags * are ignore. */ -int +static int trust_letter (unsigned int value) { switch( (value & TRUST_MASK) ) @@ -649,7 +650,7 @@ get_ownertrust_info (PKT_public_key *pk) otrust=otrust_min; } - c = trust_letter( (otrust & TRUST_MASK) ); + c = trust_letter( otrust ); if( !c ) c = '?'; return c; @@ -803,7 +804,7 @@ update_validity (PKT_public_key *pk, PKT_user_id *uid, ulong recno; byte namehash[20]; - if( uid->attrib_data ) + if(uid->attrib_data) rmd160_hash_buffer (namehash,uid->attrib_data,uid->attrib_len); else rmd160_hash_buffer (namehash, uid->name, uid->len ); @@ -943,7 +944,7 @@ is_disabled(void *dummy,u32 *keyid) * otherwise, a reasonable value for the entire key is returned. */ unsigned int -get_validity (PKT_public_key *pk, const byte *namehash) +get_validity (PKT_public_key *pk, PKT_user_id *uid) { static int did_nextcheck; TRUSTREC trec, vrec; @@ -952,7 +953,16 @@ get_validity (PKT_public_key *pk, const byte *namehash) unsigned int validity; u32 kid[2]; PKT_public_key *main_pk; + byte namehash[20]; + if(uid) + { + if(uid->attrib_data) + rmd160_hash_buffer (namehash,uid->attrib_data,uid->attrib_len); + else + rmd160_hash_buffer (namehash, uid->name, uid->len ); + } + init_trustdb (); if (!did_nextcheck) { @@ -1011,7 +1021,7 @@ get_validity (PKT_public_key *pk, const byte *namehash) read_record (recno, &vrec, RECTYPE_VALID); if ( validity < (vrec.r.valid.validity & TRUST_MASK) ) validity = (vrec.r.valid.validity & TRUST_MASK); - if ( namehash && !memcmp (vrec.r.valid.namehash, namehash, 20) ) + if ( uid && !memcmp (vrec.r.valid.namehash, namehash, 20) ) break; recno = vrec.r.valid.next; } @@ -1042,15 +1052,15 @@ get_validity (PKT_public_key *pk, const byte *namehash) } int -get_validity_info (PKT_public_key *pk, const byte *namehash) +get_validity_info (PKT_public_key *pk, PKT_user_id *uid) { int trustlevel; int c; - trustlevel = get_validity (pk, namehash); + trustlevel = get_validity (pk, uid); if( trustlevel & TRUST_FLAG_REVOKED ) return 'r'; - c = trust_letter ( (trustlevel & TRUST_MASK) ); + c = trust_letter ( trustlevel ); if( !c ) c = '?'; return c; @@ -1066,7 +1076,7 @@ get_validity_counts (PKT_public_key *pk, PKT_user_id *uid) if(pk==NULL || uid==NULL) BUG(); - if( uid->attrib_data ) + if(uid->attrib_data) rmd160_hash_buffer (namehash,uid->attrib_data,uid->attrib_len); else rmd160_hash_buffer (namehash, uid->name, uid->len ); diff --git a/g10/trustdb.h b/g10/trustdb.h index 3ca674ece..caedc7fa4 100644 --- a/g10/trustdb.h +++ b/g10/trustdb.h @@ -1,5 +1,6 @@ /* trustdb.h - Trust database - * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 + * Free Software Foundation, Inc. * * This file is part of GnuPG. * @@ -45,15 +46,14 @@ int setup_trustdb( int level, const char *dbname ); void init_trustdb( void ); void sync_trustdb( void ); -int trust_letter( unsigned value ); const char *trust_string (unsigned int value); void revalidation_mark (void); int trustdb_pending_check(void); int is_disabled(void *dummy,u32 *keyid); -unsigned int get_validity (PKT_public_key *pk, const byte *namehash); -int get_validity_info (PKT_public_key *pk, const byte *namehash); +unsigned int get_validity (PKT_public_key *pk, PKT_user_id *uid); +int get_validity_info (PKT_public_key *pk, PKT_user_id *uid); void list_trust_path( const char *username );