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
deny-answer-aliases and the exclusion lists for
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
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.