mirror of
git://slackware.nl/current.git
synced 2025-01-28 08:02:25 +01:00
120 lines
2.6 KiB
Diff
120 lines
2.6 KiB
Diff
|
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
|
||
|
|
||
|
|