mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-31 14:35:26 +00:00
Compress zone transfers properly
After change 5995, zone transfers were using a small compression context that only had space for the first few dozen names in each message. They now use a large compression context with enough space for every name.
This commit is contained in:
6
CHANGES
6
CHANGES
@@ -1,3 +1,9 @@
|
||||
6032. [bug] After change 5995, zone transfers were using a small
|
||||
compression context that only had space for the first
|
||||
few dozen names in each message. They now use a large
|
||||
compression context with enough space for every name.
|
||||
[GL #3706]
|
||||
|
||||
6031. [bug] Move the "final reference detached" log message
|
||||
from dns_zone unit to the DEBUG(1) log level.
|
||||
[GL #3707]
|
||||
|
@@ -52,7 +52,6 @@ Bug Fixes
|
||||
10 to 100 to accomodate for some browsers that send more that 10
|
||||
headers by default. :gl:`#3670`
|
||||
|
||||
|
||||
- Copy TLS identifier when setting up primaries for catalog member
|
||||
zones. :gl:`#3638`
|
||||
|
||||
@@ -64,6 +63,10 @@ Bug Fixes
|
||||
:iscman:`named-checkzone` tool from superfluously logging this message
|
||||
in non-debug mode. :gl:`#3707`
|
||||
|
||||
- The new name compression code in BIND 9.19.7 was not compressing
|
||||
names in zone transfers that should have been compressed, so zone
|
||||
transfers were larger than before. :gl:`#3706`
|
||||
|
||||
Known Issues
|
||||
~~~~~~~~~~~~
|
||||
|
||||
|
@@ -58,9 +58,10 @@ ISC_LANG_BEGINDECLS
|
||||
* few dozen names in the hash set. (We can't actually use every slot because
|
||||
* space is reserved for performance reasons.) For large messages, the number
|
||||
* of names is limited by the minimum size of an RR (owner, type, class, ttl,
|
||||
* length) which is 16 bytes when the owner has a new 3-character label
|
||||
* before the compressed zone name. Divide the maximum compression offset
|
||||
* 0x3FFF by 16 and you get roughly 1024.
|
||||
* length) which is 12 bytes - call it 16 bytes to make space for a new label.
|
||||
* Divide the maximum compression offset 0x4000 by 16 and you get 0x400 == 1024.
|
||||
* In practice, the root zone (for example) uses less than 200 distinct names
|
||||
* per message.
|
||||
*/
|
||||
enum {
|
||||
DNS_COMPRESS_SMALLBITS = 6,
|
||||
|
@@ -1527,7 +1527,8 @@ sendstream(xfrout_ctx_t *xfr) {
|
||||
|
||||
if (is_tcp) {
|
||||
isc_region_t used;
|
||||
dns_compress_init(&cctx, xfr->mctx, DNS_COMPRESS_CASE);
|
||||
dns_compress_init(&cctx, xfr->mctx,
|
||||
DNS_COMPRESS_CASE | DNS_COMPRESS_LARGE);
|
||||
cleanup_cctx = true;
|
||||
CHECK(dns_message_renderbegin(msg, &cctx, &xfr->txbuf));
|
||||
CHECK(dns_message_rendersection(msg, DNS_SECTION_QUESTION, 0));
|
||||
|
Reference in New Issue
Block a user