summaryrefslogtreecommitdiffstats
path: root/g10/key-clean.c
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2018-07-06 11:48:38 +0200
committerWerner Koch <wk@gnupg.org>2018-07-09 08:15:50 +0200
commit6c3567196f7e72552f326ce07dccbcce31926e5d (patch)
tree1e89d26e8f278c278eefaa379122e8a0b04b7f0e /g10/key-clean.c
parentgpg: Move key cleaning functions to a separate file. (diff)
downloadgnupg2-6c3567196f7e72552f326ce07dccbcce31926e5d.tar.xz
gnupg2-6c3567196f7e72552f326ce07dccbcce31926e5d.zip
gpg: Split key cleaning function for clarity.
* g10/key-clean.c (clean_key): Rename to clean_all_uids and split subkey cleaning into ... (clean_all_subkeys): new. Call that always after the former clean_key invocations. -- Note that the clean_all_subkeys function will later be extended. Signed-off-by: Werner Koch <wk@gnupg.org>
Diffstat (limited to 'g10/key-clean.c')
-rw-r--r--g10/key-clean.c29
1 files changed, 24 insertions, 5 deletions
diff --git a/g10/key-clean.c b/g10/key-clean.c
index d022ff44d..10478a46e 100644
--- a/g10/key-clean.c
+++ b/g10/key-clean.c
@@ -383,15 +383,14 @@ clean_one_uid (ctrl_t ctrl, kbnode_t keyblock, kbnode_t uidnode,
/* NB: This function marks the deleted nodes only and the caller is
- * responsible to skip or remove them. */
+ * responsible to skip or remove them. Needs to be called after a
+ * merge_keys_and_selfsig(). */
void
-clean_key (ctrl_t ctrl, kbnode_t keyblock, int noisy, int self_only,
- int *uids_cleaned, int *sigs_cleaned)
+clean_all_uids (ctrl_t ctrl, kbnode_t keyblock, int noisy, int self_only,
+ int *uids_cleaned, int *sigs_cleaned)
{
kbnode_t node;
- merge_keys_and_selfsig (ctrl, keyblock);
-
for (node = keyblock->next;
node && !(node->pkt->pkttype == PKT_PUBLIC_SUBKEY
|| node->pkt->pkttype == PKT_SECRET_SUBKEY);
@@ -406,6 +405,26 @@ clean_key (ctrl_t ctrl, kbnode_t keyblock, int noisy, int self_only,
* allowed are of class 0x18 and 0x28. */
log_assert (!node || (node->pkt->pkttype == PKT_PUBLIC_SUBKEY
|| node->pkt->pkttype == PKT_SECRET_SUBKEY));
+}
+
+
+/* This function only marks the deleted nodes and the caller is
+ * responsible to skip or remove them. Needs to be called after a
+ * merge_keys_and_selfsig. */
+void
+clean_all_subkeys (ctrl_t ctrl, kbnode_t keyblock, int noisy,
+ int *subkeys_cleaned, int *sigs_cleaned)
+{
+ kbnode_t node;
+
+ for (node = keyblock->next; node; node = node->next)
+ if (!is_deleted_kbnode (node)
+ && (node->pkt->pkttype == PKT_PUBLIC_SUBKEY
+ || node->pkt->pkttype == PKT_SECRET_SUBKEY))
+ break;
+
+ /* Remove bogus subkey binding signatures: The only signatures
+ * allowed are of class 0x18 and 0x28. */
for (; node; node = node->next)
{
if (is_deleted_kbnode (node))