From 28cde5cac25fef330db4f408ef77363392bb4ab4 Mon Sep 17 00:00:00 2001 From: Matthijs Mekking Date: Mon, 13 Feb 2023 16:11:46 +0100 Subject: [PATCH] Suppress duplicate digest types When adding CDS digest types to the kasp structure, check for duplicates. --- lib/dns/kasp.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/lib/dns/kasp.c b/lib/dns/kasp.c index 5a9d907e7c..ed3a1303cc 100644 --- a/lib/dns/kasp.c +++ b/lib/dns/kasp.c @@ -529,14 +529,27 @@ dns_kasp_digests(dns_kasp_t *kasp) { void dns_kasp_adddigest(dns_kasp_t *kasp, dns_dsdigest_t alg) { + dns_kasp_digest_t *digest; + REQUIRE(DNS_KASP_VALID(kasp)); REQUIRE(!kasp->frozen); - if (dst_ds_digest_supported(alg)) { - dns_kasp_digest_t *digest = isc_mem_get(kasp->mctx, - sizeof(*digest)); - digest->digest = alg; - ISC_LINK_INIT(digest, link); - ISC_LIST_APPEND(kasp->digests, digest, link); + /* Suppress unsupported algorithms */ + if (!dst_ds_digest_supported(alg)) { + return; } + + /* Suppress duplicates */ + for (dns_kasp_digest_t *d = ISC_LIST_HEAD(kasp->digests); d != NULL; + d = ISC_LIST_NEXT(d, link)) + { + if (d->digest == alg) { + return; + } + } + + digest = isc_mem_get(kasp->mctx, sizeof(*digest)); + digest->digest = alg; + ISC_LINK_INIT(digest, link); + ISC_LIST_APPEND(kasp->digests, digest, link); }