Hello,

I have been attempting to debug a peculiar issue with dhclient on a
vanilla FreeBSD 11.2 system where it appears that even if
dhclient-script returns nonzero when invoked in response to a protocol
timeout, dhclient continues as if the address was bound successfully,
as opposed to the protocol being restarted after the defined retry
interval.

After some investigation, it appears that the root cause of this
behavior is a result of the lower byte of the exit status being
returned, instead of the upper byte containing the return code, on
line 2319 of sbin/dhclient/dhclient.c (Ref:
https://github.com/freebsd/freebsd/blob/releng/11.2/sbin/dhclient/dhclient.c#L2319).

Making the following change makes dhclient behave as expected. Am I
missing something or is there indeed a significant bug here?

Index: sbin/dhclient/dhclient.c
===================================================================
--- sbin/dhclient/dhclient.c    (revision 342377)
+++ sbin/dhclient/dhclient.c    (working copy)
@@ -2316,7 +2316,7 @@
        if (ip)
                script_flush_env(ip->client);

-       return (wstatus & 0xff);
+       return WEXITSTATUS(wstatus);

}


- Nash
_______________________________________________
freebsd-net@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"

Reply via email to