mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 18:28:25 +00:00
Fix bug with prefixed wildcard addresses in 137286e9ba
This commit is contained in:
@@ -1700,7 +1700,7 @@ static int config_implies(struct dhcp_config *config, struct dhcp_context *conte
|
|||||||
|
|
||||||
static int config_valid(struct dhcp_config *config, struct dhcp_context *context, struct in6_addr *addr, struct state *state)
|
static int config_valid(struct dhcp_config *config, struct dhcp_context *context, struct in6_addr *addr, struct state *state)
|
||||||
{
|
{
|
||||||
u64 addrpart;
|
u64 addrpart, i, addresses;
|
||||||
struct addrlist *addr_list;
|
struct addrlist *addr_list;
|
||||||
|
|
||||||
if (!config || !(config->flags & CONFIG_ADDR6))
|
if (!config || !(config->flags & CONFIG_ADDR6))
|
||||||
@@ -1709,6 +1709,10 @@ static int config_valid(struct dhcp_config *config, struct dhcp_context *context
|
|||||||
for (addr_list = config->addr6; addr_list; addr_list = addr_list->next)
|
for (addr_list = config->addr6; addr_list; addr_list = addr_list->next)
|
||||||
{
|
{
|
||||||
addrpart = addr6part(&addr_list->addr.addr6);
|
addrpart = addr6part(&addr_list->addr.addr6);
|
||||||
|
addresses = 1;
|
||||||
|
|
||||||
|
if (addr_list->flags & ADDRLIST_PREFIX)
|
||||||
|
addresses = 1<<(128-addr_list->prefixlen);
|
||||||
|
|
||||||
if ((addr_list->flags & ADDRLIST_WILDCARD))
|
if ((addr_list->flags & ADDRLIST_WILDCARD))
|
||||||
{
|
{
|
||||||
@@ -1716,25 +1720,18 @@ static int config_valid(struct dhcp_config *config, struct dhcp_context *context
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
*addr = context->start6;
|
*addr = context->start6;
|
||||||
setaddr6part(addr, addrpart);
|
|
||||||
}
|
}
|
||||||
else if (is_same_net6(&context->start6, &addr_list->addr.addr6, context->prefix))
|
else if (is_same_net6(&context->start6, &addr_list->addr.addr6, context->prefix))
|
||||||
*addr = addr_list->addr.addr6;
|
*addr = addr_list->addr.addr6;
|
||||||
else
|
else
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
while(1)
|
for (i = 0 ; i < addresses; i++)
|
||||||
{
|
{
|
||||||
|
setaddr6part(addr, addrpart+i);
|
||||||
|
|
||||||
if (check_address(state, addr))
|
if (check_address(state, addr))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if (!(addr_list->flags & ADDRLIST_PREFIX))
|
|
||||||
break;
|
|
||||||
|
|
||||||
addrpart++;
|
|
||||||
setaddr6part(addr, addrpart);
|
|
||||||
if (!is_same_net6(addr, &addr_list->addr.addr6, addr_list->prefixlen))
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user