File: bind9.named.init

package info (click to toggle)
bind9 1%3A9.20.18-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 43,380 kB
  • sloc: ansic: 315,561; sh: 50,116; python: 23,452; perl: 3,734; makefile: 2,247
file content (150 lines) | stat: -rw-r--r-- 3,405 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#!/bin/sh -e

### BEGIN INIT INFO
# Provides:          bind bind9
# Required-Start:    $remote_fs
# Required-Stop:     $remote_fs
# Should-Start:      $network $syslog
# Should-Stop:       $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start and stop BIND 9 Domain Name Server
# Description:       BIND 9 is a Domain Name Server (DNS)
#        which translates ip addresses to and from internet names
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin

# for a chrooted server: "-u bind -t /var/lib/named"
# Don't modify this line, instead change or create /etc/default/named.
OPTIONS=""
RESOLVCONF=no

test -f /etc/default/named && . /etc/default/named

test -x /usr/sbin/rndc || exit 0

. /lib/lsb/init-functions
PIDFILE=/run/named/named.pid

check_network() {
	result=0
	if [ -x /usr/bin/uname ] && [ "X$(/usr/bin/uname -o)" = XSolaris ]; then
		LIST_NICS_IP=$(ifconfig -au) || result=$?
	else
		LIST_NICS_IP=$(ip addr) || result=$?
	fi
	if [ $result -ne 0 ] || [ -z "${LIST_NICS_IP}" ]; then
		#log_action_msg "No networks configured."
		return 1
	fi
	return 0
}

case "$1" in
start)
	log_daemon_msg "Starting domain name service..." "named"

	modprobe capability >/dev/null 2>&1 || true

	# dirs under /run can go away on reboots.
	mkdir -p /run/named
	chmod 775 /run/named
	chown root:bind /run/named >/dev/null 2>&1 || true

	if [ ! -x /usr/sbin/named ]; then
		log_action_msg "named binary missing - not starting"
		log_end_msg 1
	fi

	if ! check_network; then
		log_action_msg "no networks configured"
		log_end_msg 1
	fi

	if start-stop-daemon --start --oknodo --quiet --exec /usr/sbin/named \
		--pidfile ${PIDFILE} -- $OPTIONS; then
		if [ "X$RESOLVCONF" != "Xno" ] && command -v resolvconf >/dev/null; then
			echo "nameserver 127.0.0.1" | resolvconf -a lo.named
		fi
		log_end_msg 0
	else
		log_end_msg 1
	fi
	;;

stop)
	log_daemon_msg "Stopping domain name service..." "named"
	if ! check_network; then
		log_action_msg "no networks configured"
		log_end_msg 1
	fi

	if [ "X$RESOLVCONF" != "Xno" ] && command -v resolvconf >/dev/null; then
		resolvconf -d lo.named
	fi
	pid=$(/usr/sbin/rndc stop -p | awk '/^pid:/ {print $2}') || true
	if [ -z "$pid" ]; then # no pid found, so either not running, or error
		pid=$(pgrep -f ^/usr/sbin/named) || true
		start-stop-daemon --stop --oknodo --quiet --exec /usr/sbin/named \
			--pidfile ${PIDFILE} -- $OPTIONS
	fi
	if [ -n "$pid" ]; then
		sig=0
		n=1
		while kill -$sig "$pid" 2>/dev/null; do
			if [ $n -eq 1 ]; then
				echo "waiting for pid $pid to die"
			fi
			if [ $n -eq 11 ]; then
				echo "giving up on pid $pid with kill -0; trying -9"
				sig=9
			fi
			if [ $n -gt 20 ]; then
				echo "giving up on pid $pid"
				break
			fi
			n=$((n + 1))
			sleep 1
		done
	fi
	log_end_msg 0
	;;

reload | force-reload)
	log_daemon_msg "Reloading domain name service..." "named"
	if ! check_network; then
		log_action_msg "no networks configured"
		log_end_msg 1
	fi

	if /usr/sbin/rndc reload >/dev/null; then
		log_end_msg 0
	else
		log_end_msg 1
	fi
	;;

restart)
	if ! check_network; then
		log_action_msg "no networks configured"
		exit 1
	fi

	$0 stop
	$0 start
	;;

status)
	ret=0
	status_of_proc -p ${PIDFILE} /usr/sbin/named bind 2>/dev/null || ret=$?
	exit $ret
	;;

*)
	log_action_msg "Usage: /etc/init.d/named {start|stop|reload|restart|force-reload|status}"
	exit 1
	;;
esac

exit 0