mirror of
https://github.com/lucaspalomodevelop/core.git
synced 2026-03-13 16:14:40 +00:00
interfaces: purge unused parts of the dhclient-script #6869
Once upon a time we tried to treat this script as an external one since it's still maintained somewhat in FreeBSD but the approach of integration is much different so the script ends up with half of its code not doing anything and perhaps more than it should. Upstream fixes are also not full applicable anymore. * Clear the writing of the host name. The system does that. Simply keep the logging aspect of it (if given). * Remove the $ARP flush on TIMEOUT/EXPIRE as it seems misplaced. * Remove exit_with_hooks() and is_default_interface() as these are tools that are not needed in our integration approach. * While trailing TIMEOUT/EXPIRE failure case make sure to run newwanip in optional mode in order to pick up missing configuration. * Copyright the changes from 2021 onwards that offer substantial changes to the way the script integration works or cooperates with the rest of the system. * Inline the one-time use of functions. * Remove tip-toeing around $resolvconf_enable. * Ignore dhclient-enter-hooks. * Remove commented-out code.
This commit is contained in:
parent
2e90f1cb5b
commit
b66e24c755
@ -1,8 +1,6 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# $OpenBSD: dhclient-script,v 1.6 2004/05/06 18:22:41 claudio Exp $
|
||||
# $FreeBSD: src/sbin/dhclient/dhclient-script,v 1.4 2005/06/10 03:41:18 brooks Exp $
|
||||
#
|
||||
# Copyright (c) 2021-2023 Franco Fichtner <franco@opnsense.org>
|
||||
# Copyright (c) 2003 Kenneth R Westerback <krw@openbsd.org>
|
||||
#
|
||||
# Permission to use, copy, modify, and distribute this software for any
|
||||
@ -16,49 +14,21 @@
|
||||
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
#
|
||||
|
||||
ARP=/usr/sbin/arp
|
||||
HOSTNAME=/bin/hostname
|
||||
IFCONFIG='/sbin/ifconfig -n'
|
||||
|
||||
LOCALHOST=127.0.0.1
|
||||
|
||||
if [ -x /usr/bin/logger ]; then
|
||||
LOGGER="/usr/bin/logger -s -p user.notice -t dhclient dhclient-script:"
|
||||
else
|
||||
LOGGER=echo
|
||||
fi
|
||||
IFCONFIG="/sbin/ifconfig -n"
|
||||
LOGGER="/usr/bin/logger -s -p user.notice -t dhclient dhclient-script:"
|
||||
|
||||
#
|
||||
# Helper functions that implement common actions.
|
||||
#
|
||||
|
||||
check_hostname() {
|
||||
current_hostname=`$HOSTNAME`
|
||||
if [ -z "$current_hostname" ]; then
|
||||
$LOGGER "New Hostname ($interface): $new_host_name"
|
||||
$HOSTNAME $new_host_name
|
||||
elif [ "$current_hostname" = "$old_host_name" -a \
|
||||
"$new_host_name" != "$old_host_name" ]; then
|
||||
$LOGGER "New Hostname ($interface): $new_host_name"
|
||||
$HOSTNAME $new_host_name
|
||||
fi
|
||||
}
|
||||
|
||||
arp_flush() {
|
||||
arp -an -i $interface | \
|
||||
sed -n -e 's/^.*(\(.*\)) at .*$/arp -d \1/p' | \
|
||||
sh >/dev/null 2>&1
|
||||
}
|
||||
|
||||
|
||||
delete_old_address() {
|
||||
delete_old_address()
|
||||
{
|
||||
eval "$IFCONFIG $interface inet -alias $old_ip_address $medium"
|
||||
}
|
||||
|
||||
add_new_address() {
|
||||
add_new_address()
|
||||
{
|
||||
eval "$IFCONFIG $interface \
|
||||
inet $new_ip_address \
|
||||
netmask $new_subnet_mask \
|
||||
@ -75,22 +45,23 @@ add_new_address() {
|
||||
fi
|
||||
}
|
||||
|
||||
delete_old_alias() {
|
||||
delete_old_alias()
|
||||
{
|
||||
if [ -n "$alias_ip_address" ]; then
|
||||
$IFCONFIG $interface inet -alias $alias_ip_address > /dev/null 2>&1
|
||||
#route delete $alias_ip_address $LOCALHOST > /dev/null 2>&1
|
||||
fi
|
||||
}
|
||||
|
||||
add_new_alias() {
|
||||
add_new_alias()
|
||||
{
|
||||
if [ -n "$alias_ip_address" ]; then
|
||||
$IFCONFIG $interface inet alias $alias_ip_address netmask \
|
||||
$alias_subnet_mask
|
||||
#route add $alias_ip_address $LOCALHOST
|
||||
fi
|
||||
}
|
||||
|
||||
fill_classless_routes() {
|
||||
fill_classless_routes()
|
||||
{
|
||||
set $1
|
||||
while [ $# -ge 5 ]; do
|
||||
if [ $1 -eq 0 ]; then
|
||||
@ -115,8 +86,8 @@ fill_classless_routes() {
|
||||
done
|
||||
}
|
||||
|
||||
delete_old_routes() {
|
||||
#route delete "$old_ip_address" $LOCALHOST >/dev/null 2>&1
|
||||
delete_old_routes()
|
||||
{
|
||||
if [ -n "$old_classless_routes" ]; then
|
||||
fill_classless_routes "$old_classless_routes"
|
||||
set $classless_routes
|
||||
@ -127,13 +98,6 @@ delete_old_routes() {
|
||||
return 0;
|
||||
fi
|
||||
|
||||
# If we supported multiple default routes, we'd be removing each
|
||||
# one here. We don't so just delete the default route if it's
|
||||
# through our interface.
|
||||
#if is_default_interface; then
|
||||
#route delete default >/dev/null 2>&1
|
||||
#fi
|
||||
|
||||
if [ -n "$old_static_routes" ]; then
|
||||
set $old_static_routes
|
||||
while [ $# -gt 1 ]; do
|
||||
@ -144,12 +108,13 @@ delete_old_routes() {
|
||||
|
||||
/usr/local/sbin/ifctl -i ${interface} -4rd
|
||||
|
||||
arp_flush
|
||||
arp -an -i $interface | \
|
||||
sed -n -e 's/^.*(\(.*\)) at .*$/arp -d \1/p' | \
|
||||
sh >/dev/null 2>&1
|
||||
}
|
||||
|
||||
add_new_routes() {
|
||||
#route add $new_ip_address $LOCALHOST >/dev/null 2>&1
|
||||
|
||||
add_new_routes()
|
||||
{
|
||||
# RFC 3442: If the DHCP server returns both a Classless Static
|
||||
# Routes option and a Router option, the DHCP client MUST ignore
|
||||
# the Router option.
|
||||
@ -195,7 +160,8 @@ add_new_routes() {
|
||||
fi
|
||||
}
|
||||
|
||||
add_new_resolv_conf() {
|
||||
add_new_resolv_conf()
|
||||
{
|
||||
$LOGGER "Creating resolv.conf"
|
||||
|
||||
ARGS="-i ${interface} -4nd"
|
||||
@ -209,58 +175,10 @@ add_new_resolv_conf() {
|
||||
return 0
|
||||
}
|
||||
|
||||
# Must be used on exit. Invokes the local dhcp client exit hooks, if any.
|
||||
exit_with_hooks() {
|
||||
exit_status=$1
|
||||
if [ -f /etc/dhclient-exit-hooks ]; then
|
||||
. /etc/dhclient-exit-hooks
|
||||
fi
|
||||
# probably should do something with exit status of the local script
|
||||
exit $exit_status
|
||||
}
|
||||
|
||||
# Get the interface with the current ipv4 default route on it using only
|
||||
# commands that are available prior to /usr being mounted.
|
||||
is_default_interface()
|
||||
{
|
||||
routeget="`route -n get -inet default`"
|
||||
oldifs="$IFS"
|
||||
IFS="
|
||||
"
|
||||
defif=
|
||||
for line in $routeget ; do
|
||||
case $line in
|
||||
*interface:*)
|
||||
defif=${line##*: }
|
||||
;;
|
||||
esac
|
||||
done
|
||||
IFS=${oldifs}
|
||||
|
||||
if [ -z "$defif" -o "$defif" = "$interface" ]; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
#
|
||||
# Start of active code.
|
||||
#
|
||||
|
||||
# Invoke the local dhcp client enter hooks, if they exist.
|
||||
if [ -f /etc/dhclient-enter-hooks ]; then
|
||||
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.
|
||||
if [ $exit_status -ne 0 ]; then
|
||||
exit $exit_status
|
||||
fi
|
||||
fi
|
||||
|
||||
: ${resolvconf_enable="NO"}
|
||||
|
||||
$LOGGER "Reason $reason on $interface executing"
|
||||
|
||||
case $reason in
|
||||
@ -280,7 +198,10 @@ ARPCHECK|ARPSEND)
|
||||
;;
|
||||
|
||||
BOUND|RENEW|REBIND|REBOOT)
|
||||
check_hostname
|
||||
if [ -n "$new_host_name" ]; then
|
||||
$LOGGER "New Hostname ($interface): $new_host_name"
|
||||
fi
|
||||
|
||||
changes="no"
|
||||
if [ -n "$old_ip_address" ]; then
|
||||
if [ -n "$alias_ip_address" -a "$old_ip_address" != "$alias_ip_address" ]; then
|
||||
@ -305,9 +226,7 @@ BOUND|RENEW|REBIND|REBOOT)
|
||||
add_new_alias
|
||||
changes="yes"
|
||||
fi
|
||||
#if is_default_interface; then
|
||||
add_new_resolv_conf
|
||||
#fi
|
||||
add_new_resolv_conf
|
||||
if [ "$changes" = "yes" ] ; then
|
||||
/usr/local/sbin/configctl -d interface newip $interface force
|
||||
fi
|
||||
@ -319,24 +238,7 @@ EXPIRE|FAIL)
|
||||
delete_old_address
|
||||
delete_old_routes
|
||||
fi
|
||||
if [ -x $ARP ]; then
|
||||
$ARP -d -a -i $interface
|
||||
fi
|
||||
# XXX Why add alias we just deleted above?
|
||||
add_new_alias
|
||||
if is_default_interface; then
|
||||
case $resolvconf_enable in
|
||||
# "no", "false", "off", or "0"
|
||||
[Nn][Oo]|[Ff][Aa][Ll][Ss][Ee]|[Oo][Ff][Ff]|0)
|
||||
if [ -f /etc/resolv.conf.save ]; then
|
||||
cat /etc/resolv.conf.save > /etc/resolv.conf
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
/sbin/resolvconf -d ${interface}
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
;;
|
||||
|
||||
TIMEOUT)
|
||||
@ -352,16 +254,15 @@ TIMEOUT)
|
||||
fi
|
||||
add_new_routes
|
||||
add_new_resolv_conf
|
||||
#if ! is_default_interface; then
|
||||
/usr/local/sbin/configctl -d interface newip $interface force
|
||||
exit_with_hooks 0
|
||||
#fi
|
||||
/usr/local/sbin/configctl -d interface newip $interface force
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
eval "$IFCONFIG $interface inet -alias $new_ip_address $medium"
|
||||
delete_old_routes
|
||||
exit_with_hooks 1
|
||||
/usr/local/sbin/configctl -d interface newip $interface
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit_with_hooks 0
|
||||
exit 0
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user