aboutsummaryrefslogtreecommitdiffstats
path: root/g10/import.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>1998-10-25 19:00:01 +0000
committerWerner Koch <[email protected]>1998-10-25 19:00:01 +0000
commit5ccb92591e5ff9cf90efeb5ef527cf7a5fb08fcf (patch)
tree241529d030ede38fcdaee1a708c5956693ed159d /g10/import.c
parentEpxerimenta support for GDBM keyings. (diff)
downloadgnupg-5ccb92591e5ff9cf90efeb5ef527cf7a5fb08fcf.tar.gz
gnupg-5ccb92591e5ff9cf90efeb5ef527cf7a5fb08fcf.zip
some random changes
Diffstat (limited to 'g10/import.c')
-rw-r--r--g10/import.c135
1 files changed, 103 insertions, 32 deletions
diff --git a/g10/import.c b/g10/import.c
index 374843363..075ecd358 100644
--- a/g10/import.c
+++ b/g10/import.c
@@ -36,9 +36,24 @@
#include "i18n.h"
+static struct {
+ ulong no_user_id;
+ ulong imported;
+ ulong imported_rsa;
+ ulong n_uids;
+ ulong n_sigs;
+ ulong n_subk;
+ ulong unchanged;
+ ulong n_revoc;
+ ulong secret_read;
+ ulong secret_imported;
+ ulong secret_dups;
+} stats;
+
+
static int read_block( IOBUF a, compress_filter_context_t *cfx,
PACKET **pending_pkt, KBNODE *ret_root );
-static int import_one( const char *fname, KBNODE keyblock );
+static int import_one( const char *fname, KBNODE keyblock, int fast );
static int import_secret_one( const char *fname, KBNODE keyblock );
static int import_revoke_cert( const char *fname, KBNODE node );
static int chk_self_sigs( const char *fname, KBNODE keyblock,
@@ -59,7 +74,7 @@ static int merge_sigs( KBNODE dst, KBNODE src, int *n_sigs,
* least one userid. Only user ids which are self signed will be imported.
* Other signatures are not checked.
*
- * Actually this functtion does a merge. It works like this:
+ * Actually this function does a merge. It works like this:
*
* - get the keyblock
* - check self-signatures and remove all userids and their signatures
@@ -85,7 +100,7 @@ static int merge_sigs( KBNODE dst, KBNODE src, int *n_sigs,
*
*/
int
-import_keys( const char *fname )
+import_keys( const char *fname, int fast )
{
armor_filter_context_t afx;
compress_filter_context_t cfx;
@@ -93,11 +108,15 @@ import_keys( const char *fname )
IOBUF inp = NULL;
KBNODE keyblock;
int rc = 0;
+ ulong count=0;
memset( &afx, 0, sizeof afx);
memset( &cfx, 0, sizeof cfx);
afx.only_keyblocks = 1;
+ /* fixme: don't use static variables */
+ memset( &stats, 0, sizeof( stats ) );
+
/* open file */
inp = iobuf_open(fname);
if( !fname )
@@ -112,7 +131,7 @@ import_keys( const char *fname )
while( !(rc = read_block( inp, &cfx, &pending_pkt, &keyblock) )) {
if( keyblock->pkt->pkttype == PKT_PUBLIC_KEY )
- rc = import_one( fname, keyblock );
+ rc = import_one( fname, keyblock, fast );
else if( keyblock->pkt->pkttype == PKT_SECRET_KEY )
rc = import_secret_one( fname, keyblock );
else if( keyblock->pkt->pkttype == PKT_SIGNATURE
@@ -125,12 +144,41 @@ import_keys( const char *fname )
release_kbnode(keyblock);
if( rc )
break;
+ if( !(++count % 100) )
+ log_info(_("%lu keys so far processed\n"), count );
}
if( rc == -1 )
rc = 0;
else if( rc && rc != G10ERR_INV_KEYRING )
log_error_f( fname, _("read error: %s\n"), g10_errstr(rc));
+ log_info(_("Total number processed: %lu\n"), count );
+ if( stats.no_user_id )
+ log_info(_(" w/o user IDs: %lu\n"), stats.no_user_id );
+ if( stats.imported || stats.imported_rsa ) {
+ log_info(_(" imported: %lu"), stats.imported );
+ if( stats.imported_rsa )
+ fprintf(stderr, " (RSA: %lu)", stats.imported_rsa );
+ putc('\n', stderr);
+ }
+ if( stats.unchanged )
+ log_info(_(" unchanged: %lu\n"), stats.unchanged );
+ if( stats.n_uids )
+ log_info(_(" new user IDs: %lu\n"), stats.n_uids );
+ if( stats.n_subk )
+ log_info(_(" new subkeys: %lu\n"), stats.n_subk );
+ if( stats.n_sigs )
+ log_info(_(" new signatures: %lu\n"), stats.n_sigs );
+ if( stats.n_revoc )
+ log_info(_(" new key revocations: %lu\n"), stats.n_revoc );
+ if( stats.secret_read )
+ log_info(_(" secret keys read: %lu\n"), stats.secret_read );
+ if( stats.secret_imported )
+ log_info(_(" secret keys imported: %lu\n"), stats.secret_imported );
+ if( stats.secret_dups )
+ log_info(_(" secret keys unchanged: %lu\n"), stats.secret_dups );
+
+
iobuf_close(inp);
return rc;
}
@@ -238,7 +286,7 @@ read_block( IOBUF a, compress_filter_context_t *cfx,
* which called g10.
*/
static int
-import_one( const char *fname, KBNODE keyblock )
+import_one( const char *fname, KBNODE keyblock, int fast )
{
PKT_public_key *pk;
PKT_public_key *pk_orig;
@@ -280,9 +328,12 @@ import_one( const char *fname, KBNODE keyblock )
return rc== -1? 0:rc;
if( !delete_inv_parts( fname, keyblock, keyid ) ) {
- log_info_f( fname, _("key %08lX: no valid user ids\n"),
- (ulong)keyid[1]);
- log_info(_("this may be caused by a missing self-signature\n"));
+ if( !opt.quiet ) {
+ log_info_f( fname, _("key %08lX: no valid user ids\n"),
+ (ulong)keyid[1]);
+ log_info(_("this may be caused by a missing self-signature\n"));
+ }
+ stats.no_user_id++;
return 0;
}
@@ -311,7 +362,12 @@ import_one( const char *fname, KBNODE keyblock )
_("can't write to keyring: %s\n"), g10_errstr(rc) );
unlock_keyblock( &kbpos );
/* we are ready */
- log_info_f( fname, _("key %08lX: public key imported\n"), (ulong)keyid[1]);
+ if( !opt.quiet )
+ log_info_f( fname, _("key %08lX: public key imported\n"),
+ (ulong)keyid[1]);
+ stats.imported++;
+ if( is_RSA( pk->pubkey_algo ) )
+ stats.imported_rsa++;
new_key = 1;
}
else { /* merge */
@@ -366,29 +422,39 @@ import_one( const char *fname, KBNODE keyblock )
_("can't write keyblock: %s\n"), g10_errstr(rc) );
unlock_keyblock( &kbpos );
/* we are ready */
- if( n_uids == 1 )
- log_info_f(fname, _("key %08lX: 1 new user-id\n"),
- (ulong)keyid[1]);
- else if( n_uids )
- log_info_f(fname, _("key %08lX: %d new user-ids\n"),
- (ulong)keyid[1], n_uids );
- if( n_sigs == 1 )
- log_info_f(fname, _("key %08lX: 1 new signature\n"),
- (ulong)keyid[1]);
- else if( n_sigs )
- log_info_f(fname, _("key %08lX: %d new signatures\n"),
- (ulong)keyid[1], n_sigs );
- if( n_subk == 1 )
- log_info_f(fname, _("key %08lX: 1 new subkey\n"),
- (ulong)keyid[1]);
- else if( n_subk )
- log_info_f(fname, _("key %08lX: %d new subkeys\n"),
- (ulong)keyid[1], n_subk );
+ if( !opt.quiet ) {
+ if( n_uids == 1 )
+ log_info_f(fname, _("key %08lX: 1 new user-id\n"),
+ (ulong)keyid[1]);
+ else if( n_uids )
+ log_info_f(fname, _("key %08lX: %d new user-ids\n"),
+ (ulong)keyid[1], n_uids );
+ if( n_sigs == 1 )
+ log_info_f(fname, _("key %08lX: 1 new signature\n"),
+ (ulong)keyid[1]);
+ else if( n_sigs )
+ log_info_f(fname, _("key %08lX: %d new signatures\n"),
+ (ulong)keyid[1], n_sigs );
+ if( n_subk == 1 )
+ log_info_f(fname, _("key %08lX: 1 new subkey\n"),
+ (ulong)keyid[1]);
+ else if( n_subk )
+ log_info_f(fname, _("key %08lX: %d new subkeys\n"),
+ (ulong)keyid[1], n_subk );
+ }
+
+ stats.n_uids +=n_uids;
+ stats.n_sigs +=n_sigs;
+ stats.n_subk +=n_subk;
+ }
+ else {
+ if( !opt.quiet )
+ log_info_f(fname, _("key %08lX: not changed\n"),
+ (ulong)keyid[1] );
+ stats.unchanged++;
}
- else
- log_info_f(fname, _("key %08lX: not changed\n"), (ulong)keyid[1] );
}
- if( !rc ) {
+ if( !rc && !fast ) {
rc = query_trust_record( new_key? pk : pk_orig );
if( rc && rc != -1 )
log_error("trustdb error: %s\n", g10_errstr(rc) );
@@ -399,7 +465,7 @@ import_one( const char *fname, KBNODE keyblock )
(ulong)keyid[1], g10_errstr(rc) );
}
else if( mod_key )
- rc = update_trust_record( keyblock_orig );
+ rc = update_trust_record( keyblock_orig, NULL );
else
rc = clear_trust_checked_flag( new_key? pk : pk_orig );
}
@@ -442,6 +508,7 @@ import_secret_one( const char *fname, KBNODE keyblock )
uidnode->pkt->pkt.user_id->len, 0 );
putc('\n', stderr);
}
+ stats.secret_read++;
if( !uidnode ) {
log_error_f(fname, _("key %08lX: no user id\n"), (ulong)keyid[1]);
return 0;
@@ -468,10 +535,12 @@ import_secret_one( const char *fname, KBNODE keyblock )
unlock_keyblock( &kbpos );
/* we are ready */
log_info_f(fname, _("key %08lX: secret key imported\n"), (ulong)keyid[1]);
+ stats.secret_imported++;
}
else if( !rc ) { /* we can't merge secret keys */
log_error_f(fname, _("key %08lX: already in secret keyring\n"),
(ulong)keyid[1]);
+ stats.secret_dups++;
}
else
log_error_f(fname, _("key %08lX: secret key not found: %s\n"),
@@ -569,8 +638,10 @@ import_revoke_cert( const char *fname, KBNODE node )
_("can't write keyblock: %s\n"), g10_errstr(rc) );
unlock_keyblock( &kbpos );
/* we are ready */
- log_info_f(fname, _("key %08lX: revocation certificate imported\n"),
+ if( !opt.quiet )
+ log_info_f(fname, _("key %08lX: revocation certificate imported\n"),
(ulong)keyid[1]);
+ stats.n_revoc++;
leave:
release_kbnode( keyblock );