diff --git a/g10/ChangeLog b/g10/ChangeLog index 93b6267a3..b7e3933f1 100644 --- a/g10/ChangeLog +++ b/g10/ChangeLog @@ -1,3 +1,9 @@ +2004-02-11 David Shaw + + * options.h, g10.c (main), keylist.c (list_keyblock_print): Add + "show-unusable-subkeys" list-option to show revoked and/or expired + subkeys. + 2004-02-10 David Shaw * keyedit.c (keyedit_menu): Prompt for subkey removal for both diff --git a/g10/g10.c b/g10/g10.c index 25be39abf..6393c522c 100644 --- a/g10/g10.c +++ b/g10/g10.c @@ -1705,6 +1705,7 @@ main( int argc, char **argv ) g10_opt_verbose++; opt.verbose++; opt.list_options|=LIST_SHOW_UNUSABLE_UIDS; + opt.list_options|=LIST_SHOW_UNUSABLE_SUBKEYS; break; case oKOption: set_cmd( &cmd, aKMode ); break; @@ -2102,6 +2103,7 @@ main( int argc, char **argv ) {"show-validity",LIST_SHOW_VALIDITY}, {"show-long-keyids",LIST_SHOW_LONG_KEYIDS}, {"show-unusable-uids",LIST_SHOW_UNUSABLE_UIDS}, + {"show-unusable-subkeys",LIST_SHOW_UNUSABLE_SUBKEYS}, {"show-keyring",LIST_SHOW_KEYRING}, {"show-sig-expire",LIST_SHOW_SIG_EXPIRE}, {NULL,0} diff --git a/g10/keylist.c b/g10/keylist.c index c949e8a0c..f3fdb15be 100644 --- a/g10/keylist.c +++ b/g10/keylist.c @@ -605,7 +605,9 @@ list_keyblock_print ( KBNODE keyblock, int secret, int fpr, void *opaque ) struct sig_stats *stats=opaque; int skip_sigs=0; int newformat=((opt.list_options&LIST_SHOW_VALIDITY) && !secret) - || (opt.list_options & (LIST_SHOW_LONG_KEYIDS|LIST_SHOW_UNUSABLE_UIDS)); + || (opt.list_options & (LIST_SHOW_LONG_KEYIDS + | LIST_SHOW_UNUSABLE_UIDS + | LIST_SHOW_UNUSABLE_SUBKEYS)); /* get the keyid from the keyblock */ node = find_kbnode( keyblock, secret? PKT_SECRET_KEY : PKT_PUBLIC_KEY ); @@ -742,6 +744,15 @@ list_keyblock_print ( KBNODE keyblock, int secret, int fpr, void *opaque ) u32 keyid2[2]; PKT_public_key *pk2 = node->pkt->pkt.public_key; + if((pk2->is_revoked || pk2->has_expired) + && !(opt.list_options&LIST_SHOW_UNUSABLE_SUBKEYS)) + { + skip_sigs=1; + continue; + } + else + skip_sigs=0; + if( !any ) { putchar('\n'); if( fpr ) @@ -817,7 +828,6 @@ list_keyblock_print ( KBNODE keyblock, int secret, int fpr, void *opaque ) /* TODO: Make sure a cached sig record here still has the pk that issued it. See also keyedit.c:print_and_check_one_sig */ - } else { rc = 0; diff --git a/g10/options.h b/g10/options.h index 4698aead5..aa7c244f8 100644 --- a/g10/options.h +++ b/g10/options.h @@ -245,8 +245,9 @@ struct { #define LIST_SHOW_VALIDITY (1<<4) #define LIST_SHOW_LONG_KEYIDS (1<<5) #define LIST_SHOW_UNUSABLE_UIDS (1<<6) -#define LIST_SHOW_KEYRING (1<<7) -#define LIST_SHOW_SIG_EXPIRE (1<<8) +#define LIST_SHOW_UNUSABLE_SUBKEYS (1<<7) +#define LIST_SHOW_KEYRING (1<<8) +#define LIST_SHOW_SIG_EXPIRE (1<<9) #define VERIFY_SHOW_PHOTOS (1<<0) #define VERIFY_SHOW_POLICY_URLS (1<<1)