From 0247314f7d4b0db1ce3db0971201bfd41e496a54 Mon Sep 17 00:00:00 2001 From: Kevin Darbyshire-Bryant Date: Mon, 6 Feb 2017 21:45:41 +0000 Subject: dnsmasq: bump to dnsmasq v2.77test3 New test release (since test1) includes 2 LEDE patches that are upstream and may be dropped, along with many spelling fixes. Add forthcoming 2017 root zone trust anchor to trust-anchors.conf. Backport 2 patches that just missed test3: Reduce logspam of those domains handled locally 'local addresses only' Implement RFC-6842 (Client-ids in DHCP replies) Compile & run tested Archer C7 v2 Signed-off-by: Kevin Darbyshire-Bryant --- .../dnsmasq/patches/020-implement-RFC6842.patch | 132 +++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 package/network/services/dnsmasq/patches/020-implement-RFC6842.patch (limited to 'package/network/services/dnsmasq/patches/020-implement-RFC6842.patch') diff --git a/package/network/services/dnsmasq/patches/020-implement-RFC6842.patch b/package/network/services/dnsmasq/patches/020-implement-RFC6842.patch new file mode 100644 index 0000000000..905e40b8ca --- /dev/null +++ b/package/network/services/dnsmasq/patches/020-implement-RFC6842.patch @@ -0,0 +1,132 @@ +From 88a77a78ad27adc3ed87b7ee603643d26cb896ee Mon Sep 17 00:00:00 2001 +From: Simon Kelley +Date: Sat, 11 Feb 2017 17:02:02 +0000 +Subject: [PATCH] Implement RFC-6842 (Client-ids in DHCP replies.) + +--- + CHANGELOG | 5 ++++- + src/rfc2131.c | 33 ++++++++++++++++++++++----------- + 2 files changed, 26 insertions(+), 12 deletions(-) + +diff --git a/CHANGELOG b/CHANGELOG +index f7f5125..a4ee280 100644 +--- a/CHANGELOG ++++ b/CHANGELOG +@@ -74,7 +74,10 @@ version 2.77 + of "local addresses only" entries. Thanks to Hannu Nyman for + the patch. + +- ++ Implement RFC 6842. Thanks to Reddeiah Raju Konduru for ++ pointing out that this was missing. ++ ++ + version 2.76 + Include 0.0.0.0/8 in DNS rebind checks. This range + translates to hosts on the local network, or, at +diff --git a/src/rfc2131.c b/src/rfc2131.c +index 978c8dc..3e97402 100644 +--- a/src/rfc2131.c ++++ b/src/rfc2131.c +@@ -38,7 +38,7 @@ static void log_packet(char *type, void *addr, unsigned char *ext_mac, + static unsigned char *option_find(struct dhcp_packet *mess, size_t size, int opt_type, int minsize); + static unsigned char *option_find1(unsigned char *p, unsigned char *end, int opt, int minsize); + static size_t dhcp_packet_size(struct dhcp_packet *mess, unsigned char *agent_id, unsigned char *real_end); +-static void clear_packet(struct dhcp_packet *mess, unsigned char *end); ++static void clear_packet(struct dhcp_packet *mess, unsigned char *end, unsigned int sz); + static int in_list(unsigned char *list, int opt); + static void do_options(struct dhcp_context *context, + struct dhcp_packet *mess, +@@ -611,7 +611,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index, + now); + lease_set_interface(lease, int_index, now); + +- clear_packet(mess, end); ++ clear_packet(mess, end, 0); + do_options(context, mess, end, NULL, hostname, get_domain(mess->yiaddr), + netid, subnet_addr, 0, 0, -1, NULL, vendor_class_len, now, 0xffffffff, 0); + } +@@ -814,7 +814,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index, + if (!service || !service->basename || !context) + return 0; + +- clear_packet(mess, end); ++ clear_packet(mess, end, sz); + + mess->yiaddr = mess->ciaddr; + mess->ciaddr.s_addr = 0; +@@ -882,7 +882,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index, + mess->flags |= htons(0x8000); /* broadcast */ + } + +- clear_packet(mess, end); ++ clear_packet(mess, end, sz); + + /* Redirect EFI clients to port 4011 */ + if (pxearch >= 6) +@@ -1062,7 +1062,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index, + log_packet("DHCPOFFER" , &mess->yiaddr, emac, emac_len, iface_name, NULL, NULL, mess->xid); + + time = calc_time(context, config, option_find(mess, sz, OPTION_LEASE_TIME, 4)); +- clear_packet(mess, end); ++ clear_packet(mess, end, sz); + option_put(mess, end, OPTION_MESSAGE_TYPE, 1, DHCPOFFER); + option_put(mess, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, ntohl(server_id(context, override, fallback).s_addr)); + option_put(mess, end, OPTION_LEASE_TIME, 4, time); +@@ -1245,7 +1245,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index, + log_packet("DHCPNAK", &mess->yiaddr, emac, emac_len, iface_name, NULL, message, mess->xid); + + mess->yiaddr.s_addr = 0; +- clear_packet(mess, end); ++ clear_packet(mess, end, sz); + option_put(mess, end, OPTION_MESSAGE_TYPE, 1, DHCPNAK); + option_put(mess, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, ntohl(server_id(context, override, fallback).s_addr)); + option_put_string(mess, end, OPTION_MESSAGE, message, borken_opt); +@@ -1401,7 +1401,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index, + + log_packet("DHCPACK", &mess->yiaddr, emac, emac_len, iface_name, hostname, NULL, mess->xid); + +- clear_packet(mess, end); ++ clear_packet(mess, end, sz); + option_put(mess, end, OPTION_MESSAGE_TYPE, 1, DHCPACK); + option_put(mess, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, ntohl(server_id(context, override, fallback).s_addr)); + option_put(mess, end, OPTION_LEASE_TIME, 4, time); +@@ -1452,7 +1452,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index, + override = lease->override; + } + +- clear_packet(mess, end); ++ clear_packet(mess, end, sz); + option_put(mess, end, OPTION_MESSAGE_TYPE, 1, DHCPACK); + option_put(mess, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, ntohl(server_id(context, override, fallback).s_addr)); + +@@ -2180,12 +2180,23 @@ static struct dhcp_opt *pxe_opts(int pxe_arch, struct dhcp_netid *netid, struct + + return ret; + } +- +-static void clear_packet(struct dhcp_packet *mess, unsigned char *end) ++ ++static void clear_packet(struct dhcp_packet *mess, unsigned char *end, unsigned int sz) + { ++ unsigned char *opt; ++ unsigned int clid_tot = 0; ++ ++ /* If sz is non-zero, save any client-id option by copying it as the first ++ option in the new packet */ ++ if (sz != 0 && (opt = option_find(mess, sz, OPTION_CLIENT_ID, 1))) ++ { ++ clid_tot = option_len(opt) + 2u; ++ memmove(&mess->options[0] + sizeof(u32), opt, clid_tot); ++ } ++ + memset(mess->sname, 0, sizeof(mess->sname)); + memset(mess->file, 0, sizeof(mess->file)); +- memset(&mess->options[0] + sizeof(u32), 0, end - (&mess->options[0] + sizeof(u32))); ++ memset(&mess->options[0] + sizeof(u32) + clid_tot, 0, end - (&mess->options[0] + sizeof(u32) + clid_tot)); + mess->siaddr.s_addr = 0; + } + +-- +1.7.10.4 + -- cgit v1.2.3