- Minor corrections to allow compilation under gcc 10.
[Gitlab #117]
+- Corrected logic in dhclient that causes it to decline DHCPv4 leases if the
+ client script exits abnormally (i.e. crashes).
+ [Gitlab #123]
+
Changes since 4.4.2b1 (Bug Fixes)
- Added a clarification on DHCPINFORMs and server authority to
script_write_params(client, "alias_", client->alias);
/* If the BOUND/RENEW code detects another machine using the
- offered address, it exits nonzero. We need to send a
- DHCPDECLINE and toss the lease. */
- if (script_go(client)) {
+ offered address, then per our man page it should exit with
+ a non-zero status, to which we send a DHCPDECLINE and toss
+ the lease. A return value of less than zero indicates
+ the script crashed (e.g. segfault) which script_go will log
+ but we will ignore here. */
+ if (script_go(client) > 0) {
make_decline(client, client->new);
send_decline(client);
destroy_client_lease(client->new);
}
dfree (envp, MDL);
gettimeofday(&cur_tv, NULL);
- return (WIFEXITED (wstatus) ?
- WEXITSTATUS (wstatus) : -WTERMSIG (wstatus));
+
+ if (!WIFEXITED(wstatus)) {
+ int sigval = WTERMSIG(wstatus);
+ log_error ("script_go script: %s was terminated by signal %d", scriptName, sigval);
+ return (-sigval);
+ }
+
+ return (WEXITSTATUS(wstatus));
}
void client_envadd (struct client_state *client,