mirror of
https://gitlab.isc.org/isc-projects/dhcp
synced 2025-08-22 18:07:25 +00:00
[ISC-Bugs #23045] Typos in client/scripts/openbsd [ISC-Bugs #23565] In the client scripts add a zone id (interface id) if the domain search address is link local. [ISC-Bugs #1277] In some of the client scripts add code to handle the case of the default router information being changed without the address being changed.
204 lines
6.5 KiB
Bash
Executable File
204 lines
6.5 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
make_resolv_conf() {
|
|
if [ x"$new_domain_name_servers" != x ]; then
|
|
cat /dev/null > /etc/resolv.conf.dhclient
|
|
if [ x"$new_domain_search" != x ]; then
|
|
echo search $new_domain_search >> /etc/resolv.conf.dhclient
|
|
elif [ x"$new_domain_name" != x ]; then
|
|
# Note that the DHCP 'Domain Name Option' is really just a domain
|
|
# name, and that this practice of using the domain name option as
|
|
# a search path is both nonstandard and deprecated.
|
|
echo search $new_domain_name >> /etc/resolv.conf.dhclient
|
|
fi
|
|
for nameserver in $new_domain_name_servers; do
|
|
echo nameserver $nameserver >>/etc/resolv.conf.dhclient
|
|
done
|
|
|
|
mv /etc/resolv.conf.dhclient /etc/resolv.conf
|
|
fi
|
|
}
|
|
|
|
# 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
|
|
}
|
|
|
|
# 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
|
|
|
|
if [ x$new_broadcast_address != x ]; then
|
|
new_broadcast_arg="broadcast $new_broadcast_address"
|
|
fi
|
|
if [ x$old_broadcast_address != x ]; then
|
|
old_broadcast_arg="broadcast $old_broadcast_address"
|
|
fi
|
|
if [ x$new_subnet_mask != x ]; then
|
|
new_netmask_arg="netmask $new_subnet_mask"
|
|
fi
|
|
if [ x$old_subnet_mask != x ]; then
|
|
old_netmask_arg="netmask $old_subnet_mask"
|
|
fi
|
|
if [ x$alias_subnet_mask != x ]; then
|
|
alias_subnet_arg="netmask $alias_subnet_mask"
|
|
fi
|
|
if [ x$new_interface_mtu != x ]; then
|
|
mtu_arg="mtu $new_interface_mtu"
|
|
fi
|
|
if [ x$IF_METRIC != x ]; then
|
|
metric_arg="metric $IF_METRIC"
|
|
fi
|
|
|
|
ifconfig=/sbin/ifconfig
|
|
|
|
release=`uname -r`
|
|
release=`expr $release : '\(.*\)\..*'`
|
|
relmajor=`echo $release |sed -e 's/^\([^\.]*\)\..*$/\1/'`
|
|
relminor=`echo $release |sed -e 's/^.*\.\([^\.]*\)$/\1/'`
|
|
|
|
if [ x$reason = xMEDIUM ]; then
|
|
eval "$ifconfig $interface $medium"
|
|
$ifconfig $interface
|
|
sleep 1
|
|
exit_with_hooks 0
|
|
fi
|
|
|
|
if [ x$reason = xPREINIT ]; then
|
|
if [ x$alias_ip_address != x ]; then
|
|
$ifconfig ${interface}:1 0 down > /dev/null 2>&1
|
|
route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1
|
|
fi
|
|
if [ $relmajor -gt 5 ] || ( [ $relmajor -eq 5 ] && [ $relminor -ge 5 ] )
|
|
then
|
|
# Turn the interface on
|
|
$ifconfig $interface plumb
|
|
$ifconfig $interface up
|
|
else
|
|
$ifconfig $interface inet 0.0.0.0 netmask 0.0.0.0 \
|
|
broadcast 255.255.255.255 up
|
|
fi
|
|
exit_with_hooks 0
|
|
fi
|
|
|
|
if [ x$reason = xARPCHECK ] || [ x$reason = xARPSEND ]; then
|
|
exit_with_hooks 0;
|
|
fi
|
|
|
|
if [ x$reason = xBOUND ] || [ x$reason = xRENEW ] || \
|
|
[ x$reason = xREBIND ] || [ x$reason = xREBOOT ]; then
|
|
current_hostname=`hostname`
|
|
if [ x$current_hostname = x ] || \
|
|
[ x$current_hostname = x$old_host_name ]; then
|
|
if [ x$current_hostname = x ] || \
|
|
[ x$new_host_name != x$old_host_name ]; then
|
|
hostname $new_host_name
|
|
fi
|
|
fi
|
|
|
|
if [ x$old_ip_address != x ] && [ x$alias_ip_address != x ] && \
|
|
[ x$alias_ip_address != x$old_ip_address ]; then
|
|
$ifconfig ${interface}:1 inet 0 down > /dev/null 2>&1
|
|
route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1
|
|
fi
|
|
if [ x$old_ip_address != x ] && [ x$old_ip_address != x$new_ip_address ]; then
|
|
$ifconfig ${interface} inet 0 down
|
|
route delete $old_ip_address 127.1 >/dev/null 2>&1
|
|
for router in $old_routers; do
|
|
route delete default $router >/dev/null 2>&1
|
|
done
|
|
fi
|
|
if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \
|
|
[ x$reason = xBOUND ] || [ x$reason = xREBOOT ]; then
|
|
eval "$ifconfig $interface inet $new_ip_address $new_netmask_arg \
|
|
$new_broadcast_arg $mtu_arg $metric_arg $medium"
|
|
route add $new_ip_address 127.1 1 >/dev/null 2>&1
|
|
for router in $new_routers; do
|
|
route add default $router 1 >/dev/null 2>&1
|
|
done
|
|
else
|
|
# we haven't changed the address, have we changed other options
|
|
# that we wish to update?
|
|
if [ x$new_routers != x ] && [ x$new_routers != x$old_routers ] ; then
|
|
# if we've changed routers delete the old and add the new.
|
|
$LOGGER "New Routers: $new_routers"
|
|
for router in $old_routers; do
|
|
route delete default $router >/dev/null 2>&1
|
|
done
|
|
for router in $new_routers; do
|
|
route add default $router 1 >/dev/null 2>&1
|
|
done
|
|
fi
|
|
fi
|
|
if [ x$new_ip_address != x$alias_ip_address ] && [ x$alias_ip_address != x ];
|
|
then
|
|
$ifconfig ${interface}:1 inet $alias_ip_address $alias_subnet_arg
|
|
route add $alias_ip_address 127.0.0.1 1
|
|
fi
|
|
make_resolv_conf
|
|
exit_with_hooks 0
|
|
fi
|
|
|
|
if [ x$reason = xEXPIRE ] || [ x$reason = xFAIL ] || [ x$reason = xRELEASE ] \
|
|
|| [ x$reason = xSTOP ]; then
|
|
if [ x$alias_ip_address != x ]; then
|
|
$ifconfig ${interface}:1 0 down > /dev/null 2>&1
|
|
route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1
|
|
fi
|
|
if [ x$old_ip_address != x ]; then
|
|
$ifconfig $interface inet 0 down
|
|
route delete $old_ip_address 127.1 >/dev/null 2>&1
|
|
for router in $old_routers; do
|
|
route delete default $router >/dev/null 2>&1
|
|
done
|
|
fi
|
|
if [ x$alias_ip_address != x ]; then
|
|
$ifconfig ${interface}:1 inet $alias_ip_address $alias_subnet_arg
|
|
route add $alias_ip_address 127.0.0.1 1
|
|
fi
|
|
exit_with_hooks 0
|
|
fi
|
|
|
|
if [ x$reason = xTIMEOUT ]; then
|
|
if [ x$alias_ip_address != x ]; then
|
|
$ifconfig ${interface}:1 0 down > /dev/null 2>&1
|
|
route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1
|
|
fi
|
|
eval "$ifconfig $interface inet $new_ip_address $new_netmask_arg \
|
|
$new_broadcast_arg $mtu_arg $metric_arg $medium"
|
|
sleep 1
|
|
set $new_routers
|
|
if ping -s -n -I 1 $1 64 1; then
|
|
if [ x$new_ip_address != x$alias_ip_address ] && \
|
|
[ x$alias_ip_address != x ]; then
|
|
$ifconfig ${interface}:1 inet $alias_ip_address $alias_subnet_arg
|
|
route add $alias_ip_address 127.0.0.1 1
|
|
fi
|
|
route add $new_ip_address 127.1 1 >/dev/null 2>&1
|
|
for router in $new_routers; do
|
|
route add default $router 1 >/dev/null 2>&1
|
|
done
|
|
make_resolv_conf
|
|
exit_with_hooks 0
|
|
fi
|
|
$ifconfig $interface inet 0 down
|
|
for router in $old_routers; do
|
|
route delete default $router >/dev/null 2>&1
|
|
done
|
|
exit_with_hooks 1
|
|
fi
|
|
|
|
exit_with_hooks 0
|