aboutsummaryrefslogtreecommitdiffstats
path: root/g10
diff options
context:
space:
mode:
Diffstat (limited to 'g10')
-rw-r--r--g10/ChangeLog7
-rw-r--r--g10/g10.c3
-rw-r--r--g10/import.c20
-rw-r--r--g10/options.h1
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
diff --git a/g10/g10.c b/g10/g10.c
index 88d5d025d..65b48f426 100644
--- a/g10/g10.c
+++ b/g10/g10.c
@@ -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;