mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 18:28:25 +00:00
DHCP FQDN option tweaks.
This commit is contained in:
committed by
Simon Kelley
parent
1ecbaaa382
commit
3f3adae6bc
@@ -63,6 +63,11 @@ version 2.67
|
|||||||
Allow hostnames to start with a number, as allowed in
|
Allow hostnames to start with a number, as allowed in
|
||||||
RFC-1123. Thanks to Kyle Mestery for the patch.
|
RFC-1123. Thanks to Kyle Mestery for the patch.
|
||||||
|
|
||||||
|
Fixes to DHCP FQDN option handling: don't terminate FQDN
|
||||||
|
if domain not known and allow a FQDN option with blank
|
||||||
|
name to request that a FQDN option is returned in the
|
||||||
|
reply. Thanks to Roy Marples for the patch.
|
||||||
|
|
||||||
|
|
||||||
version 2.66
|
version 2.66
|
||||||
Add the ability to act as an authoritative DNS
|
Add the ability to act as an authoritative DNS
|
||||||
|
|||||||
@@ -615,7 +615,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
|
|||||||
return message ? 0 : dhcp_packet_size(mess, agent_id, real_end);
|
return message ? 0 : dhcp_packet_size(mess, agent_id, real_end);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((opt = option_find(mess, sz, OPTION_CLIENT_FQDN, 4)))
|
if ((opt = option_find(mess, sz, OPTION_CLIENT_FQDN, 3)))
|
||||||
{
|
{
|
||||||
/* http://tools.ietf.org/wg/dhc/draft-ietf-dhc-fqdn-option/draft-ietf-dhc-fqdn-option-10.txt */
|
/* http://tools.ietf.org/wg/dhc/draft-ietf-dhc-fqdn-option/draft-ietf-dhc-fqdn-option-10.txt */
|
||||||
int len = option_len(opt);
|
int len = option_len(opt);
|
||||||
@@ -645,7 +645,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (fqdn_flags & 0x04)
|
if (fqdn_flags & 0x04)
|
||||||
while (*op != 0 && ((op + (*op) + 1) - pp) < len)
|
while (*op != 0 && ((op + (*op)) - pp) < len)
|
||||||
{
|
{
|
||||||
memcpy(pq, op+1, *op);
|
memcpy(pq, op+1, *op);
|
||||||
pq += *op;
|
pq += *op;
|
||||||
@@ -2289,6 +2289,8 @@ static void do_options(struct dhcp_context *context,
|
|||||||
|
|
||||||
if (domain)
|
if (domain)
|
||||||
len += strlen(domain) + 1;
|
len += strlen(domain) + 1;
|
||||||
|
else if (fqdn_flags & 0x04)
|
||||||
|
len--;
|
||||||
|
|
||||||
if ((p = free_space(mess, end, OPTION_CLIENT_FQDN, len)))
|
if ((p = free_space(mess, end, OPTION_CLIENT_FQDN, len)))
|
||||||
{
|
{
|
||||||
@@ -2300,9 +2302,11 @@ static void do_options(struct dhcp_context *context,
|
|||||||
{
|
{
|
||||||
p = do_rfc1035_name(p, hostname);
|
p = do_rfc1035_name(p, hostname);
|
||||||
if (domain)
|
if (domain)
|
||||||
|
{
|
||||||
p = do_rfc1035_name(p, domain);
|
p = do_rfc1035_name(p, domain);
|
||||||
*p++ = 0;
|
*p++ = 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
memcpy(p, hostname, strlen(hostname));
|
memcpy(p, hostname, strlen(hostname));
|
||||||
|
|||||||
@@ -1299,17 +1299,19 @@ struct dhcp_netid *add_options(struct state *state, struct in6_addr *fallback, s
|
|||||||
size_t len = strlen(state->hostname);
|
size_t len = strlen(state->hostname);
|
||||||
|
|
||||||
if (state->send_domain)
|
if (state->send_domain)
|
||||||
len += strlen(state->send_domain) + 1;
|
len += strlen(state->send_domain) + 2;
|
||||||
|
|
||||||
o = new_opt6(OPTION6_FQDN);
|
o = new_opt6(OPTION6_FQDN);
|
||||||
if ((p = expand(len + 3)))
|
if ((p = expand(len + 2)))
|
||||||
{
|
{
|
||||||
*(p++) = state->fqdn_flags;
|
*(p++) = state->fqdn_flags;
|
||||||
p = do_rfc1035_name(p, state->hostname);
|
p = do_rfc1035_name(p, state->hostname);
|
||||||
if (state->send_domain)
|
if (state->send_domain)
|
||||||
|
{
|
||||||
p = do_rfc1035_name(p, state->send_domain);
|
p = do_rfc1035_name(p, state->send_domain);
|
||||||
*p = 0;
|
*p = 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
end_opt6(o);
|
end_opt6(o);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user