.. Copyright (C) Internet Systems Consortium, Inc. ("ISC") .. .. SPDX-License-Identifier: MPL-2.0 .. .. This Source Code Form is subject to the terms of the Mozilla Public .. License, v. 2.0. If a copy of the MPL was not distributed with this .. file, you can obtain one at https://mozilla.org/MPL/2.0/. .. .. See the COPYRIGHT file distributed with this work for additional .. information regarding copyright ownership. BIND 9.20.8 ----------- New Features ~~~~~~~~~~~~ - Add support for EDE 20 (Not Authoritative) ``f8a293aa11`` Support was added for EDE codes 20 (Not Authoritative) when client requests recursion (RD) but the server has recursion disabled. RFC 8914 mention EDE 20 should also be returned if the client doesn't have the RD bit set (and recursion is needed) but it doesn't apply for BIND as BIND would try to resolve from the "deepest" referral in AUTHORITY section. For example, if the client asks for "www.isc.org/A" but the server only knows the root domain, it will return NOERROR but no answer for "www.isc.og/A", just the list of other servers to ask. :gl:`#1836` :gl:`!10243` - Add support for EDE 7 and EDE 8. ``27442c3104`` Support was added for EDE codes 7 (Signature Expired) and 8 (Signature Not Yet Valid) which might occur during DNSSEC validation. :gl:`#2715` :gl:`!10242` - Dig can now display the received BADVERS message during negotiation. ``a763080a87`` Dig +showbadvers now displays the received BADVERS message and continues the EDNS version negotiation. Previously to see the BADVERS message +noednsneg had to be specified which terminated the EDNS negotiation. Additionally the specified EDNS value (+edns=value) is now used when making all the initial queries with +trace. i.e EDNS version negotiation will be performed with each server when performing the trace. :gl:`#5234` :gl:`!10247` - Add an rndc command to reset some statistics counters. ``7c4603fc4a`` The new ``reset-stats`` command for ``rndc`` allows some statistics counters to be reset during runtime. At the moment only two "high-water" counters are supported, so the ability to reset them after the initial peaks during the server's "warm-up" phase may be useful for some operators. :gl:`#5251` :gl:`!10335` - Implement -T cookiealwaysvalid. ``1da738ffbb`` When `-T cookiealwaysvalid` is passed to `named`, DNS cookie checks for the incoming queries always pass, given they are structurally correct. :gl:`!10264` Removed Features ~~~~~~~~~~~~~~~~ - Remove dns_qpmulti_lockedread declaration. ``42ab4fce4a`` This function was removed in 6217e434b57bd5d60ed69f792ae9a1a65a008f57 but not from the header file. :gl:`!10314` Feature Changes ~~~~~~~~~~~~~~~ - Carefully check if the server name used for SNI is a hostname. ``92eb6416e5`` Previously the code would not check if the string intended to be used for SNI is a hostname. See also: !9923 :gl:`#5225` :gl:`!10347` Bug Fixes ~~~~~~~~~ - Restore NSEC3 closest encloser lookup improvements. ``ab6fb7b8f2`` A performance improvement for finding the closest encloser when generating authoritative responses from NSEC3 zones was previously reverted after a bug was found that could trigger an assertion failure. ( :gl:`#4460`, #4950, and #5108 for details.) The bug has now been fixed, and the performance improvement has been restored. :gl:`#5204` :gl:`!10034` - Add missing locks when returning addresses. ``2c7594709c`` Add missing locks in dns_zone_getxfrsource4 et al. Addresses CID 468706, 468708, 468741, 468742, 468785, and 468778. Cleanup dns_zone_setxfrsource4 et al to now return void. Remove double copies with dns_zone_getprimaryaddr and dns_zone_getsourceaddr. :gl:`#4933` :gl:`!10259` - Stop caching lack of EDNS support. ``96bb3a1952`` `named` could falsely learn that a server doesn't support EDNS when a spoofed response was received; that subsequently prevented DNSSEC lookups from being made. This has been fixed. :gl:`#3949` :gl:`#5066` - Step() could ignore rollbacks. ``2334b7a371`` The `step()` function (used for stepping to the prececessor or successor of a database node) could overlook a node if there was an rdataset that was marked IGNORE because it had been rolled back, covering an active rdataset under it. :gl:`#5170` :gl:`!10257` - Fix resolver statistics counters for timed out responses. ``1d8334a62a`` When query responses timed out, the resolver could incorrectly increase the regular responses counters, even if no response was received. This has been fixed. :gl:`#5193` :gl:`!10287` - Validating ADB fetches could cause a crash in import_rdataset() ``b0c6af6ad7`` Previously, in some cases, the resolver could return rdatasets of type CNAME or DNAME without the result code being set to `DNS_R_CNAME` or `DNS_R_DNAME`. This could trigger an assertion failure in the ADB. The resolver error has been fixed. :gl:`#5201` :gl:`!10329` - Nested DNS validation could cause assertion failure. ``6bf4390f25`` When multiple nested DNS validations were destroyed out of order, the EDE context could be freed before all EDE codes were copied, which could cause an assertion failure. This has been fixed. :gl:`#5213` :gl:`!10366` - [9.20] Wait for memory reclamation to finish in named-checkconf. ``9986dad2dc`` Previously, when named-checkzone loaded the zone to the QP database, the delayed memory reclamation could cause an assertion check on exit. This has been fixed. :gl:`#5220` :gl:`!10307` - Ensure max-clients-per-query is at least clients-per-query. ``8f78219cc1`` If the `max-clients-per-query` option is set to a lower value than `clients-per-query`, the value is adjusted to match `clients-per-query`. :gl:`#5224` :gl:`!10244` - Fix handling of revoked keys. ``a347273b9c`` When a key is revoked, its key ID changes due to the inclusion of the "revoked" flag. A collision between this changed key ID and an unrelated public-only key could cause a crash in `dnssec-signzone`. :gl:`#5231` :gl:`!10256` - Fix adbname reference. ``7ebcc54d3b`` Call `dns_adbname_ref` before calling `dns_resolver_createfetch` to ensure `adbname->name` remains stable for the life of the fetch. :gl:`#5239` :gl:`!10303` - Fix write after free in validator code. ``5de1b3ba3c`` Raw integer pointers were being used for the validator's nvalidations and nfails values but the memory holding them could be freed before they ceased to be used. Use reference counted counters instead. :gl:`#5239` :gl:`!10300` - Don't enforce NOAUTH/NOCONF flags in DNSKEYs. ``5d126d8081`` All DNSKEY keys are able to authenticate. The `DNS_KEYTYPE_NOAUTH` (and `DNS_KEYTYPE_NOCONF`) flags were defined for the KEY rdata type, and are not applicable to DNSKEY. Previously, however, because the DNSKEY implementation was built on top of KEY, the `_NOAUTH` flag prevented authentication in DNSKEYs as well. This has been corrected. :gl:`#5240` :gl:`!10315` - Fix several small DNSSEC timing issues. ``3a78a4c288`` The following small issues related to `dnssec-policy` have been fixed: - In some cases the key manager inside BIND 9 could run every hour, while it could have run less often. - While `CDS` and `CDNSKEY` records will be removed correctly from the zone when the corresponding `DS` record needs to be updated, the expected timing metadata when this will happen was never set. - There were a couple of cases where the safety intervals are added inappropriately, delaying key rollovers longer than necessary. - If you have identical `keys` in your `dnssec-policy`, they may be retired inappropriately. Note that having keys with identical properties is discouraged in all cases. :gl:`#5242` :gl:`!10301` - Copy __FILE__ when allocating memory. ``59635e33d0`` When allocating memory under -m trace|record, the __FILE__ pointer is stored, so it can be printed out later in order to figure out in which file an allocation leaked. (among others, like the line number). However named crashes when called with -m record and using a plugin leaking memory. The reason is that plugins are unloaded earlier than when the leaked allocations are dumped (obviously, as it's done as late as possible). In such circumstances, `__FILE__` is dangling because the dynamically loaded library (the plugin) is not in memory anymore. Fix the crash by systematically copying the `__FILE__` string instead of copying the pointer. Of course, this make each allocation to consume a bit more memory (and longer, as it needs to calculate the length of `__FILE__`) but this occurs only under -m trace|record debugging flags. :gl:`!10336` - Fix invalid cache-line padding for qpcache buckets. ``4297ae4795`` The isc_queue_t was missing in the calculation of the required padding size inside the qpcache bucket structure. :gl:`!10317`