Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 18 Aug 2021 17:16:04 GMT
From:      Kevin Bowling <kbowling@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 0a539a0f005e - main - dhclient: support supersede statement for option 54
Message-ID:  <202108181716.17IHG4Ca077371@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by kbowling (ports committer):

URL: https://cgit.FreeBSD.org/src/commit/?id=0a539a0f005e8acbe4974ede30aa928099c988b9

commit 0a539a0f005e8acbe4974ede30aa928099c988b9
Author:     Fabian Kurtz <fabian.kurtz@udo.edu>
AuthorDate: 2021-08-18 17:12:48 +0000
Commit:     Kevin Bowling <kbowling@FreeBSD.org>
CommitDate: 2021-08-18 17:15:28 +0000

    dhclient: support supersede statement for option 54
    
    PR:             217978
    Reported by:    Franco Fichtner <franco@opnsense.org>
    Reviewed by:    markj
    Obtained from:  OPNsense
    MFC after:      1 week
    Differential Revision:  https://reviews.freebsd.org/D31503
---
 sbin/dhclient/dhclient.c | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/sbin/dhclient/dhclient.c b/sbin/dhclient/dhclient.c
index 8c2615e4c3dc..a1628f0ee22f 100644
--- a/sbin/dhclient/dhclient.c
+++ b/sbin/dhclient/dhclient.c
@@ -931,6 +931,8 @@ void
 state_bound(void *ipp)
 {
 	struct interface_info *ip = ipp;
+	u_int8_t *dp = NULL;
+	int len;
 
 	ASSERT_STATE(state, S_BOUND);
 
@@ -938,10 +940,17 @@ state_bound(void *ipp)
 	make_request(ip, ip->client->active);
 	ip->client->xid = ip->client->packet.xid;
 
-	if (ip->client->active->options[DHO_DHCP_SERVER_IDENTIFIER].len == 4) {
-		memcpy(ip->client->destination.iabuf, ip->client->active->
-		    options[DHO_DHCP_SERVER_IDENTIFIER].data, 4);
-		ip->client->destination.len = 4;
+	if (ip->client->config->default_actions[DHO_DHCP_SERVER_IDENTIFIER] ==
+	    ACTION_SUPERSEDE) {
+		dp = ip->client->config->defaults[DHO_DHCP_SERVER_IDENTIFIER].data;
+		len = ip->client->config->defaults[DHO_DHCP_SERVER_IDENTIFIER].len;
+	} else {
+		dp = ip->client->active->options[DHO_DHCP_SERVER_IDENTIFIER].data;
+		len = ip->client->active->options[DHO_DHCP_SERVER_IDENTIFIER].len;
+	}
+	if (len == 4) {
+		memcpy(ip->client->destination.iabuf, dp, len);
+		ip->client->destination.len = len;
 	} else
 		ip->client->destination = iaddr_broadcast;
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202108181716.17IHG4Ca077371>