diff options
Diffstat (limited to 'source/n/dhcpcd/patches')
-rw-r--r-- | source/n/dhcpcd/patches/dhcpcd.2fae4a113c3e736d585dd300ca6c8fddae300503.patch | 119 |
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 00000000..8f6a0075 --- /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 + + |