diff --git a/src/usr/local/sbin/pfSense-dhclient-script b/src/usr/local/sbin/pfSense-dhclient-script index 726e4d4b5f..f784e3c5ae 100755 --- a/src/usr/local/sbin/pfSense-dhclient-script +++ b/src/usr/local/sbin/pfSense-dhclient-script @@ -286,11 +286,11 @@ notify_rc_newwanip() { # # Start of active code. # +exit_status=0 # Invoke the local dhcp client enter hooks, if they exist. if [ -f /etc/dhclient-enter-hooks ]; then $LOGGER "dhclient-enter-hooks" - exit_status=0 . /etc/dhclient-enter-hooks # allow the local script to abort processing of this state # local script must set exit_status variable to nonzero. @@ -359,6 +359,9 @@ EXPIRE|FAIL|RELEASE) ;; TIMEOUT) + # This case must exit zero only if the cached address + # is considered valid. See dhclient-script(8). + exit_status=1 delete_old_alias add_new_address /bin/sleep 1 @@ -373,19 +376,21 @@ TIMEOUT) if add_new_resolv_conf; then notify_rc_newwanip fi + exit_status=0 fi fi - $IFCONFIG $interface inet -alias $new_ip_address $medium - delete_old_routes + if [ $exit_status -ne 0 ]; then + $IFCONFIG $interface inet -alias $new_ip_address $medium + delete_old_routes + fi ;; esac # Invoke the local dhcp client exit hooks, if they exist. if [ -f /etc/dhclient-exit-hooks ]; then $LOGGER "dhclient-exit-hooks" - exit_status=0 . /etc/dhclient-exit-hooks # allow the local script to abort processing of this state # local script must set exit_status variable to nonzero. - exit $exit_status fi +exit $exit_status