mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-24 19:18:50 +00:00
remove the 'name_coff' parameter in dns_name_towire()
this parameter was added as a (minor) optimization for cases where dns_name_towire() is run repeatedly with the same compression context, as when rendering all of the rdatas in an rdataset. it is currently only used in one place. we now simplify the interface by removing the extra parameter. the compression offset value is now part of the compression context, and can be activated when needed by calling dns_compress_setmultiuse(). multiuse mode is automatically deactivated by any subsequent call to dns_compress_permitted().
This commit is contained in:
parent
1d7a9ebeda
commit
2edefbad4a
@ -57,6 +57,7 @@ dns_compress_init(dns_compress_t *cctx, isc_mem_t *mctx,
|
|||||||
.mctx = mctx,
|
.mctx = mctx,
|
||||||
.mask = mask,
|
.mask = mask,
|
||||||
.set = set,
|
.set = set,
|
||||||
|
.coff = 0xffff,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,6 +70,23 @@ dns_compress_invalidate(dns_compress_t *cctx) {
|
|||||||
*cctx = (dns_compress_t){ 0 };
|
*cctx = (dns_compress_t){ 0 };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
dns_compress_setmultiuse(dns_compress_t *cctx, bool multi) {
|
||||||
|
REQUIRE(CCTX_VALID(cctx));
|
||||||
|
if (multi) {
|
||||||
|
cctx->flags |= DNS_COMPRESS_MULTIUSE;
|
||||||
|
} else {
|
||||||
|
cctx->flags &= ~DNS_COMPRESS_MULTIUSE;
|
||||||
|
}
|
||||||
|
cctx->coff = 0xffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
dns_compress_getmultiuse(dns_compress_t *cctx) {
|
||||||
|
REQUIRE(CCTX_VALID(cctx));
|
||||||
|
return (cctx->flags & DNS_COMPRESS_MULTIUSE) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
dns_compress_setpermitted(dns_compress_t *cctx, bool permitted) {
|
dns_compress_setpermitted(dns_compress_t *cctx, bool permitted) {
|
||||||
REQUIRE(CCTX_VALID(cctx));
|
REQUIRE(CCTX_VALID(cctx));
|
||||||
@ -77,6 +95,7 @@ dns_compress_setpermitted(dns_compress_t *cctx, bool permitted) {
|
|||||||
} else {
|
} else {
|
||||||
cctx->flags &= ~DNS_COMPRESS_PERMITTED;
|
cctx->flags &= ~DNS_COMPRESS_PERMITTED;
|
||||||
}
|
}
|
||||||
|
dns_compress_setmultiuse(cctx, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
@ -75,6 +75,7 @@ enum dns_compress_flags {
|
|||||||
DNS_COMPRESS_LARGE = 0x00000004U,
|
DNS_COMPRESS_LARGE = 0x00000004U,
|
||||||
/* can toggle while rendering a message */
|
/* can toggle while rendering a message */
|
||||||
DNS_COMPRESS_PERMITTED = 0x00000008U,
|
DNS_COMPRESS_PERMITTED = 0x00000008U,
|
||||||
|
DNS_COMPRESS_MULTIUSE = 0x00000010U,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -91,6 +92,7 @@ struct dns_compress {
|
|||||||
dns_compress_flags_t flags;
|
dns_compress_flags_t flags;
|
||||||
uint16_t mask;
|
uint16_t mask;
|
||||||
uint16_t count;
|
uint16_t count;
|
||||||
|
uint16_t coff;
|
||||||
isc_mem_t *mctx;
|
isc_mem_t *mctx;
|
||||||
dns_compress_slot_t *set;
|
dns_compress_slot_t *set;
|
||||||
dns_compress_slot_t smallset[1 << DNS_COMPRESS_SMALLBITS];
|
dns_compress_slot_t smallset[1 << DNS_COMPRESS_SMALLBITS];
|
||||||
@ -140,11 +142,36 @@ dns_compress_invalidate(dns_compress_t *cctx);
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
void
|
void
|
||||||
|
dns_compress_setmultiuse(dns_compress_t *cctx, bool multi);
|
||||||
|
/*%<
|
||||||
|
* Indicates this compression context is to be used for
|
||||||
|
* multiple calls to dns_name_towire(), for example when
|
||||||
|
* rendering the rdata in an rdataset. This causes the
|
||||||
|
* compression offset to be reusable across calls.
|
||||||
|
*
|
||||||
|
* Requires:
|
||||||
|
*\li 'cctx' is not NULL.
|
||||||
|
*/
|
||||||
|
|
||||||
|
bool
|
||||||
|
dns_compress_getmultiuse(dns_compress_t *cctx);
|
||||||
|
|
||||||
|
/*%<
|
||||||
|
* Find out whether multiuse is enabled.
|
||||||
|
*
|
||||||
|
* Requires:
|
||||||
|
*\li 'cctx' to be initialized.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
*\li allowed compression bitmap.
|
||||||
|
*/
|
||||||
|
void
|
||||||
dns_compress_setpermitted(dns_compress_t *cctx, bool permitted);
|
dns_compress_setpermitted(dns_compress_t *cctx, bool permitted);
|
||||||
|
|
||||||
/*%<
|
/*%<
|
||||||
* Sets whether compression is allowed, according to RFC 3597.
|
* Sets whether compression is allowed, according to RFC 3597.
|
||||||
* This can vary depending on the rdata type.
|
* This can vary depending on the rdata type. This will also
|
||||||
|
* reset multiuse to false.
|
||||||
*
|
*
|
||||||
* Requires:
|
* Requires:
|
||||||
*\li 'cctx' to be initialized.
|
*\li 'cctx' to be initialized.
|
||||||
|
@ -768,7 +768,7 @@ dns_name_fromwire(dns_name_t *name, isc_buffer_t *source, dns_decompress_t dctx,
|
|||||||
|
|
||||||
isc_result_t
|
isc_result_t
|
||||||
dns_name_towire(const dns_name_t *name, dns_compress_t *cctx,
|
dns_name_towire(const dns_name_t *name, dns_compress_t *cctx,
|
||||||
isc_buffer_t *target, uint16_t *comp_offsetp);
|
isc_buffer_t *target);
|
||||||
/*%<
|
/*%<
|
||||||
* Convert 'name' into wire format, compressing it as specified by the
|
* Convert 'name' into wire format, compressing it as specified by the
|
||||||
* compression context 'cctx', and storing the result in 'target'.
|
* compression context 'cctx', and storing the result in 'target'.
|
||||||
|
@ -1436,8 +1436,8 @@ root_label:;
|
|||||||
|
|
||||||
isc_result_t
|
isc_result_t
|
||||||
dns_name_towire(const dns_name_t *name, dns_compress_t *cctx,
|
dns_name_towire(const dns_name_t *name, dns_compress_t *cctx,
|
||||||
isc_buffer_t *target, uint16_t *name_coff) {
|
isc_buffer_t *target) {
|
||||||
bool compress;
|
bool compress, multi;
|
||||||
unsigned int here;
|
unsigned int here;
|
||||||
unsigned int prefix_length;
|
unsigned int prefix_length;
|
||||||
unsigned int suffix_coff;
|
unsigned int suffix_coff;
|
||||||
@ -1453,16 +1453,17 @@ dns_name_towire(const dns_name_t *name, dns_compress_t *cctx,
|
|||||||
|
|
||||||
compress = !name->attributes.nocompress &&
|
compress = !name->attributes.nocompress &&
|
||||||
dns_compress_getpermitted(cctx);
|
dns_compress_getpermitted(cctx);
|
||||||
|
multi = compress && dns_compress_getmultiuse(cctx);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Write a compression pointer directly if the caller passed us
|
* Write a compression pointer directly if the caller passed us
|
||||||
* a pointer to this name's offset that we saved previously.
|
* a pointer to this name's offset that we saved previously.
|
||||||
*/
|
*/
|
||||||
if (compress && name_coff != NULL && *name_coff < 0x4000) {
|
if (multi && cctx->coff < 0x4000) {
|
||||||
if (isc_buffer_availablelength(target) < 2) {
|
if (isc_buffer_availablelength(target) < 2) {
|
||||||
return ISC_R_NOSPACE;
|
return ISC_R_NOSPACE;
|
||||||
}
|
}
|
||||||
isc_buffer_putuint16(target, *name_coff | 0xc000);
|
isc_buffer_putuint16(target, cctx->coff | 0xc000);
|
||||||
return ISC_R_SUCCESS;
|
return ISC_R_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1483,8 +1484,8 @@ dns_name_towire(const dns_name_t *name, dns_compress_t *cctx,
|
|||||||
* it isn't too short for compression to help (i.e. it's the root)
|
* it isn't too short for compression to help (i.e. it's the root)
|
||||||
*/
|
*/
|
||||||
here = isc_buffer_usedlength(target);
|
here = isc_buffer_usedlength(target);
|
||||||
if (name_coff != NULL && here < 0x4000 && prefix_length > 1) {
|
if (multi && here < 0x4000 && prefix_length > 1) {
|
||||||
*name_coff = (uint16_t)here;
|
cctx->coff = (uint16_t)here;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (prefix_length > 0) {
|
if (prefix_length > 0) {
|
||||||
@ -1496,8 +1497,8 @@ dns_name_towire(const dns_name_t *name, dns_compress_t *cctx,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (suffix_coff > 0) {
|
if (suffix_coff > 0) {
|
||||||
if (name_coff != NULL && prefix_length == 0) {
|
if (multi && prefix_length == 0) {
|
||||||
*name_coff = suffix_coff;
|
cctx->coff = suffix_coff;
|
||||||
}
|
}
|
||||||
if (isc_buffer_availablelength(target) < 2) {
|
if (isc_buffer_availablelength(target) < 2) {
|
||||||
return ISC_R_NOSPACE;
|
return ISC_R_NOSPACE;
|
||||||
|
@ -360,7 +360,7 @@ dns_ncache_towire(dns_rdataset_t *rdataset, dns_compress_t *cctx,
|
|||||||
* Write the name.
|
* Write the name.
|
||||||
*/
|
*/
|
||||||
dns_compress_setpermitted(cctx, true);
|
dns_compress_setpermitted(cctx, true);
|
||||||
result = dns_name_towire(&name, cctx, target, NULL);
|
result = dns_name_towire(&name, cctx, target);
|
||||||
if (result != ISC_R_SUCCESS) {
|
if (result != ISC_R_SUCCESS) {
|
||||||
goto rollback;
|
goto rollback;
|
||||||
}
|
}
|
||||||
|
@ -335,7 +335,7 @@ towire_any_tsig(ARGS_TOWIRE) {
|
|||||||
dns_rdata_toregion(rdata, &sr);
|
dns_rdata_toregion(rdata, &sr);
|
||||||
dns_name_init(&name);
|
dns_name_init(&name);
|
||||||
dns_name_fromregion(&name, &sr);
|
dns_name_fromregion(&name, &sr);
|
||||||
RETERR(dns_name_towire(&name, cctx, target, NULL));
|
RETERR(dns_name_towire(&name, cctx, target));
|
||||||
isc_region_consume(&sr, name_length(&name));
|
isc_region_consume(&sr, name_length(&name));
|
||||||
return mem_tobuffer(target, sr.base, sr.length);
|
return mem_tobuffer(target, sr.base, sr.length);
|
||||||
}
|
}
|
||||||
|
@ -146,7 +146,7 @@ towire_ch_a(ARGS_TOWIRE) {
|
|||||||
|
|
||||||
dns_name_fromregion(&name, &sregion);
|
dns_name_fromregion(&name, &sregion);
|
||||||
isc_region_consume(&sregion, name_length(&name));
|
isc_region_consume(&sregion, name_length(&name));
|
||||||
RETERR(dns_name_towire(&name, cctx, target, NULL));
|
RETERR(dns_name_towire(&name, cctx, target));
|
||||||
|
|
||||||
isc_buffer_availableregion(target, &tregion);
|
isc_buffer_availableregion(target, &tregion);
|
||||||
if (tregion.length < 2) {
|
if (tregion.length < 2) {
|
||||||
|
@ -141,7 +141,7 @@ towire_afsdb(ARGS_TOWIRE) {
|
|||||||
dns_name_init(&name);
|
dns_name_init(&name);
|
||||||
dns_name_fromregion(&name, &sr);
|
dns_name_fromregion(&name, &sr);
|
||||||
|
|
||||||
return dns_name_towire(&name, cctx, target, NULL);
|
return dns_name_towire(&name, cctx, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -91,7 +91,7 @@ towire_cname(ARGS_TOWIRE) {
|
|||||||
dns_rdata_toregion(rdata, ®ion);
|
dns_rdata_toregion(rdata, ®ion);
|
||||||
dns_name_fromregion(&name, ®ion);
|
dns_name_fromregion(&name, ®ion);
|
||||||
|
|
||||||
return dns_name_towire(&name, cctx, target, NULL);
|
return dns_name_towire(&name, cctx, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -91,7 +91,7 @@ towire_dname(ARGS_TOWIRE) {
|
|||||||
dns_rdata_toregion(rdata, ®ion);
|
dns_rdata_toregion(rdata, ®ion);
|
||||||
dns_name_fromregion(&name, ®ion);
|
dns_name_fromregion(&name, ®ion);
|
||||||
|
|
||||||
return dns_name_towire(&name, cctx, target, NULL);
|
return dns_name_towire(&name, cctx, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -90,7 +90,7 @@ towire_mb(ARGS_TOWIRE) {
|
|||||||
dns_rdata_toregion(rdata, ®ion);
|
dns_rdata_toregion(rdata, ®ion);
|
||||||
dns_name_fromregion(&name, ®ion);
|
dns_name_fromregion(&name, ®ion);
|
||||||
|
|
||||||
return dns_name_towire(&name, cctx, target, NULL);
|
return dns_name_towire(&name, cctx, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -90,7 +90,7 @@ towire_md(ARGS_TOWIRE) {
|
|||||||
dns_rdata_toregion(rdata, ®ion);
|
dns_rdata_toregion(rdata, ®ion);
|
||||||
dns_name_fromregion(&name, ®ion);
|
dns_name_fromregion(&name, ®ion);
|
||||||
|
|
||||||
return dns_name_towire(&name, cctx, target, NULL);
|
return dns_name_towire(&name, cctx, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -90,7 +90,7 @@ towire_mf(ARGS_TOWIRE) {
|
|||||||
dns_rdata_toregion(rdata, ®ion);
|
dns_rdata_toregion(rdata, ®ion);
|
||||||
dns_name_fromregion(&name, ®ion);
|
dns_name_fromregion(&name, ®ion);
|
||||||
|
|
||||||
return dns_name_towire(&name, cctx, target, NULL);
|
return dns_name_towire(&name, cctx, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -90,7 +90,7 @@ towire_mg(ARGS_TOWIRE) {
|
|||||||
dns_rdata_toregion(rdata, ®ion);
|
dns_rdata_toregion(rdata, ®ion);
|
||||||
dns_name_fromregion(&name, ®ion);
|
dns_name_fromregion(&name, ®ion);
|
||||||
|
|
||||||
return dns_name_towire(&name, cctx, target, NULL);
|
return dns_name_towire(&name, cctx, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -129,12 +129,12 @@ towire_minfo(ARGS_TOWIRE) {
|
|||||||
dns_name_fromregion(&rmail, ®ion);
|
dns_name_fromregion(&rmail, ®ion);
|
||||||
isc_region_consume(®ion, name_length(&rmail));
|
isc_region_consume(®ion, name_length(&rmail));
|
||||||
|
|
||||||
RETERR(dns_name_towire(&rmail, cctx, target, NULL));
|
RETERR(dns_name_towire(&rmail, cctx, target));
|
||||||
|
|
||||||
dns_name_fromregion(&rmail, ®ion);
|
dns_name_fromregion(&rmail, ®ion);
|
||||||
isc_region_consume(®ion, rmail.length);
|
isc_region_consume(®ion, rmail.length);
|
||||||
|
|
||||||
return dns_name_towire(&rmail, cctx, target, NULL);
|
return dns_name_towire(&rmail, cctx, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -90,7 +90,7 @@ towire_mr(ARGS_TOWIRE) {
|
|||||||
dns_rdata_toregion(rdata, ®ion);
|
dns_rdata_toregion(rdata, ®ion);
|
||||||
dns_name_fromregion(&name, ®ion);
|
dns_name_fromregion(&name, ®ion);
|
||||||
|
|
||||||
return dns_name_towire(&name, cctx, target, NULL);
|
return dns_name_towire(&name, cctx, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -165,7 +165,7 @@ towire_mx(ARGS_TOWIRE) {
|
|||||||
dns_name_init(&name);
|
dns_name_init(&name);
|
||||||
dns_name_fromregion(&name, ®ion);
|
dns_name_fromregion(&name, ®ion);
|
||||||
|
|
||||||
return dns_name_towire(&name, cctx, target, NULL);
|
return dns_name_towire(&name, cctx, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -388,7 +388,7 @@ towire_naptr(ARGS_TOWIRE) {
|
|||||||
*/
|
*/
|
||||||
dns_name_init(&name);
|
dns_name_init(&name);
|
||||||
dns_name_fromregion(&name, &sr);
|
dns_name_fromregion(&name, &sr);
|
||||||
return dns_name_towire(&name, cctx, target, NULL);
|
return dns_name_towire(&name, cctx, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -101,7 +101,7 @@ towire_ns(ARGS_TOWIRE) {
|
|||||||
dns_rdata_toregion(rdata, ®ion);
|
dns_rdata_toregion(rdata, ®ion);
|
||||||
dns_name_fromregion(&name, ®ion);
|
dns_name_fromregion(&name, ®ion);
|
||||||
|
|
||||||
return dns_name_towire(&name, cctx, target, NULL);
|
return dns_name_towire(&name, cctx, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -110,7 +110,7 @@ towire_nsec(ARGS_TOWIRE) {
|
|||||||
dns_rdata_toregion(rdata, &sr);
|
dns_rdata_toregion(rdata, &sr);
|
||||||
dns_name_fromregion(&name, &sr);
|
dns_name_fromregion(&name, &sr);
|
||||||
isc_region_consume(&sr, name_length(&name));
|
isc_region_consume(&sr, name_length(&name));
|
||||||
RETERR(dns_name_towire(&name, cctx, target, NULL));
|
RETERR(dns_name_towire(&name, cctx, target));
|
||||||
|
|
||||||
return mem_tobuffer(target, sr.base, sr.length);
|
return mem_tobuffer(target, sr.base, sr.length);
|
||||||
}
|
}
|
||||||
|
@ -173,7 +173,7 @@ towire_nxt(ARGS_TOWIRE) {
|
|||||||
dns_rdata_toregion(rdata, &sr);
|
dns_rdata_toregion(rdata, &sr);
|
||||||
dns_name_fromregion(&name, &sr);
|
dns_name_fromregion(&name, &sr);
|
||||||
isc_region_consume(&sr, name_length(&name));
|
isc_region_consume(&sr, name_length(&name));
|
||||||
RETERR(dns_name_towire(&name, cctx, target, NULL));
|
RETERR(dns_name_towire(&name, cctx, target));
|
||||||
|
|
||||||
return mem_tobuffer(target, sr.base, sr.length);
|
return mem_tobuffer(target, sr.base, sr.length);
|
||||||
}
|
}
|
||||||
|
@ -103,7 +103,7 @@ towire_ptr(ARGS_TOWIRE) {
|
|||||||
dns_rdata_toregion(rdata, ®ion);
|
dns_rdata_toregion(rdata, ®ion);
|
||||||
dns_name_fromregion(&name, ®ion);
|
dns_name_fromregion(&name, ®ion);
|
||||||
|
|
||||||
return dns_name_towire(&name, cctx, target, NULL);
|
return dns_name_towire(&name, cctx, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -130,12 +130,12 @@ towire_rp(ARGS_TOWIRE) {
|
|||||||
dns_name_fromregion(&rmail, ®ion);
|
dns_name_fromregion(&rmail, ®ion);
|
||||||
isc_region_consume(®ion, rmail.length);
|
isc_region_consume(®ion, rmail.length);
|
||||||
|
|
||||||
RETERR(dns_name_towire(&rmail, cctx, target, NULL));
|
RETERR(dns_name_towire(&rmail, cctx, target));
|
||||||
|
|
||||||
dns_name_fromregion(&rmail, ®ion);
|
dns_name_fromregion(&rmail, ®ion);
|
||||||
isc_region_consume(®ion, rmail.length);
|
isc_region_consume(®ion, rmail.length);
|
||||||
|
|
||||||
return dns_name_towire(&rmail, cctx, target, NULL);
|
return dns_name_towire(&rmail, cctx, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -377,7 +377,7 @@ towire_rrsig(ARGS_TOWIRE) {
|
|||||||
dns_name_init(&name);
|
dns_name_init(&name);
|
||||||
dns_name_fromregion(&name, &sr);
|
dns_name_fromregion(&name, &sr);
|
||||||
isc_region_consume(&sr, name_length(&name));
|
isc_region_consume(&sr, name_length(&name));
|
||||||
RETERR(dns_name_towire(&name, cctx, target, NULL));
|
RETERR(dns_name_towire(&name, cctx, target));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Signature.
|
* Signature.
|
||||||
|
@ -138,7 +138,7 @@ towire_rt(ARGS_TOWIRE) {
|
|||||||
dns_name_init(&name);
|
dns_name_init(&name);
|
||||||
dns_name_fromregion(&name, ®ion);
|
dns_name_fromregion(&name, ®ion);
|
||||||
|
|
||||||
return dns_name_towire(&name, cctx, target, NULL);
|
return dns_name_towire(&name, cctx, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -341,7 +341,7 @@ towire_sig(ARGS_TOWIRE) {
|
|||||||
dns_name_init(&name);
|
dns_name_init(&name);
|
||||||
dns_name_fromregion(&name, &sr);
|
dns_name_fromregion(&name, &sr);
|
||||||
isc_region_consume(&sr, name_length(&name));
|
isc_region_consume(&sr, name_length(&name));
|
||||||
RETERR(dns_name_towire(&name, cctx, target, NULL));
|
RETERR(dns_name_towire(&name, cctx, target));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Signature.
|
* Signature.
|
||||||
|
@ -213,11 +213,11 @@ towire_soa(ARGS_TOWIRE) {
|
|||||||
|
|
||||||
dns_name_fromregion(&mname, &sregion);
|
dns_name_fromregion(&mname, &sregion);
|
||||||
isc_region_consume(&sregion, name_length(&mname));
|
isc_region_consume(&sregion, name_length(&mname));
|
||||||
RETERR(dns_name_towire(&mname, cctx, target, NULL));
|
RETERR(dns_name_towire(&mname, cctx, target));
|
||||||
|
|
||||||
dns_name_fromregion(&rname, &sregion);
|
dns_name_fromregion(&rname, &sregion);
|
||||||
isc_region_consume(&sregion, name_length(&rname));
|
isc_region_consume(&sregion, name_length(&rname));
|
||||||
RETERR(dns_name_towire(&rname, cctx, target, NULL));
|
RETERR(dns_name_towire(&rname, cctx, target));
|
||||||
|
|
||||||
isc_buffer_availableregion(target, &tregion);
|
isc_buffer_availableregion(target, &tregion);
|
||||||
if (tregion.length < 20) {
|
if (tregion.length < 20) {
|
||||||
|
@ -117,11 +117,11 @@ towire_talink(ARGS_TOWIRE) {
|
|||||||
|
|
||||||
dns_name_fromregion(&prev, &sregion);
|
dns_name_fromregion(&prev, &sregion);
|
||||||
isc_region_consume(&sregion, name_length(&prev));
|
isc_region_consume(&sregion, name_length(&prev));
|
||||||
RETERR(dns_name_towire(&prev, cctx, target, NULL));
|
RETERR(dns_name_towire(&prev, cctx, target));
|
||||||
|
|
||||||
dns_name_fromregion(&next, &sregion);
|
dns_name_fromregion(&next, &sregion);
|
||||||
isc_region_consume(&sregion, name_length(&next));
|
isc_region_consume(&sregion, name_length(&next));
|
||||||
return dns_name_towire(&next, cctx, target, NULL);
|
return dns_name_towire(&next, cctx, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -320,7 +320,7 @@ towire_tkey(ARGS_TOWIRE) {
|
|||||||
dns_rdata_toregion(rdata, &sr);
|
dns_rdata_toregion(rdata, &sr);
|
||||||
dns_name_init(&name);
|
dns_name_init(&name);
|
||||||
dns_name_fromregion(&name, &sr);
|
dns_name_fromregion(&name, &sr);
|
||||||
RETERR(dns_name_towire(&name, cctx, target, NULL));
|
RETERR(dns_name_towire(&name, cctx, target));
|
||||||
isc_region_consume(&sr, name_length(&name));
|
isc_region_consume(&sr, name_length(&name));
|
||||||
|
|
||||||
return mem_tobuffer(target, sr.base, sr.length);
|
return mem_tobuffer(target, sr.base, sr.length);
|
||||||
|
@ -226,7 +226,7 @@ towire_in_a6(ARGS_TOWIRE) {
|
|||||||
|
|
||||||
dns_name_init(&name);
|
dns_name_init(&name);
|
||||||
dns_name_fromregion(&name, &sr);
|
dns_name_fromregion(&name, &sr);
|
||||||
return dns_name_towire(&name, cctx, target, NULL);
|
return dns_name_towire(&name, cctx, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -120,7 +120,7 @@ towire_in_kx(ARGS_TOWIRE) {
|
|||||||
dns_name_init(&name);
|
dns_name_init(&name);
|
||||||
dns_name_fromregion(&name, ®ion);
|
dns_name_fromregion(&name, ®ion);
|
||||||
|
|
||||||
return dns_name_towire(&name, cctx, target, NULL);
|
return dns_name_towire(&name, cctx, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -95,7 +95,7 @@ towire_in_nsap_ptr(ARGS_TOWIRE) {
|
|||||||
dns_rdata_toregion(rdata, ®ion);
|
dns_rdata_toregion(rdata, ®ion);
|
||||||
dns_name_fromregion(&name, ®ion);
|
dns_name_fromregion(&name, ®ion);
|
||||||
|
|
||||||
return dns_name_towire(&name, cctx, target, NULL);
|
return dns_name_towire(&name, cctx, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -168,7 +168,7 @@ towire_in_px(ARGS_TOWIRE) {
|
|||||||
*/
|
*/
|
||||||
dns_name_init(&name);
|
dns_name_init(&name);
|
||||||
dns_name_fromregion(&name, ®ion);
|
dns_name_fromregion(&name, ®ion);
|
||||||
RETERR(dns_name_towire(&name, cctx, target, NULL));
|
RETERR(dns_name_towire(&name, cctx, target));
|
||||||
isc_region_consume(®ion, name_length(&name));
|
isc_region_consume(®ion, name_length(&name));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -176,7 +176,7 @@ towire_in_px(ARGS_TOWIRE) {
|
|||||||
*/
|
*/
|
||||||
dns_name_init(&name);
|
dns_name_init(&name);
|
||||||
dns_name_fromregion(&name, ®ion);
|
dns_name_fromregion(&name, ®ion);
|
||||||
return dns_name_towire(&name, cctx, target, NULL);
|
return dns_name_towire(&name, cctx, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -191,7 +191,7 @@ towire_in_srv(ARGS_TOWIRE) {
|
|||||||
*/
|
*/
|
||||||
dns_name_init(&name);
|
dns_name_init(&name);
|
||||||
dns_name_fromregion(&name, &sr);
|
dns_name_fromregion(&name, &sr);
|
||||||
return dns_name_towire(&name, cctx, target, NULL);
|
return dns_name_towire(&name, cctx, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -940,7 +940,7 @@ generic_towire_in_svcb(ARGS_TOWIRE) {
|
|||||||
*/
|
*/
|
||||||
dns_name_init(&name);
|
dns_name_init(&name);
|
||||||
dns_name_fromregion(&name, ®ion);
|
dns_name_fromregion(&name, ®ion);
|
||||||
RETERR(dns_name_towire(&name, cctx, target, NULL));
|
RETERR(dns_name_towire(&name, cctx, target));
|
||||||
isc_region_consume(®ion, name_length(&name));
|
isc_region_consume(®ion, name_length(&name));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -247,7 +247,6 @@ towire(dns_rdataset_t *rdataset, const dns_name_t *owner_name,
|
|||||||
struct towire_sort *out = out_fixed;
|
struct towire_sort *out = out_fixed;
|
||||||
dns_fixedname_t fixed;
|
dns_fixedname_t fixed;
|
||||||
dns_name_t *name = NULL;
|
dns_name_t *name = NULL;
|
||||||
uint16_t offset;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Convert 'rdataset' to wire format, compressing names as specified
|
* Convert 'rdataset' to wire format, compressing names as specified
|
||||||
@ -357,7 +356,7 @@ towire(dns_rdataset_t *rdataset, const dns_name_t *owner_name,
|
|||||||
name = dns_fixedname_initname(&fixed);
|
name = dns_fixedname_initname(&fixed);
|
||||||
dns_name_copy(owner_name, name);
|
dns_name_copy(owner_name, name);
|
||||||
dns_rdataset_getownercase(rdataset, name);
|
dns_rdataset_getownercase(rdataset, name);
|
||||||
offset = 0xffff;
|
dns_compress_setmultiuse(cctx, true);
|
||||||
|
|
||||||
name->attributes.nocompress |= owner_name->attributes.nocompress;
|
name->attributes.nocompress |= owner_name->attributes.nocompress;
|
||||||
|
|
||||||
@ -368,15 +367,14 @@ towire(dns_rdataset_t *rdataset, const dns_name_t *owner_name,
|
|||||||
|
|
||||||
rrbuffer = *target;
|
rrbuffer = *target;
|
||||||
dns_compress_setpermitted(cctx, true);
|
dns_compress_setpermitted(cctx, true);
|
||||||
result = dns_name_towire(name, cctx, target, &offset);
|
result = dns_name_towire(name, cctx, target);
|
||||||
if (result != ISC_R_SUCCESS) {
|
if (result != ISC_R_SUCCESS) {
|
||||||
goto rollback;
|
goto rollback;
|
||||||
}
|
}
|
||||||
headlen = sizeof(dns_rdataclass_t) + sizeof(dns_rdatatype_t);
|
headlen = sizeof(dns_rdataclass_t) + sizeof(dns_rdatatype_t);
|
||||||
if (!question) {
|
if (!question) {
|
||||||
headlen += sizeof(dns_ttl_t) + 2;
|
headlen += sizeof(dns_ttl_t) + 2;
|
||||||
} /* XXX 2 for rdata len
|
} /* XXX 2 for rdata len */
|
||||||
*/
|
|
||||||
isc_buffer_availableregion(target, &r);
|
isc_buffer_availableregion(target, &r);
|
||||||
if (r.length < headlen) {
|
if (r.length < headlen) {
|
||||||
result = ISC_R_NOSPACE;
|
result = ISC_R_NOSPACE;
|
||||||
|
@ -2703,7 +2703,7 @@ resquery_send(resquery_t *query) {
|
|||||||
memset(&zr, 0, sizeof(zr));
|
memset(&zr, 0, sizeof(zr));
|
||||||
isc_buffer_init(&zb, zone, sizeof(zone));
|
isc_buffer_init(&zb, zone, sizeof(zone));
|
||||||
dns_compress_setpermitted(&cctx, false);
|
dns_compress_setpermitted(&cctx, false);
|
||||||
result = dns_name_towire(fctx->domain, &cctx, &zb, NULL);
|
result = dns_name_towire(fctx->domain, &cctx, &zb);
|
||||||
if (result == ISC_R_SUCCESS) {
|
if (result == ISC_R_SUCCESS) {
|
||||||
isc_buffer_usedregion(&zb, &zr);
|
isc_buffer_usedregion(&zb, &zr);
|
||||||
}
|
}
|
||||||
@ -9730,7 +9730,7 @@ rctx_logpacket(respctx_t *rctx) {
|
|||||||
dns_compress_init(&cctx, fctx->mctx, 0);
|
dns_compress_init(&cctx, fctx->mctx, 0);
|
||||||
dns_compress_setpermitted(&cctx, false);
|
dns_compress_setpermitted(&cctx, false);
|
||||||
isc_buffer_init(&zb, zone, sizeof(zone));
|
isc_buffer_init(&zb, zone, sizeof(zone));
|
||||||
result = dns_name_towire(fctx->domain, &cctx, &zb, NULL);
|
result = dns_name_towire(fctx->domain, &cctx, &zb);
|
||||||
if (result == ISC_R_SUCCESS) {
|
if (result == ISC_R_SUCCESS) {
|
||||||
isc_buffer_usedregion(&zb, &zr);
|
isc_buffer_usedregion(&zb, &zr);
|
||||||
}
|
}
|
||||||
|
@ -699,7 +699,7 @@ renderend:
|
|||||||
|
|
||||||
isc_buffer_init(&b, zone, sizeof(zone));
|
isc_buffer_init(&b, zone, sizeof(zone));
|
||||||
dns_compress_setpermitted(&cctx, false);
|
dns_compress_setpermitted(&cctx, false);
|
||||||
eresult = dns_name_towire(zo, &cctx, &b, NULL);
|
eresult = dns_name_towire(zo, &cctx, &b);
|
||||||
if (eresult == ISC_R_SUCCESS) {
|
if (eresult == ISC_R_SUCCESS) {
|
||||||
isc_buffer_usedregion(&b, &zr);
|
isc_buffer_usedregion(&b, &zr);
|
||||||
}
|
}
|
||||||
|
@ -80,7 +80,7 @@ main(void) {
|
|||||||
|
|
||||||
for (unsigned int i = 0; i < count; i++) {
|
for (unsigned int i = 0; i < count; i++) {
|
||||||
dns_name_t *name = dns_fixedname_name(&fixedname[i]);
|
dns_name_t *name = dns_fixedname_name(&fixedname[i]);
|
||||||
result = dns_name_towire(name, &cctx, &buf, NULL);
|
result = dns_name_towire(name, &cctx, &buf);
|
||||||
if (result == ISC_R_NOSPACE) {
|
if (result == ISC_R_NOSPACE) {
|
||||||
dns_compress_invalidate(&cctx);
|
dns_compress_invalidate(&cctx);
|
||||||
dns_compress_init(&cctx, mctx, 0);
|
dns_compress_init(&cctx, mctx, 0);
|
||||||
|
@ -187,7 +187,7 @@ ISC_LOOP_TEST_IMPL(dns_dt_send) {
|
|||||||
isc_buffer_init(&zb, zone, sizeof(zone));
|
isc_buffer_init(&zb, zone, sizeof(zone));
|
||||||
dns_compress_init(&cctx, mctx, 0);
|
dns_compress_init(&cctx, mctx, 0);
|
||||||
dns_compress_setpermitted(&cctx, false);
|
dns_compress_setpermitted(&cctx, false);
|
||||||
result = dns_name_towire(zname, &cctx, &zb, NULL);
|
result = dns_name_towire(zname, &cctx, &zb);
|
||||||
assert_int_equal(result, ISC_R_SUCCESS);
|
assert_int_equal(result, ISC_R_SUCCESS);
|
||||||
dns_compress_invalidate(&cctx);
|
dns_compress_invalidate(&cctx);
|
||||||
isc_buffer_usedregion(&zb, &zr);
|
isc_buffer_usedregion(&zb, &zr);
|
||||||
|
@ -148,28 +148,28 @@ compress_test(const dns_name_t *name1, const dns_name_t *name2,
|
|||||||
|
|
||||||
if (rdata) {
|
if (rdata) {
|
||||||
/* RDATA compression */
|
/* RDATA compression */
|
||||||
assert_int_equal(dns_name_towire(name1, cctx, &source, NULL),
|
assert_int_equal(dns_name_towire(name1, cctx, &source),
|
||||||
ISC_R_SUCCESS);
|
ISC_R_SUCCESS);
|
||||||
assert_int_equal(dns_name_towire(name2, cctx, &source, NULL),
|
assert_int_equal(dns_name_towire(name2, cctx, &source),
|
||||||
ISC_R_SUCCESS);
|
ISC_R_SUCCESS);
|
||||||
assert_int_equal(dns_name_towire(name2, cctx, &source, NULL),
|
assert_int_equal(dns_name_towire(name2, cctx, &source),
|
||||||
ISC_R_SUCCESS);
|
ISC_R_SUCCESS);
|
||||||
assert_int_equal(dns_name_towire(name3, cctx, &source, NULL),
|
assert_int_equal(dns_name_towire(name3, cctx, &source),
|
||||||
ISC_R_SUCCESS);
|
ISC_R_SUCCESS);
|
||||||
} else {
|
} else {
|
||||||
/* Owner name compression */
|
/* Owner name compression */
|
||||||
uint16_t offset = 0xffff;
|
dns_compress_setmultiuse(cctx, true);
|
||||||
assert_int_equal(dns_name_towire(name1, cctx, &source, &offset),
|
assert_int_equal(dns_name_towire(name1, cctx, &source),
|
||||||
ISC_R_SUCCESS);
|
ISC_R_SUCCESS);
|
||||||
|
|
||||||
offset = 0xffff;
|
dns_compress_setmultiuse(cctx, true);
|
||||||
assert_int_equal(dns_name_towire(name2, cctx, &source, &offset),
|
assert_int_equal(dns_name_towire(name2, cctx, &source),
|
||||||
ISC_R_SUCCESS);
|
ISC_R_SUCCESS);
|
||||||
assert_int_equal(dns_name_towire(name2, cctx, &source, &offset),
|
assert_int_equal(dns_name_towire(name2, cctx, &source),
|
||||||
ISC_R_SUCCESS);
|
ISC_R_SUCCESS);
|
||||||
|
|
||||||
offset = 0xffff;
|
dns_compress_setmultiuse(cctx, true);
|
||||||
assert_int_equal(dns_name_towire(name3, cctx, &source, &offset),
|
assert_int_equal(dns_name_towire(name3, cctx, &source),
|
||||||
ISC_R_SUCCESS);
|
ISC_R_SUCCESS);
|
||||||
}
|
}
|
||||||
assert_int_equal(source.used, compressed_length);
|
assert_int_equal(source.used, compressed_length);
|
||||||
@ -433,7 +433,8 @@ ISC_RUN_TEST_IMPL(collision) {
|
|||||||
}
|
}
|
||||||
dns_compress_rollback(&cctx, coff);
|
dns_compress_rollback(&cctx, coff);
|
||||||
|
|
||||||
result = dns_name_towire(&name, &cctx, &message, NULL);
|
dns_compress_setmultiuse(&cctx, true);
|
||||||
|
result = dns_name_towire(&name, &cctx, &message);
|
||||||
assert_int_equal(result, ISC_R_SUCCESS);
|
assert_int_equal(result, ISC_R_SUCCESS);
|
||||||
|
|
||||||
/* we must be able to find the name we just added */
|
/* we must be able to find the name we just added */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user