mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-09-01 23:25:38 +00:00
Use unknown format when totext() is not implemented for any RDATA (#40317)
This commit is contained in:
7
CHANGES
7
CHANGES
@@ -1,3 +1,10 @@
|
|||||||
|
4187. [func] When any RR type implementation doesn't
|
||||||
|
implement totext() for the RDATA's wire
|
||||||
|
representation and returns ISC_R_NOTIMPLEMENTED,
|
||||||
|
such RDATA is now printed in unknown
|
||||||
|
presentation format (RFC 3597). RR types affected
|
||||||
|
include LOC(29) and APL(42). [RT #40317].
|
||||||
|
|
||||||
4186. [bug] Fixed an RPZ bug where a QNAME would be matched
|
4186. [bug] Fixed an RPZ bug where a QNAME would be matched
|
||||||
against a policy RR with wildcard owner name
|
against a policy RR with wildcard owner name
|
||||||
(trigger) where the QNAME was the wildcard owner
|
(trigger) where the QNAME was the wildcard owner
|
||||||
|
@@ -837,6 +837,7 @@ rdata_totext(dns_rdata_t *rdata, dns_rdata_textctx_t *tctx,
|
|||||||
{
|
{
|
||||||
isc_result_t result = ISC_R_NOTIMPLEMENTED;
|
isc_result_t result = ISC_R_NOTIMPLEMENTED;
|
||||||
isc_boolean_t use_default = ISC_FALSE;
|
isc_boolean_t use_default = ISC_FALSE;
|
||||||
|
unsigned int cur;
|
||||||
|
|
||||||
REQUIRE(rdata != NULL);
|
REQUIRE(rdata != NULL);
|
||||||
REQUIRE(tctx->origin == NULL ||
|
REQUIRE(tctx->origin == NULL ||
|
||||||
@@ -850,10 +851,17 @@ rdata_totext(dns_rdata_t *rdata, dns_rdata_textctx_t *tctx,
|
|||||||
return (ISC_R_SUCCESS);
|
return (ISC_R_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cur = isc_buffer_usedlength(target);
|
||||||
|
|
||||||
TOTEXTSWITCH
|
TOTEXTSWITCH
|
||||||
|
|
||||||
if (use_default)
|
if (use_default || (result == ISC_R_NOTIMPLEMENTED)) {
|
||||||
|
unsigned int u = isc_buffer_usedlength(target);
|
||||||
|
|
||||||
|
INSIST(u >= cur);
|
||||||
|
isc_buffer_subtract(target, u - cur);
|
||||||
result = unknown_totext(rdata, tctx, target);
|
result = unknown_totext(rdata, tctx, target);
|
||||||
|
}
|
||||||
|
|
||||||
return (result);
|
return (result);
|
||||||
}
|
}
|
||||||
|
@@ -480,7 +480,11 @@ totext_loc(ARGS_TOTEXT) {
|
|||||||
|
|
||||||
dns_rdata_toregion(rdata, &sr);
|
dns_rdata_toregion(rdata, &sr);
|
||||||
|
|
||||||
/* version = sr.base[0]; */
|
if (sr.base[0] != 0)
|
||||||
|
return (ISC_R_NOTIMPLEMENTED);
|
||||||
|
|
||||||
|
REQUIRE(rdata->length == 16);
|
||||||
|
|
||||||
size = sr.base[1];
|
size = sr.base[1];
|
||||||
INSIST((size&0x0f) < 10 && (size>>4) < 10);
|
INSIST((size&0x0f) < 10 && (size>>4) < 10);
|
||||||
if ((size&0x0f)> 1)
|
if ((size&0x0f)> 1)
|
||||||
@@ -573,8 +577,11 @@ fromwire_loc(ARGS_FROMWIRE) {
|
|||||||
isc_buffer_activeregion(source, &sr);
|
isc_buffer_activeregion(source, &sr);
|
||||||
if (sr.length < 1)
|
if (sr.length < 1)
|
||||||
return (ISC_R_UNEXPECTEDEND);
|
return (ISC_R_UNEXPECTEDEND);
|
||||||
if (sr.base[0] != 0)
|
if (sr.base[0] != 0) {
|
||||||
return (ISC_R_NOTIMPLEMENTED);
|
/* Treat as unknown. */
|
||||||
|
isc_buffer_forward(source, sr.length);
|
||||||
|
return (mem_tobuffer(target, sr.base, sr.length));
|
||||||
|
}
|
||||||
if (sr.length < 16)
|
if (sr.length < 16)
|
||||||
return (ISC_R_UNEXPECTEDEND);
|
return (ISC_R_UNEXPECTEDEND);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user