aboutsummaryrefslogtreecommitdiffstats
path: root/g10/import.c
diff options
context:
space:
mode:
Diffstat (limited to 'g10/import.c')
-rw-r--r--g10/import.c29
1 files changed, 16 insertions, 13 deletions
diff --git a/g10/import.c b/g10/import.c
index 9658530f1..044716f98 100644
--- a/g10/import.c
+++ b/g10/import.c
@@ -815,16 +815,18 @@ chk_self_sigs( const char *fname, KBNODE keyblock,
(ulong)keyid[1]);
return -1; /* the complete keyblock is invalid */
}
- rc = check_key_signature( keyblock, n, NULL);
- if( rc ) {
- log_info( rc == G10ERR_PUBKEY_ALGO ?
- _("key %08lX: unsupported public key algorithm\n"):
- _("key %08lX: invalid self-signature\n"),
- (ulong)keyid[1]);
- unode->flag |= 2; /* mark as invalid */
+ /* If it hasn't been marked valid yet, keep trying */
+ if(!(unode->flag&1)) {
+ rc = check_key_signature( keyblock, n, NULL);
+ if( rc )
+ log_info( rc == G10ERR_PUBKEY_ALGO ?
+ _("key %08lX: unsupported public key algorithm\n"):
+ _("key %08lX: invalid self-signature\n"),
+ (ulong)keyid[1]);
+ else
+ unode->flag |= 1; /* mark that signature checked */
}
- unode->flag |= 1; /* mark that signature checked */
}
else if( sig->sig_class == 0x18 ) {
KBNODE knode = find_prev_kbnode( keyblock,
@@ -839,16 +841,17 @@ chk_self_sigs( const char *fname, KBNODE keyblock,
n->flag |= 4; /* delete this */
}
else {
+ /* If it hasn't been marked valid yet, keep trying */
+ if(!(knode->flag&1)) {
rc = check_key_signature( keyblock, n, NULL);
- if( rc ) {
+ if( rc )
log_info( rc == G10ERR_PUBKEY_ALGO ?
_("key %08lX: unsupported public key algorithm\n"):
_("key %08lX: invalid subkey binding\n"),
(ulong)keyid[1]);
-
- knode->flag |= 2; /* mark as invalid */
- }
- knode->flag |= 1; /* mark that signature checked */
+ else
+ knode->flag |= 1; /* mark that signature checked */
+ }
}
}
}