]> git.ipfire.org Git - thirdparty/bind9.git/commit
Fix "rndc flushname" for longer name server names
authorMichał Kępień <michal@isc.org>
Thu, 30 Jan 2025 06:44:18 +0000 (07:44 +0100)
committerMichał Kępień <michal@isc.org>
Thu, 30 Jan 2025 06:44:18 +0000 (07:44 +0100)
commit64367010f24f91550fe04d4fa1954c56ff772593
tree340cdc978c4afe1b7b1e57a5dff4368be1410a15
parent73997c8161df4f648a3ae4ad9a1a430f02f5f0aa
Fix "rndc flushname" for longer name server names

dns_adb_flushname() calls dns_name_hash() to determine the ADB bucket
number to search for the given name.  Meanwhile, all other functions in
lib/dns/adb.c call dns_name_fullhash() for determining the bucket number
instead.  This discrepancy causes dns_adb_flushname() to have virtually
no chances of actually removing the given name from the ADB if the
name is longer than 16 bytes (since dns_name_hash() only hashes the
first 16 bytes of the name provided to it) - more specifically, the
probability of success for names longer than 16 bytes is inversely
proportional to the number of ADB buckets in use, i.e. 1:1021 at best.

Fix by using dns_name_fullhash() instead of dns_name_hash() in
dns_adb_flushname(), so that the logic for determining the bucket number
that a given name belongs to is consistent throughout lib/dns/adb.c.
bin/tests/system/cacheclean/tests.sh
lib/dns/adb.c