summaryrefslogtreecommitdiffstats
path: root/sbin/dhclient-script
diff options
context:
space:
mode:
authorScott Ullrich <sullrich@pfsense.org>2005-08-28 02:32:16 +0000
committerScott Ullrich <sullrich@pfsense.org>2005-08-28 02:32:16 +0000
commitc5cbdb532f0df786b57c6718f81ca1a750fb6dfd (patch)
tree325c9e6a469b9f1e22b1c77129fa38b1a235248f /sbin/dhclient-script
parent7916216b6eef4e54e1fb1c6bd637804a482c17b7 (diff)
downloadpfsense-c5cbdb532f0df786b57c6718f81ca1a750fb6dfd.zip
pfsense-c5cbdb532f0df786b57c6718f81ca1a750fb6dfd.tar.gz
Restore previous dhclient-script.
Diffstat (limited to 'sbin/dhclient-script')
-rwxr-xr-xsbin/dhclient-script474
1 files changed, 207 insertions, 267 deletions
diff --git a/sbin/dhclient-script b/sbin/dhclient-script
index 6e83744..1eb7e96 100755
--- a/sbin/dhclient-script
+++ b/sbin/dhclient-script
@@ -1,294 +1,234 @@
#!/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) 2003 Kenneth R Westerback <krw@openbsd.org>
-#
-# Permission to use, copy, modify, and distribute this software for any
-# purpose with or without fee is hereby granted, provided that the above
-# copyright notice and this permission notice appear in all copies.
-#
-# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-# 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.
-#
+# $Id$
#
-
-NETSTAT=/usr/bin/netstat
-GREP=/usr/bin/grep
-AWK=/usr/bin/awk
-HOSTNAME=/bin/hostname
-
-LOCALHOST=127.0.0.1
+# $FreeBSD: src/contrib/isc-dhcp/client/scripts/freebsd,v 1.9.2.6 2003/03/02 16:42:38 murray Exp $
if [ -x /usr/bin/logger ]; then
- LOGGER="/usr/bin/logger -s -p user.notice -t dhclient"
+ LOGGER="/usr/bin/logger -s -p user.notice -t dhclient"
else
- LOGGER=echo
+ LOGGER=echo
fi
-#
-# 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() {
- ifconfig $interface inet -alias $old_ip_address $medium
-}
-
-add_new_address() {
- ifconfig $interface \
- inet $new_ip_address \
- netmask $new_subnet_mask \
- broadcast $new_broadcast_address \
- $medium
-
- $LOGGER "New IP Address ($interface): $new_ip_address"
- $LOGGER "New Subnet Mask ($interface): $new_subnet_mask"
- $LOGGER "New Broadcast Address ($interface): $new_broadcast_address"
- $LOGGER "New Routers ($interface): $new_routers"
-
- echo $new_routers > /tmp/${interface}_router
-
-}
-
-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() {
- if [ -n "$alias_ip_address" ]; then
- ifconfig $interface inet alias $alias_ip_address netmask \
- $alias_subnet_mask
- route add $alias_ip_address $LOCALHOST
- fi
-}
-
-delete_old_routes() {
- route delete "$old_ip_address" $LOCALHOST >/dev/null 2>&1
- for router in $old_routers; do
- if [ $if_defaultroute = x -o $if_defaultroute = $interface ]; then
- route delete default $route >/dev/null 2>&1
- rm -f /tmp/${interface}_router
- fi
- done
-
- if [ -n "$old_static_routes" ]; then
- set $old_static_routes
- while [ $# -gt 1 ]; do
- route delete "$1" "$2"
- shift; shift
- rm -f /tmp/${interface}_router
- done
- fi
-
- arp_flush
-}
-
-add_new_routes() {
- route add $new_ip_address $LOCALHOST >/dev/null 2>&1
- for router in $new_routers; do
- if [ "$new_ip_address" = "$router" ]; then
- route add default -iface $router >/dev/null 2>&1
- else
- route add default $router >/dev/null 2>&1
- echo $new_routers > /tmp/${interface}_router
- fi
- # 2nd and subsequent default routers error out, so explicitly
- # stop processing the list after the first one.
- break
- done
-
- if [ -n "$new_static_routes" ]; then
- $LOGGER "New Static Routes ($interface): $new_static_routes"
- set $new_static_routes
- while [ $# -gt 1 ]; do
- route add $1 $2
- shift; shift
- echo $new_routers > /tmp/${interface}_router
- done
- fi
-}
-
-add_new_resolv_conf() {
- # XXX Old code did not create/update resolv.conf unless both
- # $new_domain_name and $new_domain_name_servers were provided. PR
- # #3135 reported some ISP's only provide $new_domain_name_servers and
- # thus broke the script. This code creates the resolv.conf if either
- # are provided.
-
- rm -f /var/etc/resolv.conf.std
-
- if [ -n "$new_domain_name" ]; then
- echo "search $new_domain_name" >>/var/etc/resolv.conf.std
- fi
-
- rm -f /var/etc/nameservers.conf
-
- if [ -n "$new_domain_name_servers" ]; then
- for nameserver in $new_domain_name_servers; do
- echo "nameserver $nameserver" >>/var/etc/resolv.conf.std
- echo $nameserver >>/var/etc/nameservers.conf
- echo $new_domain_name >/var/etc/defaultdomain.conf
- done
- fi
-
- if [ -f /var/etc/resolv.conf.std ]; then
- if [ -f /var/etc/resolv.conf.tail ]; then
- cat /var/etc/resolv.conf.tail >>/var/etc/resolv.conf.std
- fi
-
- # In case (e.g. during OpenBSD installs) /var/etc/resolv.conf
- # is a symbolic link, take care to preserve the link and write
- # the new data in the correct location.
-
- if [ -f /var/etc/resolv.conf ]; then
- cat /var/etc/resolv.conf > /var/etc/resolv.conf.save
- fi
- cat /var/etc/resolv.conf.std > /var/etc/nameservers.conf
- cat /var/etc/resolv.conf.std > /var/etc/resolv.conf
- rm -f /var/etc/resolv.conf.std
-
- # Try to ensure correct ownership and permissions.
- chown -RL root:wheel /var/etc/resolv.conf
- chmod -RL 644 /var/etc/resolv.conf
-
- return 0
- fi
-
- return 1
+make_resolv_conf() {
+ if [ x"$new_domain_name_servers" != x ]; then
+ if [ "x$new_domain_name" != x ]; then
+ echo $new_domain_name >/var/etc/defaultdomain.conf
+ else
+ rm -f /var/etc/defaultdomain.conf
+ fi
+ rm -f /var/etc/nameservers.conf
+ for nameserver in $new_domain_name_servers; do
+ echo $nameserver >>/var/etc/nameservers.conf
+ done
+ 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
+ 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
}
-#
-# 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
+ 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 $NETSTAT ]; then
- if_defaulroute=`$NETSTAT -rn | $GREP "^default" | $AWK '{print $6}'`
-else
- if_defaultroute="x"
+if [ x$new_network_number != x ]; then
+ $LOGGER New Network Number: $new_network_number
fi
-case $reason in
-MEDIUM)
- ifconfig $interface $medium
- ifconfig $interface inet -alias 0.0.0.0 $medium >/dev/null 2>&1
- sleep 1
- ;;
+if [ x$new_broadcast_address != x ]; then
+ $LOGGER New Broadcast Address: $new_broadcast_address
+ 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
-PREINIT)
- delete_old_alias
- ifconfig $interface inet 0.0.0.0 netmask 0.0.0.0 broadcast 255.255.255.255 up
- rm -f /tmp/${interface}_router
- ;;
+if [ x$reason = xMEDIUM ]; then
+ eval "ifconfig $interface $medium"
+ eval "ifconfig $interface inet -alias 0.0.0.0 $medium" >/dev/null 2>&1
+ sleep 1
+ exit 0
+fi
-ARPCHECK|ARPSEND)
- ;;
+if [ x$reason = xPREINIT ]; then
+ if [ x$alias_ip_address != x ]; then
+ ifconfig $interface inet -alias $alias_ip_address > /dev/null 2>&1
+ route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1
+ fi
+ ifconfig $interface inet 0.0.0.0 netmask 0.0.0.0 \
+ broadcast 255.255.255.255 up
+ exit 0
+fi
+
+if [ x$reason = xARPCHECK ] || [ x$reason = xARPSEND ]; then
+ exit 0;
+fi
-BOUND|RENEW|REBIND|REBOOT)
- check_hostname
- if [ -n "$old_ip_address" ]; then
- if [ "$old_ip_address" != "$alias_ip_address" ]; then
- delete_old_alias
- fi
- if [ "$old_ip_address" != "$new_ip_address" ]; then
- delete_old_address
- delete_old_routes
- fi
- fi
- if [ "$reason" = BOUND ] || \
- [ "$reason" = REBOOT ] || \
- [ -z "$old_ip_address" ] || \
- [ "$old_ip_address" != "$new_ip_address" ]; then
- add_new_address
- add_new_routes
- fi
- if [ "$new_ip_address" != "$alias_ip_address" ]; then
- add_new_alias
- fi
- add_new_resolv_conf
- ;;
+if [ x$reason = xBOUND ] || [ x$reason = xRENEW ] || \
+ [ x$reason = xREBIND ] || [ x$reason = xREBOOT ]; then
+ current_hostname=`/bin/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
+ $LOGGER "New Hostname: $new_host_name"
+ 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 inet -alias $alias_ip_address > /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
+ eval "ifconfig $interface inet -alias $old_ip_address $medium"
+ 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
+ if [ -n "$old_static_routes" ]; then
+ set -- $old_static_routes
+ while [ $# -gt 1 ]; do
+ route delete $1 $2
+ shift; shift
+ done
+ fi
+ arp -n -a | sed -n -e 's/^.*(\(.*\)) at .*$/arp -d \1/p' |sh
+ 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 $medium"
+ $LOGGER "New IP Address ($interface): $new_ip_address"
+ $LOGGER "New Subnet Mask ($interface): $new_subnet_mask"
+ $LOGGER "New Broadcast Address ($interface): $new_broadcast_address"
+ if [ -n "$new_routers" ]; then
+ $LOGGER "New Routers: $new_routers"
+ echo $new_routers > /tmp/${interface}_router
+ fi
+ route add $new_ip_address 127.1 >/dev/null 2>&1
+ for router in $new_routers; do
+ route add default $router >/dev/null 2>&1
+ done
+ if [ -n "$new_static_routes" ]; then
+ $LOGGER "New Static Routes: $new_static_routes"
+ set -- $new_static_routes
+ while [ $# -gt 1 ]; do
+ route add $1 $2
+ shift; shift
+ done
+ fi
+ fi
+ if [ x$new_ip_address != x$alias_ip_address ] && [ x$alias_ip_address != x ];
+ then
+ ifconfig $interface inet alias $alias_ip_address $alias_subnet_arg
+ route add $alias_ip_address 127.0.0.1
+ fi
+ make_resolv_conf
+ exit_with_hooks 0
+fi
-EXPIRE|FAIL)
- delete_old_alias
- if [ -n "$old_ip_address" ]; then
- delete_old_address
- delete_old_routes
- fi
- # XXX Why add alias we just deleted above?
- add_new_alias
- if [ -f /var/etc/resolv.conf.save ]; then
- cat /var/etc/resolv.conf.save > /var/etc/resolv.conf
- fi
- ;;
+if [ x$reason = xEXPIRE ] || [ x$reason = xFAIL ] || [ x$reason = xRELEASE ] \
+ || [ x$reason = xSTOP ]; then
+ if [ x$alias_ip_address != x ]; then
+ ifconfig $interface inet -alias $alias_ip_address > /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
+ eval "ifconfig $interface inet -alias $old_ip_address $medium"
+ 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
+ if [ -n "$old_static_routes" ]; then
+ set -- $old_static_routes
+ while [ $# -gt 1 ]; do
+ route delete $1 $2
+ shift; shift
+ done
+ fi
+ arp -n -a | sed -n -e 's/^.*(\(.*\)) at .*$/arp -d \1/p' \
+ |sh >/dev/null 2>&1
+ fi
+ if [ x$alias_ip_address != x ]; then
+ ifconfig $interface inet alias $alias_ip_address $alias_subnet_arg
+ route add $alias_ip_address 127.0.0.1
+ fi
+ exit_with_hooks 0
+fi
-TIMEOUT)
- delete_old_alias
- add_new_address
- sleep 1
- if [ -n "$new_routers" ]; then
- $LOGGER "New Routers ($interface): $new_routers"
- set "$new_routers"
- if ping -q -c 1 -w 1 "$1"; then
- if [ "$new_ip_address" != "$alias_ip_address" ]; then
- add_new_alias
- fi
- add_new_routes
- if add_new_resolv_conf; then
- exit_with_hooks 0
- fi
- fi
- fi
- ifconfig $interface inet -alias $new_ip_address $medium
- delete_old_routes
- exit_with_hooks 1
- ;;
-esac
+if [ x$reason = xTIMEOUT ]; then
+ if [ x$alias_ip_address != x ]; then
+ ifconfig $interface inet -alias $alias_ip_address > /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 $medium"
+ $LOGGER "New IP Address ($interface): $new_ip_address"
+ $LOGGER "New Subnet Mask ($interface): $new_subnet_mask"
+ $LOGGER "New Broadcast Address ($interface): $new_broadcast_address"
+ sleep 1
+ if [ -n "$new_routers" ]; then
+ $LOGGER "New Routers: $new_routers"
+ echo $new_routers > /tmp/${interface}_router
+ set -- $new_routers
+ if ping -q -c 1 $1; then
+ if [ x$new_ip_address != x$alias_ip_address ] && \
+ [ x$alias_ip_address != x ]; then
+ ifconfig $interface inet alias $alias_ip_address $alias_subnet_arg
+ route add $alias_ip_address 127.0.0.1
+ fi
+ route add $new_ip_address 127.1 >/dev/null 2>&1
+ for router in $new_routers; do
+ route add default $router >/dev/null 2>&1
+ done
+ set -- $new_static_routes
+ while [ $# -gt 1 ]; do
+ route add $1 $2
+ shift; shift
+ done
+ make_resolv_conf
+ exit_with_hooks 0
+ fi
+ fi
+ eval "ifconfig $interface inet -alias $new_ip_address $medium"
+ for router in $old_routers; do
+ route delete default $router >/dev/null 2>&1
+ done
+ if [ -n "$old_static_routes" ]; then
+ set -- $old_static_routes
+ while [ $# -gt 1 ]; do
+ route delete $1 $2
+ shift; shift
+ done
+ fi
+ arp -n -a | sed -n -e 's/^.*(\(.*\)) at .*$/arp -d \1/p' \
+ |sh >/dev/null 2>&1
+ exit_with_hooks 1
+fi
exit_with_hooks 0
OpenPOWER on IntegriCloud