replace RBT usage throughout named
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.