aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Shaw <[email protected]>2002-07-24 03:29:02 +0000
committerDavid Shaw <[email protected]>2002-07-24 03:29:02 +0000
commiteb5c0265e134ef7511845c93d76e4fb2b805627c (patch)
treec8230a8abc823973cd269eac0f2d97c24c28b2ba
parent* sig-check.c (signature_check2): Signatures made by invalid subkeys (diff)
downloadgnupg-eb5c0265e134ef7511845c93d76e4fb2b805627c.tar.gz
gnupg-eb5c0265e134ef7511845c93d76e4fb2b805627c.zip
* import.c (delete_inv_parts): Discard subkey signatures (0x18 and 0x28)
if found in the userid section of the key.
Diffstat (limited to '')
-rw-r--r--g10/ChangeLog3
-rw-r--r--g10/import.c13
2 files changed, 15 insertions, 1 deletions
diff --git a/g10/ChangeLog b/g10/ChangeLog
index 0d45e559c..9a5e75df2 100644
--- a/g10/ChangeLog
+++ b/g10/ChangeLog
@@ -1,5 +1,8 @@
2002-07-23 David Shaw <[email protected]>
+ * import.c (delete_inv_parts): Discard subkey signatures (0x18 and
+ 0x28) if found in the userid section of the key.
+
* sig-check.c (signature_check2): Signatures made by invalid
subkeys (bad/missing binding sig) are also invalid.
diff --git a/g10/import.c b/g10/import.c
index 40c1e85ef..ddb483105 100644
--- a/g10/import.c
+++ b/g10/import.c
@@ -1033,7 +1033,7 @@ static int
delete_inv_parts( const char *fname, KBNODE keyblock, u32 *keyid )
{
KBNODE node;
- int nvalid=0, uid_seen=0;
+ int nvalid=0, uid_seen=0, subkey_seen=0;
for(node=keyblock->next; node; node = node->next ) {
if( node->pkt->pkttype == PKT_USER_ID ) {
@@ -1074,6 +1074,8 @@ delete_inv_parts( const char *fname, KBNODE keyblock, u32 *keyid )
node = node->next;
}
}
+ else
+ subkey_seen = 1;
}
else if( node->pkt->pkttype == PKT_SIGNATURE
&& check_pubkey_algo( node->pkt->pkt.signature->pubkey_algo)
@@ -1121,6 +1123,15 @@ delete_inv_parts( const char *fname, KBNODE keyblock, u32 *keyid )
}
}
}
+ else if( node->pkt->pkttype == PKT_SIGNATURE &&
+ (node->pkt->pkt.signature->sig_class == 0x18 ||
+ node->pkt->pkt.signature->sig_class == 0x28) &&
+ !subkey_seen ) {
+ log_error( _("key %08lX: subkey signature "
+ "in wrong place - skipped\n"),
+ (ulong)keyid[1]);
+ delete_kbnode( node );
+ }
else if( (node->flag & 4) ) /* marked for deletion */
delete_kbnode( node );
}