Skip to content

replace RBT usage throughout named

Evan Hunt requested to merge each-cleanup-rbt into main

Replace the use of RBTs to store name-value data throughout BIND:

dns_transport is only concerned with exact matches, so it can use a hash table instead.

the RBTs used for disable-algorithms, disable-ds-digest, synth-from-dnssec, dnssec-must-be-secure, deny-answer-aliases and the exclusion lists for deny-answer-aliases and deny-answer-addresses, can be replaced with QP tries.

QP tries are fast, but a more cumbersome than RBTs in terms of coding; they don't support empty nodes, node data has to explicitly contain a copy of the name, and node data cannot be updated in place. in order to reduce code duplication and ensure that callers don't have to worry about the above, we embed the QP trie in a simple wrapper, dns_nametree, that only has add and covered functions to indicate whether a name is covered by a policy or not.

since the RBTs are used in different ways currently - sometimes storing boolean values, sometimes bit fields, sometimes counters - a name tree can be created with different semantics, chosen by a 'type' parameter, to support all of these uses.

after these changes, RBT's are only used in two places: RPZ and RBTDB.

Edited by Evan Hunt

Merge request reports