]> git.ipfire.org Git - thirdparty/bind9.git/commit
Fix dropped covers field for SIG records in dns_diff_apply
authorOndřej Surý <ondrej@isc.org>
Thu, 16 Apr 2026 09:21:48 +0000 (11:21 +0200)
committerOndřej Surý <ondrej@isc.org>
Fri, 17 Apr 2026 17:24:13 +0000 (19:24 +0200)
commit2c2533774c98bdbffd5f12ca43b6fb2683f25d92
tree86c0f76383eaf56b76ebcf2def074e0f4e69ffda
parent7e5c15ce9b3378d746929bdf65b49258be6a0a6a
Fix dropped covers field for SIG records in dns_diff_apply

rdata_covers() in lib/dns/diff.c discriminated only on
dns_rdatatype_rrsig (46) and returned 0 for the legacy SIG (24), so
the covered-type field was silently discarded on the dynamic-update
and IXFR paths.  Every SIG rdataset was then filed in the zone DB
under typepair (SIG, 0) instead of (SIG, covered_type); a second SIG
add with a different covers but a different TTL collided at that
bucket, tripped DNS_DBADD_EXACTTTL in qpzone, returned
DNS_R_NOTEXACT, and came back to the client as SERVFAIL.

Use dns_rdatatype_issig() here so both SIG and RRSIG carry their
covers through the diff, matching the helper pattern already used in
lib/dns/master.c, lib/ns/xfrout.c, lib/dns/qpcache.c, and the
dns__db_findrdataset() REQUIRE that the surrounding merge request
just relaxed.

(cherry picked from commit 0a5ba57116857779680d76fe4b20e125f3bc3b71)
lib/dns/diff.c