From a775b3feeedbc68d96b458dad69febde9216dfe8 Mon Sep 17 00:00:00 2001 From: christos Date: Wed, 11 Apr 2001 21:22:53 +0000 Subject: [PATCH] general cleanup: 1. Use standard shell indentation 2. Use [ expr -a expr ] instead of [ expr ] && [ expr ] (same with -o and ||) 3. Cleanup 0 length string tests 4. Factor out the routing code 5. Use a large switch statement based on $reason instead of the endless if elif's 6. Use variables for filenames used 7. Test in all cases for the existance of domainname and hostname 8. No need for individual command redirections in structured statements. Thanks to kleink for testing and fixing my typos! --- usr.sbin/dhcp/client/scripts/netbsd | 426 +++++++++++++++------------- 1 file changed, 226 insertions(+), 200 deletions(-) diff --git a/usr.sbin/dhcp/client/scripts/netbsd b/usr.sbin/dhcp/client/scripts/netbsd index 3c2f9ae8a1f3..4cb206b89e3b 100644 --- a/usr.sbin/dhcp/client/scripts/netbsd +++ b/usr.sbin/dhcp/client/scripts/netbsd @@ -1,230 +1,256 @@ #!/bin/sh # -# $NetBSD: netbsd,v 1.12 2001/04/02 23:45:54 mellon Exp $ +# $NetBSD: netbsd,v 1.13 2001/04/11 21:22:53 christos Exp $ + +ENTERHOOKS=/etc/dhclient-enter-hooks +EXITHOOKS=/etc/dhclient-exit-hooks +RESOLV=/etc/resolv.conf make_resolv_conf() { - echo search $new_domain_name >/etc/resolv.conf - for nameserver in $new_domain_name_servers; do - echo nameserver $nameserver >>/etc/resolv.conf - done + echo search $new_domain_name > $RESOLV + for nameserver in $new_domain_name_servers; do + echo nameserver $nameserver >> $RESOLV + done } # Must be used on exit. Invokes the local dhcp client exit hooks, if any. exit_with_hooks() { - exit_status=$1 - if [ -x /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 [ -x "$EXITHOOKS" ]; then + . "$EXITHOOKS" + fi + # probably should do something with exit status of the local script + exit $exit_status +} + + +add_new_routes() { + for router in $new_routers; do + route add default $router + done >/dev/null 2>&1 + + set -- $new_static_routes + while [ $# -gt 1 ]; do + route add $0 $1 + shift; shift + done +} + +delete_old_routes() { + for router in $old_routers; do + route delete default $router >/dev/null 2>&1 + done + if [ ! -z "$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 -n -d \1/p' | sh } # Invoke the local dhcp client enter hooks, if they exist. -if [ -x /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 +if [ -x $ENTERHOOKS ]; then + exit_status=0 + . $ENTERHOOKS + # 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_host_name != x ]; then - echo New Host Name: $new_host_name +if [ ! -z "$new_host_name" ]; then + echo New Host Name: $new_host_name fi -if [ x$new_nis_domain != x ]; then - echo New NIS Domain: $new_nis_domain +if [ ! -z "$new_nis_domain" ]; then + echo New NIS Domain: $new_nis_domain fi -if [ x$new_network_number != x ]; then - echo New Network Number: $new_network_number +if [ ! -z "$new_network_number" ]; then + echo New Network Number: $new_network_number fi -if [ x$new_broadcast_address != x ]; then - echo 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" +if [ ! -z "$new_broadcast_address" ]; then + echo New Broadcast Address: $new_broadcast_address + new_broadcast_arg="broadcast $new_broadcast_address" fi -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_with_hooks 0 +if [ ! -z "$old_broadcast_address" ]; then + old_broadcast_arg="broadcast $old_broadcast_address" fi -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_with_hooks 0 +if [ ! -z "$new_subnet_mask" ]; then + new_netmask_arg="netmask $new_subnet_mask" fi -if [ x$reason = xARPCHECK ] || [ x$reason = xARPSEND ]; then - exit_with_hooks 0 +if [ ! -z "$old_subnet_mask" ]; then + old_netmask_arg="netmask $old_subnet_mask" fi - -if [ x$reason = xBOUND ] || [ x$reason = xRENEW ] || \ - [ x$reason = xREBIND ] || [ x$reason = xREBOOT ]; then - if type domainname > /dev/null 2>&1; then - if [ x$new_nis_domain != x ]; then - domainname $new_nis_domain - fi - fi - if type hostname > /dev/null 2>&1; 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 - fi + +if [ ! -z "$alias_subnet_mask" ]; then + alias_subnet_arg="netmask $alias_subnet_mask" +fi + +case "$reason" in +MEDIUM) + eval "ifconfig $interface $medium" + eval "ifconfig $interface inet -alias 0.0.0.0 $medium" >/dev/null 2>&1 + + sleep 1 + + exit_with_hooks 0 + ;; + +PREINIT) + if [ ! -z "$alias_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 + + ifconfig $interface inet 0.0.0.0 netmask 0.0.0.0 \ + broadcast 255.255.255.255 up + + exit_with_hooks 0 + ;; + +ARPCHECK|ARPSEND) + exit_with_hooks 0 + ;; + +BOUND|RENEW|REBIND|REBOOT) + if [ ! -z "$new_nis_domain" ]; then + if type domainname > /dev/null 2>&1; then + domainname $new_nis_domain + fi + fi + + if type hostname > /dev/null 2>&1; then + if [ \( -z "$current_hostname" \) -o \ + \( "x$new_host_name" = "x$old_hostname" \) ]; then + current_hostname=`hostname` + fi + if [ \( -z $current_hostname \) -o \ + \( "x$new_host_name" != "x$old_hostname" \) ]; 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 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 [ "$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 -n -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" - 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 [ "$new_static_routes" != "" ]; then - 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 + if [ \( ! -z "$old_ip_address" \) -a \( ! -z "$alias_ip_address" \) -a \ + \( "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$reason = xEXPIRE ] || [ x$reason = xFAIL ]; then - if [ x$old_nis_domain != x ]; then - # delete the old nis domain name - domainname "" - fi - 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 [ "$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 -n -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 + if [ \( ! -z "$old_ip_address" \) -a \ + \( "x$old_ip_address" != "x$new_ip_address" \) ]; then + eval "ifconfig $interface inet -alias $old_ip_address $medium" + route delete $old_ip_address 127.0.0.1 >/dev/null 2>&1 -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 - if [ x$new_host_name != x ]; then - hostname $new_host_name - fi - if [ x$new_nis_domain != x ]; then - domainname $new_nis_domain - fi - eval "ifconfig $interface inet $new_ip_address $new_netmask_arg \ - $new_broadcast_arg $medium" - sleep 1 - if [ "$new_routers" != "" ]; then - set $new_routers - if ping -n -q -c 1 -w 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 $0 $1 - 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 [ "$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 -n -d \1/p' \ - |sh >/dev/null 2>&1 - exit_with_hooks 1 -fi + delete_old_routes + fi -exit_with_hooks 0 + if [ \( -z "$old_ip_address" \) -o \ + \( "x$old_ip_address" != "x$new_ip_address" \) -o \ + \( "x$reason" = "xBOUND" \) -o \( "x$reason" = "xREBOOT" \) ]; then + eval "ifconfig $interface inet $new_ip_address \ + $new_netmask_arg $new_broadcast_arg $medium" + route add $new_ip_address 127.0.0.1 >/dev/null 2>&1 + + add_new_routes + fi + + if [ \( ! -z "$alias_ip_address" \) -a \ + \( "x$new_ip_address" != "x$alias_ip_address" \) ]; 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 + ;; + +EXPIRE|FAIL) + if [ ! -z "$old_nis_domain" ]; then + if type domainname > /dev/null 2>&1; then + # delete the old nis domain name + domainname "" + fi + fi + + if [ ! -z "$alias_ip_address" ]; then + ifconfig $interface inet -alias $alias_ip_address + route delete $alias_ip_address 127.0.0.1 + fi > /dev/null 2>&1 + + if [ ! -z "$old_ip_address" ]; then + eval "ifconfig $interface inet -alias $old_ip_address $medium" + route delete $old_ip_address 127.0.0.1 >/dev/null 2>&1 + delete_old_routes + + fi + + if [ ! -z "$alias_ip_address" ]; 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 + ;; + +TIMEOUT) + if [ ! -z "$alias_ip_address" ]; then + ifconfig $interface inet -alias $alias_ip_address + route delete $alias_ip_address 127.0.0.1 + fi > /dev/null 2>&1 + + if [ ! -z "$new_host_name" ]; then + if type hostname > /dev/null 2>&1; then + hostname $new_host_name + fi + fi + + if [ ! -z "$new_nis_domain" ]; then + if type domainname > /dev/null 2>&1; then + domainname $new_nis_domain + fi + fi + + eval "ifconfig $interface inet $new_ip_address $new_netmask_arg \ + $new_broadcast_arg $medium" + sleep 1 + + if [ ! -z "$new_routers" ]; then + set -- $new_routers + if ping -n -q -c 1 -w 1 $1; then + if [ \( ! -z "$alias_ip_address" \) -a \ + \( "x$new_ip_address" != "x$alias_ip_address" \) ] + 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.0.0.1 >/dev/null 2>&1 + + add_new_routes + make_resolv_conf + exit_with_hooks 0 + fi + fi + + eval "ifconfig $interface inet -alias $new_ip_address $medium" + + delete_old_routes + + exit_with_hooks 1 + ;; +*) + exit_with_hooks 0 + ;; +esac