mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 10:18:25 +00:00
Fix removal of DHCP_CLIENT_MAC options from DHCPv6 relay replies.
This commit is contained in:
@@ -219,21 +219,25 @@ static int dhcp6_maybe_relay(struct state *state, void *inbuff, size_t sz,
|
|||||||
if (opt6_ptr(opt, 0) + opt6_len(opt) > end)
|
if (opt6_ptr(opt, 0) + opt6_len(opt) > end)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
int o = new_opt6(opt6_type(opt));
|
/* Don't copy MAC address into reply. */
|
||||||
if (opt6_type(opt) == OPTION6_RELAY_MSG)
|
if (opt6_type(opt) != OPTION6_CLIENT_MAC)
|
||||||
{
|
{
|
||||||
struct in6_addr align;
|
int o = new_opt6(opt6_type(opt));
|
||||||
/* the packet data is unaligned, copy to aligned storage */
|
if (opt6_type(opt) == OPTION6_RELAY_MSG)
|
||||||
memcpy(&align, inbuff + 2, IN6ADDRSZ);
|
{
|
||||||
state->link_address = &align;
|
struct in6_addr align;
|
||||||
/* zero is_unicast since that is now known to refer to the
|
/* the packet data is unaligned, copy to aligned storage */
|
||||||
relayed packet, not the original sent by the client */
|
memcpy(&align, inbuff + 2, IN6ADDRSZ);
|
||||||
if (!dhcp6_maybe_relay(state, opt6_ptr(opt, 0), opt6_len(opt), client_addr, 0, now))
|
state->link_address = &align;
|
||||||
return 0;
|
/* zero is_unicast since that is now known to refer to the
|
||||||
|
relayed packet, not the original sent by the client */
|
||||||
|
if (!dhcp6_maybe_relay(state, opt6_ptr(opt, 0), opt6_len(opt), client_addr, 0, now))
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
put_opt6(opt6_ptr(opt, 0), opt6_len(opt));
|
||||||
|
end_opt6(o);
|
||||||
}
|
}
|
||||||
else if (opt6_type(opt) != OPTION6_CLIENT_MAC)
|
|
||||||
put_opt6(opt6_ptr(opt, 0), opt6_len(opt));
|
|
||||||
end_opt6(o);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user