diff options
Diffstat (limited to 'g10')
-rw-r--r-- | g10/ChangeLog | 7 | ||||
-rw-r--r-- | g10/g10.c | 3 | ||||
-rw-r--r-- | g10/import.c | 20 | ||||
-rw-r--r-- | g10/options.h | 1 |
4 files changed, 27 insertions, 4 deletions
diff --git a/g10/ChangeLog b/g10/ChangeLog index 9a33b5bc2..c383e9029 100644 --- a/g10/ChangeLog +++ b/g10/ChangeLog @@ -1,3 +1,10 @@ +Thu Jul 27 17:33:04 CEST 2000 Werner Koch <[email protected]> + + * g10.c: New option --merge-only. Suggested by Brendan O'Dea. + * import.c (import_one): Implemented it here + (import_secret_one): Ditto. + (print_stats): and give some stats. + Thu Jul 27 12:01:00 CEST 2000 Werner Koch <[email protected]> * g10.c: New options --show-session-key and --override-session-key @@ -192,6 +192,7 @@ enum cmd_and_opt_values { aNull = 0, oOverrideSessionKey, oNoRandomSeedFile, oNoAutoKeyRetrieve, + oMergeOnly, oEmu3DESS2KBug, /* will be removed in 1.1 */ oEmuMDEncodeBug, aTest }; @@ -376,6 +377,7 @@ static ARGPARSE_OPTS opts[] = { { oOverrideSessionKey, "override-session-key", 2, "@" }, { oNoRandomSeedFile, "no-random-seed-file", 0, "@" }, { oNoAutoKeyRetrieve, "no-auto-key-retrieve", 0, "@" }, + { oMergeOnly, "merge-only", 0, "@" }, { oEmu3DESS2KBug, "emulate-3des-s2k-bug", 0, "@"}, { oEmuMDEncodeBug, "emulate-md-encode-bug", 0, "@"}, {0} }; @@ -928,6 +930,7 @@ main( int argc, char **argv ) case oOverrideSessionKey: opt.override_session_key = pargs.r.ret_str; break; + case oMergeOnly: opt.merge_only = 1; break; default : pargs.err = configfp? 1:2; break; } diff --git a/g10/import.c b/g10/import.c index 35007deff..10fdb9961 100644 --- a/g10/import.c +++ b/g10/import.c @@ -50,6 +50,7 @@ static struct { ulong secret_read; ulong secret_imported; ulong secret_dups; + ulong skipped_new_keys; } stats; @@ -201,6 +202,9 @@ print_stats() { if( !opt.quiet ) { log_info(_("Total number processed: %lu\n"), stats.count ); + if( stats.skipped_new_keys ) + log_info(_(" skipped new keys: %lu\n"), + stats.skipped_new_keys ); if( stats.no_user_id ) log_info(_(" w/o user IDs: %lu\n"), stats.no_user_id ); if( stats.imported || stats.imported_rsa ) { @@ -228,8 +232,8 @@ print_stats() } if( is_status_enabled() ) { - char buf[12*20]; - sprintf(buf, "%lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu", + char buf[13*20]; + sprintf(buf, "%lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu", stats.count, stats.no_user_id, stats.imported, @@ -241,7 +245,8 @@ print_stats() stats.n_revoc, stats.secret_read, stats.secret_imported, - stats.secret_dups); + stats.secret_dups, + stats.skipped_new_keys ); write_status_text( STATUS_IMPORT_RES, buf ); } } @@ -413,6 +418,13 @@ import_one( const char *fname, KBNODE keyblock, int fast ) log_error( _("key %08lX: public key not found: %s\n"), (ulong)keyid[1], g10_errstr(rc)); } + else if ( rc && opt.merge_only ) { + if( opt.verbose ) + log_info( _("key %08lX: new key - skipped\n"), (ulong)keyid[1] ); + rc = 0; + fast = 1; /* so that we don't get into the trustdb update */ + stats.skipped_new_keys++; + } else if( rc ) { /* insert this key */ /* get default resource */ if( get_keyblock_handle( NULL, 0, &kbpos ) ) { @@ -583,7 +595,7 @@ import_secret_one( const char *fname, KBNODE keyblock ) /* do we have this key already in one of our secrings ? */ rc = seckey_available( keyid ); - if( rc == G10ERR_NO_SECKEY ) { /* simply insert this key */ + if( rc == G10ERR_NO_SECKEY && !opt.merge_only ) { /* simply insert this key */ /* get default resource */ if( get_keyblock_handle( NULL, 1, &kbpos ) ) { log_error("no default secret keyring\n"); diff --git a/g10/options.h b/g10/options.h index 0476aa97d..265c50c61 100644 --- a/g10/options.h +++ b/g10/options.h @@ -93,6 +93,7 @@ struct { int auto_key_retrieve; const char *override_session_key; int show_session_key; + int merge_only; } opt; |