mirror of
https://github.com/isc-projects/bind9.git
synced 2026-05-28 04:34:54 -04:00
AMTRELAY type 0 presentation format handling was wrong
RFC 8777 specifies a placeholder value of "." for the gateway field
when the gateway type is 0 (no gateway).
(cherry picked from commit ae484d4501)
This commit is contained in:
parent
b006b11e51
commit
b6d9d4f7a6
8 changed files with 30 additions and 28 deletions
|
|
@ -13,5 +13,5 @@ $TTL 600
|
|||
@ SOA ns hostmaster 2011012708 3600 1200 604800 1200
|
||||
NS ns
|
||||
ns A 192.0.2.1
|
||||
bad ATMRELAY 0 0 0
|
||||
bad AMTRELAY 0 0 0 .
|
||||
bad CNAME @
|
||||
|
|
@ -11,8 +11,8 @@ aaaa01.example. 3600 IN AAAA ::1
|
|||
aaaa02.example. 3600 IN AAAA fd92:7065:b8e:ffff::5
|
||||
afsdb01.example. 3600 IN AFSDB 0 hostname.example.
|
||||
afsdb02.example. 3600 IN AFSDB 65535 .
|
||||
amtrelay01.example. 3600 IN AMTRELAY 0 0 0
|
||||
amtrelay02.example. 3600 IN AMTRELAY 0 1 0
|
||||
amtrelay01.example. 3600 IN AMTRELAY 0 0 0 .
|
||||
amtrelay02.example. 3600 IN AMTRELAY 0 1 0 .
|
||||
amtrelay03.example. 3600 IN AMTRELAY 0 0 1 0.0.0.0
|
||||
amtrelay04.example. 3600 IN AMTRELAY 0 0 2 ::
|
||||
amtrelay05.example. 3600 IN AMTRELAY 0 0 3 example.net.
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ aaaa01.example8. 3600 IN AAAA ::1
|
|||
aaaa02.example8. 3600 IN AAAA fd92:7065:b8e:ffff::5
|
||||
afsdb01.example8. 3600 IN AFSDB 0 hostname.example8.
|
||||
afsdb02.example8. 3600 IN AFSDB 65535 .
|
||||
amtrelay01.example8. 3600 IN AMTRELAY 0 0 0
|
||||
amtrelay02.example8. 3600 IN AMTRELAY 0 1 0
|
||||
amtrelay01.example8. 3600 IN AMTRELAY 0 0 0 .
|
||||
amtrelay02.example8. 3600 IN AMTRELAY 0 1 0 .
|
||||
amtrelay03.example8. 3600 IN AMTRELAY 0 0 1 0.0.0.0
|
||||
amtrelay04.example8. 3600 IN AMTRELAY 0 0 2 ::
|
||||
amtrelay05.example8. 3600 IN AMTRELAY 0 0 3 example.net.
|
||||
|
|
|
|||
|
|
@ -487,8 +487,8 @@ doa01 DOA ( 1234567890 1234567890 1 "image/gif"
|
|||
doa02 DOA 0 1 2 "" aHR0cHM6Ly93d3cuaXNjLm9yZy8=
|
||||
|
||||
; type 260
|
||||
amtrelay01 AMTRELAY 0 0 0
|
||||
amtrelay02 AMTRELAY 0 1 0
|
||||
amtrelay01 AMTRELAY 0 0 0 .
|
||||
amtrelay02 AMTRELAY 0 1 0 .
|
||||
amtrelay03 AMTRELAY 0 0 1 0.0.0.0
|
||||
amtrelay04 AMTRELAY 0 0 2 ::
|
||||
amtrelay05 AMTRELAY 0 0 3 example.net.
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ aaaa01.example. 3600 IN AAAA ::1
|
|||
aaaa02.example. 3600 IN AAAA fd92:7065:b8e:ffff::5
|
||||
afsdb01.example. 3600 IN AFSDB 0 hostname.example.
|
||||
afsdb02.example. 3600 IN AFSDB 65535 .
|
||||
amtrelay01.example. 3600 IN AMTRELAY 0 0 0
|
||||
amtrelay02.example. 3600 IN AMTRELAY 0 1 0
|
||||
amtrelay01.example. 3600 IN AMTRELAY 0 0 0 .
|
||||
amtrelay02.example. 3600 IN AMTRELAY 0 1 0 .
|
||||
amtrelay03.example. 3600 IN AMTRELAY 0 0 1 0.0.0.0
|
||||
amtrelay04.example. 3600 IN AMTRELAY 0 0 2 ::
|
||||
amtrelay05.example. 3600 IN AMTRELAY 0 0 3 example.net.
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ aaaa01.example. 3600 IN AAAA ::1
|
|||
aaaa02.example. 3600 IN AAAA fd92:7065:b8e:ffff::5
|
||||
afsdb01.example. 3600 IN AFSDB 0 hostname.example.
|
||||
afsdb02.example. 3600 IN AFSDB 65535 .
|
||||
amtrelay01.example. 3600 IN AMTRELAY 0 0 0
|
||||
amtrelay02.example. 3600 IN AMTRELAY 0 1 0
|
||||
amtrelay01.example. 3600 IN AMTRELAY 0 0 0 .
|
||||
amtrelay02.example. 3600 IN AMTRELAY 0 1 0 .
|
||||
amtrelay03.example. 3600 IN AMTRELAY 0 0 1 0.0.0.1
|
||||
amtrelay04.example. 3600 IN AMTRELAY 0 0 2 ::
|
||||
amtrelay05.example. 3600 IN AMTRELAY 0 0 3 example.net.
|
||||
|
|
|
|||
|
|
@ -68,21 +68,22 @@ fromtext_amtrelay(ARGS_FROMTEXT) {
|
|||
RETERR(uint8_tobuffer(token.value.as_ulong | (discovery << 7), target));
|
||||
gateway = token.value.as_ulong;
|
||||
|
||||
if (gateway == 0) {
|
||||
return ISC_R_SUCCESS;
|
||||
}
|
||||
/*
|
||||
* Gateway (must exist).
|
||||
*/
|
||||
RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
|
||||
false));
|
||||
|
||||
if (gateway > 3) {
|
||||
return ISC_R_NOTIMPLEMENTED;
|
||||
}
|
||||
|
||||
/*
|
||||
* Gateway.
|
||||
*/
|
||||
RETERR(isc_lex_getmastertoken(lexer, &token, isc_tokentype_string,
|
||||
false));
|
||||
|
||||
switch (gateway) {
|
||||
case 0:
|
||||
if (strcmp(DNS_AS_STR(token), ".") != 0) {
|
||||
RETTOK(DNS_R_SYNTAX);
|
||||
}
|
||||
return ISC_R_SUCCESS;
|
||||
case 1:
|
||||
if (inet_pton(AF_INET, DNS_AS_STR(token), &addr) != 1) {
|
||||
RETTOK(DNS_R_BADDOTTEDQUAD);
|
||||
|
|
@ -128,7 +129,6 @@ totext_amtrelay(ARGS_TOTEXT) {
|
|||
unsigned char precedence;
|
||||
unsigned char discovery;
|
||||
unsigned char gateway;
|
||||
const char *space;
|
||||
|
||||
UNUSED(tctx);
|
||||
|
||||
|
|
@ -154,9 +154,8 @@ totext_amtrelay(ARGS_TOTEXT) {
|
|||
gateway = uint8_fromregion(®ion);
|
||||
discovery = gateway >> 7;
|
||||
gateway &= 0x7f;
|
||||
space = (gateway != 0U) ? " " : "";
|
||||
isc_region_consume(®ion, 1);
|
||||
snprintf(buf, sizeof(buf), "%u %u%s", discovery, gateway, space);
|
||||
snprintf(buf, sizeof(buf), "%u %u ", discovery, gateway);
|
||||
RETERR(str_totext(buf, target));
|
||||
|
||||
/*
|
||||
|
|
@ -164,7 +163,8 @@ totext_amtrelay(ARGS_TOTEXT) {
|
|||
*/
|
||||
switch (gateway) {
|
||||
case 0:
|
||||
break;
|
||||
return str_totext(".", target);
|
||||
|
||||
case 1:
|
||||
return inet_totext(AF_INET, tctx->flags, ®ion, target);
|
||||
|
||||
|
|
|
|||
|
|
@ -1024,11 +1024,13 @@ ISC_RUN_TEST_IMPL(atma) {
|
|||
ISC_RUN_TEST_IMPL(amtrelay) {
|
||||
text_ok_t text_ok[] = {
|
||||
TEXT_INVALID(""), TEXT_INVALID("0"), TEXT_INVALID("0 0"),
|
||||
TEXT_INVALID("0 0 0"),
|
||||
/* gateway type 0 */
|
||||
TEXT_VALID("0 0 0"), TEXT_VALID("0 1 0"),
|
||||
TEXT_INVALID("0 2 0"), /* discovery out of range */
|
||||
TEXT_VALID("255 1 0"), /* max precedence */
|
||||
TEXT_INVALID("256 1 0"), /* precedence out of range */
|
||||
TEXT_INVALID("0 0 0 x"), /* bad placeholder */
|
||||
TEXT_VALID("0 0 0 ."), TEXT_VALID("0 1 0 ."),
|
||||
TEXT_INVALID("0 2 0 ."), /* discovery out of range */
|
||||
TEXT_VALID("255 1 0 ."), /* max precedence */
|
||||
TEXT_INVALID("256 1 0 ."), /* precedence out of range */
|
||||
|
||||
/* IPv4 gateway */
|
||||
TEXT_INVALID("0 0 1"), /* no address */
|
||||
|
|
|
|||
Loading…
Reference in a new issue