xref: /dflybsd-src/sbin/dhclient/dhclient-script (revision 8e373f92c67abdd7b3ed6dcfa213d311a241bc3f)
1846204b6SHasso Tepper#!/bin/sh
2846204b6SHasso Tepper#
3*8e373f92SAntonio Huete Jimenez# $OpenBSD: src/sbin/dhclient/Attic/dhclient-script,v 1.23 2012/09/18 18:27:55 krw Exp $
4846204b6SHasso Tepper#
5846204b6SHasso Tepper# Copyright (c) 2003 Kenneth R Westerback <krw@openbsd.org>
6846204b6SHasso Tepper#
7846204b6SHasso Tepper# Permission to use, copy, modify, and distribute this software for any
8846204b6SHasso Tepper# purpose with or without fee is hereby granted, provided that the above
9846204b6SHasso Tepper# copyright notice and this permission notice appear in all copies.
10846204b6SHasso Tepper#
11846204b6SHasso Tepper# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12846204b6SHasso Tepper# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13846204b6SHasso Tepper# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14846204b6SHasso Tepper# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15846204b6SHasso Tepper# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16846204b6SHasso Tepper# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17846204b6SHasso Tepper# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18846204b6SHasso Tepper#
19846204b6SHasso Tepper#
20846204b6SHasso Tepper
21846204b6SHasso Tepper#
22846204b6SHasso Tepper# Helper functions that implement common actions.
23846204b6SHasso Tepper#
24846204b6SHasso Tepper
25846204b6SHasso Tepperdelete_old_address() {
26846204b6SHasso Tepper	if [ -n "$old_ip_address" ]; then
277cbe3601SAntonio Huete Jimenez		ifconfig $interface inet $old_ip_address delete
2834910103SAntonio Huete Jimenez		#route delete "$old_ip_address" 127.0.0.1 >/dev/null 2>&1
29846204b6SHasso Tepper	fi
30846204b6SHasso Tepper}
31846204b6SHasso Tepper
32846204b6SHasso Tepperadd_new_address() {
33846204b6SHasso Tepper	ifconfig $interface \
34846204b6SHasso Tepper		inet $new_ip_address \
35846204b6SHasso Tepper		netmask $new_subnet_mask \
367cbe3601SAntonio Huete Jimenez		broadcast $new_broadcast_address
37846204b6SHasso Tepper
38846204b6SHasso Tepper	# XXX Original TIMEOUT code did not do this unless $new_routers was set?
3934910103SAntonio Huete Jimenez	#route add $new_ip_address 127.0.0.1 >/dev/null 2>&1
40846204b6SHasso Tepper}
41846204b6SHasso Tepper
42846204b6SHasso Tepperdelete_old_routes() {
43846204b6SHasso Tepper	arp -dan
44846204b6SHasso Tepper}
45846204b6SHasso Tepper
46846204b6SHasso Tepperadd_new_routes() {
47846204b6SHasso Tepper	for router in $new_routers; do
483a961bf3SAntonio Huete Jimenez		route -q delete default
49846204b6SHasso Tepper		if [ "$new_ip_address" = "$router" ]; then
503a961bf3SAntonio Huete Jimenez			route -q add default -iface $router
51846204b6SHasso Tepper		else
523a961bf3SAntonio Huete Jimenez			route -q add default $router
53846204b6SHasso Tepper		fi
54846204b6SHasso Tepper		# 2nd and subsequent default routers error out, so explicitly
55846204b6SHasso Tepper		# stop processing the list after the first one.
56846204b6SHasso Tepper		break
57846204b6SHasso Tepper	done
58846204b6SHasso Tepper}
59846204b6SHasso Tepper
60846204b6SHasso Tepperadd_new_resolv_conf() {
61b976f566SAntonio Huete Jimenez	# Create resolv.conf when either $new_domain_name_servers or
62b976f566SAntonio Huete Jimenez	# $new_domain_name are provided. As reported in PR#3135, some ISPs
63b976f566SAntonio Huete Jimenez	# provide only $new_domain_name_servers.
64846204b6SHasso Tepper
65846204b6SHasso Tepper	rm -f /etc/resolv.conf.std
66846204b6SHasso Tepper
67846204b6SHasso Tepper	if [ -n "$new_domain_name" ]; then
68846204b6SHasso Tepper		echo "search $new_domain_name" >>/etc/resolv.conf.std
69846204b6SHasso Tepper	fi
70846204b6SHasso Tepper
71846204b6SHasso Tepper	if [ -n "$new_domain_name_servers" ]; then
72846204b6SHasso Tepper		for nameserver in $new_domain_name_servers; do
73846204b6SHasso Tepper			echo "nameserver $nameserver" >>/etc/resolv.conf.std
74846204b6SHasso Tepper		done
75846204b6SHasso Tepper	fi
76846204b6SHasso Tepper
77846204b6SHasso Tepper	if [ -f /etc/resolv.conf.std ]; then
78846204b6SHasso Tepper		if [ -f /etc/resolv.conf.tail ]; then
79846204b6SHasso Tepper			cat /etc/resolv.conf.tail >>/etc/resolv.conf.std
80846204b6SHasso Tepper		fi
81846204b6SHasso Tepper
82846204b6SHasso Tepper		# In case (e.g. during OpenBSD installs) /etc/resolv.conf
83846204b6SHasso Tepper		# is a symbolic link, take care to preserve the link and write
84846204b6SHasso Tepper		# the new data in the correct location.
85846204b6SHasso Tepper
86846204b6SHasso Tepper		if [ -f /etc/resolv.conf ]; then
87846204b6SHasso Tepper			cat /etc/resolv.conf > /etc/resolv.conf.save
88846204b6SHasso Tepper		fi
89846204b6SHasso Tepper		cat /etc/resolv.conf.std > /etc/resolv.conf
90846204b6SHasso Tepper		rm -f /etc/resolv.conf.std
91846204b6SHasso Tepper
92846204b6SHasso Tepper		# Try to ensure correct ownership and permissions.
93846204b6SHasso Tepper		chown -RL root:wheel /etc/resolv.conf
94846204b6SHasso Tepper		chmod -RL 644 /etc/resolv.conf
95846204b6SHasso Tepper
96846204b6SHasso Tepper		return 0
97846204b6SHasso Tepper	fi
98846204b6SHasso Tepper
99846204b6SHasso Tepper	return 1
100846204b6SHasso Tepper}
101846204b6SHasso Tepper
102846204b6SHasso Tepper#
103846204b6SHasso Tepper# Start of active code.
104846204b6SHasso Tepper#
105846204b6SHasso Tepper
106846204b6SHasso Teppercase $reason in
107846204b6SHasso TepperMEDIUM)
1087cbe3601SAntonio Huete Jimenez	# Not called by OpenBSD dhclient(8).
109846204b6SHasso Tepper	;;
110846204b6SHasso Tepper
111846204b6SHasso TepperPREINIT)
1127cbe3601SAntonio Huete Jimenez	# Not called by OpenBSD dhclient(8).
113601f8f90SAntonio Huete Jimenez	;;
114601f8f90SAntonio Huete Jimenez
115601f8f90SAntonio Huete JimenezARPSEND)
1167cbe3601SAntonio Huete Jimenez	# Not called by OpenBSD dhclient(8).
117601f8f90SAntonio Huete Jimenez	exit 1
118846204b6SHasso Tepper	;;
119846204b6SHasso Tepper
1207cbe3601SAntonio Huete JimenezARPCHECK)
1217cbe3601SAntonio Huete Jimenez	# Not called by OpenBSD dhclient(8).
1227cbe3601SAntonio Huete Jimenez	# Always succeed. i.e. accept lease.
1237cbe3601SAntonio Huete Jimenez	;;
1247cbe3601SAntonio Huete Jimenez
125846204b6SHasso TepperBOUND|RENEW|REBIND|REBOOT)
126846204b6SHasso Tepper	if [ -n "$old_ip_address" ]; then
127846204b6SHasso Tepper		if [ "$old_ip_address" != "$new_ip_address" ]; then
128846204b6SHasso Tepper			delete_old_address
129846204b6SHasso Tepper			delete_old_routes
130846204b6SHasso Tepper		fi
131846204b6SHasso Tepper	fi
132846204b6SHasso Tepper	if [ "$reason" = BOUND ] ||
133846204b6SHasso Tepper	   [ "$reason" = REBOOT ] ||
134846204b6SHasso Tepper	   [ -z "$old_ip_address" ] ||
135846204b6SHasso Tepper	   [ "$old_ip_address" != "$new_ip_address" ]; then
136846204b6SHasso Tepper		add_new_address
137846204b6SHasso Tepper		add_new_routes
138846204b6SHasso Tepper	fi
139846204b6SHasso Tepper	add_new_resolv_conf
140846204b6SHasso Tepper	;;
141846204b6SHasso Tepper
142846204b6SHasso TepperEXPIRE|FAIL)
143846204b6SHasso Tepper	if [ -n "$old_ip_address" ]; then
144846204b6SHasso Tepper		delete_old_address
145846204b6SHasso Tepper		delete_old_routes
146846204b6SHasso Tepper	fi
147846204b6SHasso Tepper	if [ -f /etc/resolv.conf.save ]; then
148846204b6SHasso Tepper		cat /etc/resolv.conf.save > /etc/resolv.conf
149*8e373f92SAntonio Huete Jimenez		rm -f /etc/resolv.conf.save
150846204b6SHasso Tepper	fi
151846204b6SHasso Tepper	;;
152846204b6SHasso Tepper
153846204b6SHasso TepperTIMEOUT)
154846204b6SHasso Tepper	add_new_address
155846204b6SHasso Tepper	sleep 1
156846204b6SHasso Tepper	if [ -n "$new_routers" ]; then
157846204b6SHasso Tepper		set "$new_routers"
158846204b6SHasso Tepper		if ping -q -c 1 -w 1 "$1"; then
159846204b6SHasso Tepper			add_new_routes
160846204b6SHasso Tepper			if add_new_resolv_conf; then
161846204b6SHasso Tepper				exit 0
162846204b6SHasso Tepper			fi
163846204b6SHasso Tepper		fi
164846204b6SHasso Tepper	fi
165057c89ffSAntonio Huete Jimenez	ifconfig $interface inet $new_ip_address delete
166846204b6SHasso Tepper	# XXX Why not a delete_old_address as before all other invocations of
167846204b6SHasso Tepper	#     delete_old_routes?
168846204b6SHasso Tepper	delete_old_routes
169846204b6SHasso Tepper	exit 1
170846204b6SHasso Tepper	;;
171846204b6SHasso Tepperesac
172846204b6SHasso Tepper
173846204b6SHasso Tepperexit 0
174