summaryrefslogtreecommitdiffstats
path: root/source/n/dhcpcd/patches/dhcpcd.2fae4a113c3e736d585dd300ca6c8fddae300503.patch
diff options
context:
space:
mode:
Diffstat (limited to 'source/n/dhcpcd/patches/dhcpcd.2fae4a113c3e736d585dd300ca6c8fddae300503.patch')
-rw-r--r--source/n/dhcpcd/patches/dhcpcd.2fae4a113c3e736d585dd300ca6c8fddae300503.patch119
1 files changed, 119 insertions, 0 deletions
diff --git a/source/n/dhcpcd/patches/dhcpcd.2fae4a113c3e736d585dd300ca6c8fddae300503.patch b/source/n/dhcpcd/patches/dhcpcd.2fae4a113c3e736d585dd300ca6c8fddae300503.patch
new file mode 100644
index 000000000..8f6a0075a
--- /dev/null
+++ b/source/n/dhcpcd/patches/dhcpcd.2fae4a113c3e736d585dd300ca6c8fddae300503.patch
@@ -0,0 +1,119 @@
+From 2fae4a113c3e736d585dd300ca6c8fddae300503 Mon Sep 17 00:00:00 2001
+From: Roy Marples <roy@marples.name>
+Date: Tue, 31 Aug 2021 10:57:44 +0100
+Subject: [PATCH] DHCP6: Only send FQDN for SOLICIT, REQUEST, RENEW, or REBIND messages.
+
+As per RFC 4704 section 5.
+Fixes #44.
+---
+ src/dhcp6.c | 79 +++++++++++++++++++++++++++++++++-------------------------
+ 1 files changed, 45 insertions(+), 34 deletions(-)
+
+diff --git a/src/dhcp6.c b/src/dhcp6.c
+index f355418..9c818b3 100644
+--- a/src/dhcp6.c
++++ b/src/dhcp6.c
+@@ -637,7 +637,7 @@ dhcp6_makemessage(struct interface *ifp)
+ uint8_t type;
+ uint16_t si_len, uni_len, n_options;
+ uint8_t *o_lenp;
+- struct if_options *ifo;
++ struct if_options *ifo = ifp->options;
+ const struct dhcp_opt *opt, *opt2;
+ const struct ipv6_addr *ap;
+ char hbuf[HOSTNAME_MAX_LEN + 1];
+@@ -658,8 +658,50 @@ dhcp6_makemessage(struct interface *ifp)
+ state->send = NULL;
+ }
+
+- ifo = ifp->options;
+- fqdn = ifo->fqdn;
++ switch(state->state) {
++ case DH6S_INIT: /* FALLTHROUGH */
++ case DH6S_DISCOVER:
++ type = DHCP6_SOLICIT;
++ break;
++ case DH6S_REQUEST:
++ type = DHCP6_REQUEST;
++ break;
++ case DH6S_CONFIRM:
++ type = DHCP6_CONFIRM;
++ break;
++ case DH6S_REBIND:
++ type = DHCP6_REBIND;
++ break;
++ case DH6S_RENEW:
++ type = DHCP6_RENEW;
++ break;
++ case DH6S_INFORM:
++ type = DHCP6_INFORMATION_REQ;
++ break;
++ case DH6S_RELEASE:
++ type = DHCP6_RELEASE;
++ break;
++ case DH6S_DECLINE:
++ type = DHCP6_DECLINE;
++ break;
++ default:
++ errno = EINVAL;
++ return -1;
++ }
++
++ /* RFC 4704 Section 5 says we can only send FQDN for these
++ * message types. */
++ switch(type) {
++ case DHCP6_SOLICIT:
++ case DHCP6_REQUEST:
++ case DHCP6_RENEW:
++ case DHCP6_REBIND:
++ fqdn = ifo->fqdn;
++ break;
++ default:
++ fqdn = FQDN_DISABLE;
++ break;
++ }
+
+ if (fqdn == FQDN_DISABLE && ifo->options & DHCPCD_HOSTNAME) {
+ /* We're sending the DHCPv4 hostname option, so send FQDN as
+@@ -823,37 +865,6 @@ dhcp6_makemessage(struct interface *ifp)
+ }
+
+ switch(state->state) {
+- case DH6S_INIT: /* FALLTHROUGH */
+- case DH6S_DISCOVER:
+- type = DHCP6_SOLICIT;
+- break;
+- case DH6S_REQUEST:
+- type = DHCP6_REQUEST;
+- break;
+- case DH6S_CONFIRM:
+- type = DHCP6_CONFIRM;
+- break;
+- case DH6S_REBIND:
+- type = DHCP6_REBIND;
+- break;
+- case DH6S_RENEW:
+- type = DHCP6_RENEW;
+- break;
+- case DH6S_INFORM:
+- type = DHCP6_INFORMATION_REQ;
+- break;
+- case DH6S_RELEASE:
+- type = DHCP6_RELEASE;
+- break;
+- case DH6S_DECLINE:
+- type = DHCP6_DECLINE;
+- break;
+- default:
+- errno = EINVAL;
+- return -1;
+- }
+-
+- switch(state->state) {
+ case DH6S_REQUEST: /* FALLTHROUGH */
+ case DH6S_RENEW: /* FALLTHROUGH */
+ case DH6S_RELEASE:
+--
+1.7.1
+
+