1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-12-23 10:29:58 +01:00

After generating a new key, show the key information (name, keyid,

fingerprint, etc.)

Do not print uncheckable signatures (missing key..) in --check-sigs.

Print statistics (N missing keys, etc.) after --check-sigs.

When signing a key with an expiration date on it, the "Do you want your
signature to expire at the same time?" question should default to YES
This commit is contained in:
David Shaw 2002-04-23 17:54:38 +00:00
parent af5e83329e
commit cd7b3f9590
5 changed files with 103 additions and 43 deletions

View File

@ -1,3 +1,17 @@
2002-04-23 David Shaw <dshaw@jabberwocky.com>
* main.h, keygen.c (do_generate_keypair), keylist.c
(print_signature_stats, list_all, list_one, list_keyblock,
list_keyblock_print, list_keyblock_colon): After generating a new
key, show the key information (name, keyid, fingerprint, etc.)
Also do not print uncheckable signatures (missing key..) in
--check-sigs. Print statistics (N missing keys, etc.) after
--check-sigs.
* keyedit.c (sign_uids): When signing a key with an expiration
date on it, the "Do you want your signature to expire at the same
time?" question should default to YES.
2002-04-22 David Shaw <dshaw@jabberwocky.com> 2002-04-22 David Shaw <dshaw@jabberwocky.com>
* parse-packet.c (parse_plaintext), packet.h, plaintext.c * parse-packet.c (parse_plaintext), packet.h, plaintext.c

View File

