mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-23 02:28:55 +00:00
2324. [bug] Fix IPv6 matching against "any;" [RT #17533]
This commit is contained in:
parent
7539c231d4
commit
1fa2ce7eae
2
CHANGES
2
CHANGES
@ -1,3 +1,5 @@
|
|||||||
|
2324. [bug] Fix IPv6 matching against "any;" [RT #17533]
|
||||||
|
|
||||||
2323. [port] tru64: namespace clash. [RT #17547]
|
2323. [port] tru64: namespace clash. [RT #17547]
|
||||||
|
|
||||||
2322. [port] MacOS: work around the limitation of setrlimit()
|
2322. [port] MacOS: work around the limitation of setrlimit()
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
* PERFORMANCE OF THIS SOFTWARE.
|
* PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* $Id: acl.c,v 1.43 2008/01/22 05:37:49 each Exp $ */
|
/* $Id: acl.c,v 1.44 2008/01/27 02:13:34 marka Exp $ */
|
||||||
|
|
||||||
/*! \file */
|
/*! \file */
|
||||||
|
|
||||||
@ -220,6 +220,8 @@ dns_acl_match(const isc_netaddr_t *reqaddr,
|
|||||||
|
|
||||||
/* Found a match. */
|
/* Found a match. */
|
||||||
if (result == ISC_R_SUCCESS && node != NULL) {
|
if (result == ISC_R_SUCCESS && node != NULL) {
|
||||||
|
if (node->bit == 0)
|
||||||
|
family = AF_INET;
|
||||||
match_num = node->node_num[ISC_IS6(family)];
|
match_num = node->node_num[ISC_IS6(family)];
|
||||||
if (*(isc_boolean_t *) node->data[ISC_IS6(family)] == ISC_TRUE)
|
if (*(isc_boolean_t *) node->data[ISC_IS6(family)] == ISC_TRUE)
|
||||||
*match = match_num;
|
*match = match_num;
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
* PERFORMANCE OF THIS SOFTWARE.
|
* PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* $Id: radix.c,v 1.11 2008/01/21 23:46:56 tbox Exp $ */
|
/* $Id: radix.c,v 1.12 2008/01/27 02:13:34 marka Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This source was adapted from MRT's RCS Ids:
|
* This source was adapted from MRT's RCS Ids:
|
||||||
@ -233,7 +233,7 @@ isc_radix_search(isc_radix_tree_t *radix, isc_radix_node_t **target,
|
|||||||
isc_radix_node_t *node;
|
isc_radix_node_t *node;
|
||||||
isc_radix_node_t *stack[RADIX_MAXBITS + 1];
|
isc_radix_node_t *stack[RADIX_MAXBITS + 1];
|
||||||
u_char *addr;
|
u_char *addr;
|
||||||
isc_uint32_t bitlen, family;
|
isc_uint32_t bitlen, family, tfamily = -1;
|
||||||
int cnt = 0;
|
int cnt = 0;
|
||||||
|
|
||||||
REQUIRE(radix != NULL);
|
REQUIRE(radix != NULL);
|
||||||
@ -250,8 +250,6 @@ isc_radix_search(isc_radix_tree_t *radix, isc_radix_node_t **target,
|
|||||||
addr = isc_prefix_touchar(prefix);
|
addr = isc_prefix_touchar(prefix);
|
||||||
bitlen = prefix->bitlen;
|
bitlen = prefix->bitlen;
|
||||||
|
|
||||||
/* Bitlen 0 means "any" or "none", which is always treated as IPv4 */
|
|
||||||
family = bitlen ? prefix->family : AF_INET;
|
|
||||||
|
|
||||||
while (node->bit < bitlen) {
|
while (node->bit < bitlen) {
|
||||||
if (node->prefix)
|
if (node->prefix)
|
||||||
@ -275,11 +273,17 @@ isc_radix_search(isc_radix_tree_t *radix, isc_radix_node_t **target,
|
|||||||
if (_comp_with_mask(isc_prefix_tochar(node->prefix),
|
if (_comp_with_mask(isc_prefix_tochar(node->prefix),
|
||||||
isc_prefix_tochar(prefix),
|
isc_prefix_tochar(prefix),
|
||||||
node->prefix->bitlen)) {
|
node->prefix->bitlen)) {
|
||||||
|
/* Bitlen 0 means "any" or "none",
|
||||||
|
which is always treated as IPv4 */
|
||||||
|
family = node->prefix->bitlen ?
|
||||||
|
prefix->family : AF_INET;
|
||||||
if (node->node_num[ISC_IS6(family)] != -1 &&
|
if (node->node_num[ISC_IS6(family)] != -1 &&
|
||||||
((*target == NULL) ||
|
((*target == NULL) ||
|
||||||
(*target)->node_num[ISC_IS6(family)] >
|
(*target)->node_num[ISC_IS6(tfamily)] >
|
||||||
node->node_num[ISC_IS6(family)]))
|
node->node_num[ISC_IS6(family)])) {
|
||||||
*target = node;
|
*target = node;
|
||||||
|
tfamily = family;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user