X-Git-Url: http://the.earth.li/gitweb/?a=blobdiff_plain;f=cleankey.c;h=c7a69be28e78d2f124acb6a880573ccdcc429e32;hb=2708d5a06ad2ef872ea89aca822328f98a86e7cb;hp=fe24c3b6a31a7502de8554ce12bf692b3d18dbb5;hpb=f063495a9a479e094216875001e3e006344eebcd;p=onak.git diff --git a/cleankey.c b/cleankey.c index fe24c3b..c7a69be 100644 --- a/cleankey.c +++ b/cleankey.c @@ -239,26 +239,37 @@ int clean_large_packets(struct openpgp_publickey *key) */ int cleankeys(struct openpgp_publickey **keys, uint64_t policies) { - struct openpgp_publickey *curkey; + struct openpgp_publickey **curkey, *tmp; int changed = 0, count = 0; if (keys == NULL) return 0; - curkey = *keys; - while (curkey != NULL) { + curkey = keys; + while (*curkey != NULL) { + if (policies & ONAK_CLEAN_DROP_V3_KEYS) { + if ((*curkey)->publickey->data[0] < 4) { + /* Remove the key from the list */ + tmp = *curkey; + *curkey = tmp->next; + tmp->next = NULL; + free_publickey(tmp); + changed++; + continue; + } + } if (policies & ONAK_CLEAN_LARGE_PACKETS) { - count += clean_large_packets(curkey); + count += clean_large_packets(*curkey); } - count += dedupuids(curkey); - count += dedupsubkeys(curkey); + count += dedupuids(*curkey); + count += dedupsubkeys(*curkey); if (policies & ONAK_CLEAN_CHECK_SIGHASH) { - count += clean_key_sighashes(curkey); + count += clean_key_sighashes(*curkey); } if (count > 0) { changed++; } - curkey = curkey->next; + curkey = &(*curkey)->next; } return changed;