@ -435,12 +435,15 @@ sign_uids( KBNODE keyblock, STRLIST locusr, int *ret_modified,
} }
else else
{ {
char *answer;
tty_printf(_("This key is due to expire on %s.\n"), tty_printf(_("This key is due to expire on %s.\n"),
expirestr_from_pk(primary_pk)); expirestr_from_pk(primary_pk));
/* Should this default to yes? -ds */
if(cpr_get_answer_is_yes("sign_uid.expire", answer=cpr_get("sign_uid.expire",
_("Do you want your signature to " _("Do you want your signature to "
"expire at the same time? (y/N) "))) "expire at the same time? (Y/n) "));
if(answer_is_yes_no_default(answer,1))
{ {
/* This fixes the signature timestamp we're going /* This fixes the signature timestamp we're going
to make as now. This is so the expiration date to make as now. This is so the expiration date
@ -451,6 +454,9 @@ sign_uids( KBNODE keyblock, STRLIST locusr, int *ret_modified,
duration=primary_pk->expiredate-now; duration=primary_pk->expiredate-now;
force_v4=1; force_v4=1;
} }
cpr_kill_prompt();
m_free(answer);
} }
} }

View File

@ -1998,6 +1998,8 @@ do_generate_keypair( struct para_data_s *para,
if (!opt.batch) { if (!opt.batch) {
tty_printf(_("public and secret key created and signed.\n") ); tty_printf(_("public and secret key created and signed.\n") );
tty_printf(_("key marked as ultimately trusted.\n") ); tty_printf(_("key marked as ultimately trusted.\n") );
tty_printf("\n");
list_keyblock(pub_root,0,1,NULL);
} }

View File

@ -39,8 +39,13 @@
static void list_all(int); static void list_all(int);
static void list_one( STRLIST names, int secret); static void list_one( STRLIST names, int secret);
static void list_keyblock( KBNODE keyblock, int secret );
struct sig_stats
{
int inv_sigs;
int no_key;
int oth_err;
};
/**************** /****************
* List the keys * List the keys
@ -127,6 +132,23 @@ show_notation(PKT_signature *sig,int indent)
log_info(_("WARNING: invalid notation data found\n")); log_info(_("WARNING: invalid notation data found\n"));
} }
static void
print_signature_stats(struct sig_stats *s)
{
if( s->inv_sigs == 1 )
tty_printf(_("1 bad signature\n") );
else if( s->inv_sigs )
tty_printf(_("%d bad signatures\n"), s->inv_sigs );
if( s->no_key == 1 )
tty_printf(_("1 signature not checked due to a missing key\n") );
else if( s->no_key )
tty_printf(_("%d signatures not checked due to missing keys\n"),s->no_key);
if( s->oth_err == 1 )
tty_printf(_("1 signature not checked due to an error\n") );
else if( s->oth_err )
tty_printf(_("%d signatures not checked due to errors\n"), s->oth_err );
}
static void static void
list_all( int secret ) list_all( int secret )
{ {
@ -134,6 +156,9 @@ list_all( int secret )
KBNODE keyblock = NULL; KBNODE keyblock = NULL;
int rc=0; int rc=0;
const char *lastresname, *resname; const char *lastresname, *resname;
struct sig_stats stats;
memset(&stats,0,sizeof(stats));
hd = keydb_new (secret); hd = keydb_new (secret);
if (!hd) if (!hd)
@ -164,13 +189,17 @@ list_all( int secret )
lastresname = resname; lastresname = resname;
} }
merge_keys_and_selfsig( keyblock ); merge_keys_and_selfsig( keyblock );
list_keyblock( keyblock, secret ); list_keyblock( keyblock, secret, opt.fingerprint,
opt.check_sigs?&stats:NULL);
release_kbnode( keyblock ); release_kbnode( keyblock );
keyblock = NULL; keyblock = NULL;
} while (!(rc = keydb_search_next (hd))); } while (!(rc = keydb_search_next (hd)));
if( rc && rc != -1 ) if( rc && rc != -1 )
log_error ("keydb_search_next failed: %s\n", g10_errstr(rc)); log_error ("keydb_search_next failed: %s\n", g10_errstr(rc));
if(opt.check_sigs && !opt.with_colons)
print_signature_stats(&stats);
leave: leave:
release_kbnode (keyblock); release_kbnode (keyblock);
keydb_release (hd); keydb_release (hd);
@ -186,6 +215,9 @@ list_one( STRLIST names, int secret )
const char *resname; const char *resname;
char *keyring_str = N_("Keyring"); char *keyring_str = N_("Keyring");
int i; int i;
struct sig_stats stats;
memset(&stats,0,sizeof(stats));
/* fixme: using the bynames function has the disadvantage that we /* fixme: using the bynames function has the disadvantage that we
* don't know wether one of the names given was not found. OTOH, * don't know wether one of the names given was not found. OTOH,
@ -211,7 +243,7 @@ list_one( STRLIST names, int secret )
putchar('-'); putchar('-');
putchar('\n'); putchar('\n');
} }
list_keyblock( keyblock, 1 ); list_keyblock( keyblock, 1, opt.fingerprint, &stats );
release_kbnode( keyblock ); release_kbnode( keyblock );
} while( !get_seckey_next( ctx, NULL, &keyblock ) ); } while( !get_seckey_next( ctx, NULL, &keyblock ) );
get_seckey_end( ctx ); get_seckey_end( ctx );
@ -231,11 +263,15 @@ list_one( STRLIST names, int secret )
putchar('-'); putchar('-');
putchar('\n'); putchar('\n');
} }
list_keyblock( keyblock, 0 ); list_keyblock( keyblock, 0, opt.fingerprint,
opt.check_sigs?&stats:NULL );
release_kbnode( keyblock ); release_kbnode( keyblock );
} while( !get_pubkey_next( ctx, NULL, &keyblock ) ); } while( !get_pubkey_next( ctx, NULL, &keyblock ) );
get_pubkey_end( ctx ); get_pubkey_end( ctx );
} }
if(opt.check_sigs && !opt.with_colons)
print_signature_stats(&stats);
} }
static void static void
@ -300,9 +336,8 @@ print_capabilities (PKT_public_key *pk, PKT_secret_key *sk, KBNODE keyblock)
putchar(':'); putchar(':');
} }
static void static void
list_keyblock_print ( KBNODE keyblock, int secret ) list_keyblock_print ( KBNODE keyblock, int secret, int fpr, void *opaque )
{ {
int rc = 0; int rc = 0;
KBNODE kbctx; KBNODE kbctx;
@ -311,6 +346,7 @@ list_keyblock_print ( KBNODE keyblock, int secret )
PKT_secret_key *sk; PKT_secret_key *sk;
u32 keyid[2]; u32 keyid[2];
int any=0; int any=0;
struct sig_stats *stats=opaque;
/* get the keyid from the keyblock */ /* get the keyid from the keyblock */
node = find_kbnode( keyblock, secret? PKT_SECRET_KEY : PKT_PUBLIC_KEY ); node = find_kbnode( keyblock, secret? PKT_SECRET_KEY : PKT_PUBLIC_KEY );
@ -356,7 +392,7 @@ list_keyblock_print ( KBNODE keyblock, int secret )
node->pkt->pkt.user_id->len ); node->pkt->pkt.user_id->len );
putchar('\n'); putchar('\n');
if( !any ) { if( !any ) {
if( opt.fingerprint ) if( fpr )
print_fingerprint( pk, sk, 0 ); print_fingerprint( pk, sk, 0 );
if( opt.with_key_data ) if( opt.with_key_data )
print_key_data( pk, keyid ); print_key_data( pk, keyid );
@ -373,7 +409,7 @@ list_keyblock_print ( KBNODE keyblock, int secret )
if( !any ) { if( !any ) {
putchar('\n'); putchar('\n');
if( opt.fingerprint ) if( fpr )
print_fingerprint( pk, sk, 0 ); /* of the main key */ print_fingerprint( pk, sk, 0 ); /* of the main key */
any = 1; any = 1;
} }
@ -387,7 +423,7 @@ list_keyblock_print ( KBNODE keyblock, int secret )
printf(_(" [expires: %s]"), expirestr_from_pk( pk2 ) ); printf(_(" [expires: %s]"), expirestr_from_pk( pk2 ) );
} }
putchar('\n'); putchar('\n');
if( opt.fingerprint > 1 ) if( fpr > 1 )
print_fingerprint( pk2, NULL, 0 ); print_fingerprint( pk2, NULL, 0 );
if( opt.with_key_data ) if( opt.with_key_data )
print_key_data( pk2, keyid2 ); print_key_data( pk2, keyid2 );
@ -398,7 +434,7 @@ list_keyblock_print ( KBNODE keyblock, int secret )
if( !any ) { if( !any ) {
putchar('\n'); putchar('\n');
if( opt.fingerprint ) if( fpr )
print_fingerprint( pk, sk, 0 ); /* of the main key */ print_fingerprint( pk, sk, 0 ); /* of the main key */
any = 1; any = 1;
} }
@ -408,7 +444,7 @@ list_keyblock_print ( KBNODE keyblock, int secret )
pubkey_letter( sk2->pubkey_algo ), pubkey_letter( sk2->pubkey_algo ),
(ulong)keyid2[1], (ulong)keyid2[1],
datestr_from_sk( sk2 ) ); datestr_from_sk( sk2 ) );
if( opt.fingerprint > 1 ) if( fpr > 1 )
print_fingerprint( NULL, sk2, 0 ); print_fingerprint( NULL, sk2, 0 );
} }
else if( opt.list_sigs && node->pkt->pkttype == PKT_SIGNATURE ) { else if( opt.list_sigs && node->pkt->pkttype == PKT_SIGNATURE ) {
@ -416,6 +452,22 @@ list_keyblock_print ( KBNODE keyblock, int secret )
int sigrc; int sigrc;
char *sigstr; char *sigstr;
if( stats ) {
// fflush(stdout);
rc = check_key_signature( keyblock, node, NULL );
switch( rc ) {
case 0: sigrc = '!'; break;
case G10ERR_BAD_SIGN: stats->inv_sigs++; sigrc = '-'; break;
case G10ERR_NO_PUBKEY:
case G10ERR_UNU_PUBKEY: stats->no_key++; continue;
default: stats->oth_err++; sigrc = '%'; break;
}
}
else {
rc = 0;
sigrc = ' ';
}
if( !any ) { /* no user id, (maybe a revocation follows)*/ if( !any ) { /* no user id, (maybe a revocation follows)*/
/* Check if the pk is really revoked - there could be a /* Check if the pk is really revoked - there could be a
0x20 sig packet there even if we are not revoked 0x20 sig packet there even if we are not revoked
@ -429,7 +481,7 @@ list_keyblock_print ( KBNODE keyblock, int secret )
puts("[subkey revoked]"); puts("[subkey revoked]");
else else
putchar('\n'); putchar('\n');
if( opt.fingerprint ) if( fpr )
print_fingerprint( pk, sk, 0 ); print_fingerprint( pk, sk, 0 );
any=1; any=1;
} }
@ -448,21 +500,6 @@ list_keyblock_print ( KBNODE keyblock, int secret )
"[unexpected signature class 0x%02x]\n",sig->sig_class ); "[unexpected signature class 0x%02x]\n",sig->sig_class );
continue; continue;
} }
if( opt.check_sigs ) {
fflush(stdout);
rc = check_key_signature( keyblock, node, NULL );
switch( rc ) {
case 0: sigrc = '!'; break;
case G10ERR_BAD_SIGN: sigrc = '-'; break;
case G10ERR_NO_PUBKEY:
case G10ERR_UNU_PUBKEY: sigrc = '?'; break;
default: sigrc = '%'; break;
}
}
else {
rc = 0;
sigrc = ' ';
}
fputs( sigstr, stdout ); fputs( sigstr, stdout );
printf("%c%c %c%c%c%c%c %08lX %s ", printf("%c%c %c%c%c%c%c %08lX %s ",
@ -500,7 +537,7 @@ list_keyblock_print ( KBNODE keyblock, int secret )
static void static void
list_keyblock_colon( KBNODE keyblock, int secret ) list_keyblock_colon( KBNODE keyblock, int secret, int fpr )
{ {
int rc = 0; int rc = 0;
KBNODE kbctx; KBNODE kbctx;
@ -572,7 +609,7 @@ list_keyblock_colon( KBNODE keyblock, int secret )
putchar(':'); putchar(':');
print_capabilities (pk, sk, keyblock); print_capabilities (pk, sk, keyblock);
putchar('\n'); putchar('\n');
if( opt.fingerprint ) if( fpr )
print_fingerprint( pk, sk, 0 ); print_fingerprint( pk, sk, 0 );
if( opt.with_key_data ) if( opt.with_key_data )
print_key_data( pk, keyid ); print_key_data( pk, keyid );
@ -619,7 +656,7 @@ list_keyblock_colon( KBNODE keyblock, int secret )
putchar(':'); putchar(':');
print_capabilities (pk, sk, keyblock); print_capabilities (pk, sk, keyblock);
putchar('\n'); putchar('\n');
if( opt.fingerprint ) if( fpr )
print_fingerprint( pk, sk, 0 ); print_fingerprint( pk, sk, 0 );
if( opt.with_key_data ) if( opt.with_key_data )
print_key_data( pk, keyid ); print_key_data( pk, keyid );
@ -635,7 +672,7 @@ list_keyblock_colon( KBNODE keyblock, int secret )
putchar(':'); putchar(':');
print_capabilities (pk, sk, keyblock); print_capabilities (pk, sk, keyblock);
putchar('\n'); putchar('\n');
if( opt.fingerprint ) if( fpr )
print_fingerprint( pk, sk, 0 ); /* of the main key */ print_fingerprint( pk, sk, 0 ); /* of the main key */
any = 1; any = 1;
} }
@ -669,7 +706,7 @@ list_keyblock_colon( KBNODE keyblock, int secret )
putchar(':'); putchar(':');
print_capabilities (pk2, NULL, NULL); print_capabilities (pk2, NULL, NULL);
putchar('\n'); putchar('\n');
if( opt.fingerprint > 1 ) if( fpr > 1 )
print_fingerprint( pk2, NULL, 0 ); print_fingerprint( pk2, NULL, 0 );
if( opt.with_key_data ) if( opt.with_key_data )
print_key_data( pk2, keyid2 ); print_key_data( pk2, keyid2 );
@ -683,7 +720,7 @@ list_keyblock_colon( KBNODE keyblock, int secret )
putchar(':'); putchar(':');
print_capabilities (pk, sk, keyblock); print_capabilities (pk, sk, keyblock);
putchar('\n'); putchar('\n');
if( opt.fingerprint ) if( fpr )
print_fingerprint( pk, sk, 0 ); /* of the main key */ print_fingerprint( pk, sk, 0 ); /* of the main key */
any = 1; any = 1;
} }
@ -698,7 +735,7 @@ list_keyblock_colon( KBNODE keyblock, int secret )
/* fixme: add LID */ ); /* fixme: add LID */ );
print_capabilities (NULL, sk2, NULL); print_capabilities (NULL, sk2, NULL);
putchar ('\n'); putchar ('\n');
if( opt.fingerprint > 1 ) if( fpr > 1 )
print_fingerprint( NULL, sk2, 0 ); print_fingerprint( NULL, sk2, 0 );
} }
else if( opt.list_sigs && node->pkt->pkttype == PKT_SIGNATURE ) { else if( opt.list_sigs && node->pkt->pkttype == PKT_SIGNATURE ) {
@ -718,7 +755,7 @@ list_keyblock_colon( KBNODE keyblock, int secret )
putchar(':'); putchar(':');
print_capabilities (pk, sk, keyblock); print_capabilities (pk, sk, keyblock);
putchar('\n'); putchar('\n');
if( opt.fingerprint ) if( fpr )
print_fingerprint( pk, sk, 0 ); print_fingerprint( pk, sk, 0 );
any=1; any=1;
} }
@ -823,14 +860,14 @@ reorder_keyblock (KBNODE keyblock)
primary2->next = node; primary2->next = node;
} }
static void void
list_keyblock( KBNODE keyblock, int secret ) list_keyblock( KBNODE keyblock, int secret, int fpr, void *opaque )
{ {
reorder_keyblock (keyblock); reorder_keyblock (keyblock);
if (opt.with_colons) if (opt.with_colons)
list_keyblock_colon (keyblock, secret ); list_keyblock_colon (keyblock, secret, fpr );
else else
list_keyblock_print (keyblock, secret ); list_keyblock_print (keyblock, secret, fpr, opaque );
} }
/* /*

View File

@ -160,6 +160,7 @@ void release_revocation_reason_info( struct revocation_reason_info *reason );
/*-- keylist.c --*/ /*-- keylist.c --*/
void public_key_list( STRLIST list ); void public_key_list( STRLIST list );
void secret_key_list( STRLIST list ); void secret_key_list( STRLIST list );
void list_keyblock( KBNODE keyblock, int secret, int fpr, void *opaque );
void print_fingerprint (PKT_public_key *pk, PKT_secret_key *sk, int mode); void print_fingerprint (PKT_public_key *pk, PKT_secret_key *sk, int mode);
void show_policy_url(PKT_signature *sig,int indent); void show_policy_url(PKT_signature *sig,int indent);
void show_notation(PKT_signature *sig,int indent); void show_notation(PKT_signature *sig,int indent);