eximconf: spacing fix
[mirror/dsa-puppet.git] / modules / unbound / files / unbound.init
1 #!/bin/sh
2
3 ### BEGIN INIT INFO
4 # Provides:          unbound
5 # Required-Start:    $network $remote_fs $syslog
6 # Required-Stop:     $network $remote_fs $syslog
7 # Default-Start:     2 3 4 5
8 # Default-Stop:      0 1 6
9 ### END INIT INFO
10 # pidfile: /run/unbound.pid
11
12 NAME=unbound
13 DESC="recursive DNS server"
14 DAEMON=/usr/sbin/unbound
15 PIDFILE="/var/run/unbound.pid"
16
17 test -x $DAEMON || exit 0
18 test -x ${DAEMON}-checkconf || exit 0
19
20 . /lib/lsb/init-functions
21
22 UNBOUND_ENABLE=true
23 UNBOUND_CONF=/etc/unbound/unbound.conf
24 UNBOUND_BASE_DIR=$(dirname $UNBOUND_CONF)
25 CHROOT_DIR=$(awk '{if ($1 ~ "^chroot" && $2 != "\"\"") print $2}' $UNBOUND_CONF|sed -e "s#\"##g")
26 ROOT_TRUST_ANCHOR_UPDATE=false
27 ROOT_TRUST_ANCHOR_FILE=/var/lib/unbound/root.key
28 RESOLVCONF=false
29 RESOLVCONF_FORWARDERS=false
30
31 if [ -f /etc/default/$NAME ]; then
32     . /etc/default/$NAME
33     case "x$UNBOUND_ENABLE" in
34         xtrue|x1|xyes)
35             UNBOUND_ENABLE=true
36             ;;
37         *)
38             UNBOUND_ENABLE=false
39             ;;
40     esac
41     case "x$ROOT_TRUST_ANCHOR_UPDATE" in
42         xtrue|x1|xyes)
43             ROOT_TRUST_ANCHOR_UPDATE=true
44             ;;
45         *)
46             ROOT_TRUST_ANCHOR_UPDATE=false
47             ;;
48     esac
49     case "x$RESOLVCONF" in
50         xtrue|x1|xyes)
51             RESOLVCONF=true
52             ;;
53         *)
54             RESOLVCONF=false
55     esac
56     case "x$RESOLVCONF_FORWARDERS" in
57         xtrue|x1|xyes)
58             RESOLVCONF_FORWARDERS=true
59             ;;
60         *)
61             RESOLVCONF_FORWARDERS=false
62     esac
63 fi
64
65 do_resolvconf_start() {
66     if $RESOLVCONF; then
67         if [ -x /sbin/resolvconf ]; then
68             unbound-checkconf $CHROOT_DIR/$UNBOUND_CONF -o interface | (
69                 default=yes
70                 while read interface; do
71                     default=no
72                     if [ "x$interface" = x0.0.0.0 -o "x$interface" = x127.0.0.1 ]; then
73                         echo "nameserver 127.0.0.1"
74                     elif [ "x$interface" = x::0 -o "x$interface" = x::1 ]; then
75                         echo "nameserver ::1"
76                     fi
77                 done
78                 if [ $default = yes ]; then
79                     # unbound defaults to listening on localhost
80                     echo "nameserver 127.0.0.1"
81                 fi
82             ) | /sbin/resolvconf -a lo.unbound
83         fi
84     fi
85 }
86
87 do_resolvconf_stop() {
88     if $RESOLVCONF; then
89         if [ -x /sbin/resolvconf ]; then
90             /sbin/resolvconf -d lo.unbound
91         fi
92     fi
93 }
94
95 do_chroot_setup() {
96     if [ -d "$CHROOT_DIR" -a "$CHROOT_DIR" != "$UNBOUND_BASE_DIR" ]; then
97         cd /
98         tar --overwrite -cf - $(echo $UNBOUND_BASE_DIR | sed 's#^/##') | (cd $CHROOT_DIR && tar -xf -)
99     fi
100 }
101
102 case "$1" in
103     start)
104         if $UNBOUND_ENABLE; then
105             do_chroot_setup
106             if $ROOT_TRUST_ANCHOR_UPDATE; then
107                 unbound-anchor -a $ROOT_TRUST_ANCHOR_FILE -v 2>&1 | logger -p daemon.info -t unbound-anchor
108                 chown unbound:unbound $ROOT_TRUST_ANCHOR_FILE
109             fi
110             log_daemon_msg "Starting $DESC" "$NAME"
111             if start-stop-daemon --start --quiet --oknodo --pidfile $PIDFILE --name $NAME --startas $DAEMON -- $DAEMON_OPTS; then
112                 do_resolvconf_start
113                 log_end_msg 0
114             else
115                 log_end_msg 1
116             fi
117         else
118             log_warning_msg "Not starting $DESC $NAME, disabled via /etc/default/$NAME"
119         fi
120         ;;
121
122     stop)
123         if $UNBOUND_ENABLE; then
124             log_daemon_msg "Stopping $DESC" "$NAME"
125             if start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE --name $NAME --retry 5; then
126                 do_resolvconf_stop
127                 log_end_msg 0
128             else
129                 log_end_msg 1
130             fi
131         fi
132         ;;
133
134     restart|force-reload)
135         if $UNBOUND_ENABLE; then
136             log_daemon_msg "Restarting $DESC" "$NAME"
137             start-stop-daemon --stop --quiet --pidfile $PIDFILE --name $NAME --retry 5
138             do_resolvconf_stop
139             if start-stop-daemon --start --quiet --oknodo --pidfile $PIDFILE --name $NAME --startas $DAEMON -- $DAEMON_OPTS; then
140                 do_chroot_setup
141                 do_resolvconf_start
142                 log_end_msg 0
143             else
144                 log_end_msg 1
145             fi
146         fi
147         ;;
148
149     reload)
150         if $UNBOUND_ENABLE; then
151             log_daemon_msg "Reloading $DESC" "$NAME"
152             if start-stop-daemon --stop --pidfile $PIDFILE --signal 1; then
153                 do_chroot_setup
154                 log_end_msg 0
155             else
156                 log_end_msg 1
157             fi
158         fi
159         ;;
160
161     status)
162         status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit $?
163         ;;
164
165     *)
166         N=/etc/init.d/$NAME
167         echo "Usage: $N {start|stop|restart|status|reload|force-reload}" >&2
168         exit 1
169         ;;
170 esac
171
172 exit 0;