Changes to update Tomato RAF.
[tomato.git] / release / src / router / dnsmasq / debian / init
blobdf4dc0821b7f8624b6101f14149979da750d926b
1 #!/bin/sh
2 ### BEGIN INIT INFO
3 # Provides: dnsmasq
4 # Required-Start: $network $remote_fs $syslog
5 # Required-Stop: $network $remote_fs $syslog
6 # Default-Start: 2 3 4 5
7 # Default-Stop: 0 1 6
8 # Description: DHCP and DNS server
9 ### END INIT INFO
11 set +e # Don't exit on error status
13 PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
14 DAEMON=/usr/sbin/dnsmasq
15 NAME=dnsmasq
16 DESC="DNS forwarder and DHCP server"
18 # Most configuration options in /etc/default/dnsmasq are deprecated
19 # but still honoured.
20 ENABLED=1
21 if [ -r /etc/default/$NAME ]; then
22 . /etc/default/$NAME
25 # Get the system locale, so that messages are in the correct language, and the
26 # charset for IDN is correct
27 if [ -r /etc/default/locale ]; then
28 . /etc/default/locale
29 export LANG
32 test -x $DAEMON || exit 0
34 # Provide skeleton LSB log functions for backports which don't have LSB functions.
35 if [ -f /lib/lsb/init-functions ]; then
36 . /lib/lsb/init-functions
37 else
38 log_warning_msg () {
39 echo "${@}."
42 log_success_msg () {
43 echo "${@}."
46 log_daemon_msg () {
47 echo -n "${1}: $2"
50 log_end_msg () {
51 if [ $1 -eq 0 ]; then
52 echo "."
53 elif [ $1 -eq 255 ]; then
54 /bin/echo -e " (warning)."
55 else
56 /bin/echo -e " failed!"
61 # RESOLV_CONF:
62 # If the resolvconf package is installed then use the resolv conf file
63 # that it provides as the default. Otherwise use /etc/resolv.conf as
64 # the default.
66 # If IGNORE_RESOLVCONF is set in /etc/default/dnsmasq or an explicit
67 # filename is set there then this inhibits the use of the resolvconf-provided
68 # information.
70 # Note that if the resolvconf package is installed it is not possible to
71 # override it just by configuration in /etc/dnsmasq.conf, it is necessary
72 # to set IGNORE_RESOLVCONF=yes in /etc/default/dnsmasq.
74 if [ ! "$RESOLV_CONF" ] &&
75 [ "$IGNORE_RESOLVCONF" != "yes" ] &&
76 [ -x /sbin/resolvconf ]
77 then
78 RESOLV_CONF=/var/run/dnsmasq/resolv.conf
81 for INTERFACE in $DNSMASQ_INTERFACE; do
82 DNSMASQ_INTERFACES="$DNSMASQ_INTERFACES -i $INTERFACE"
83 done
85 for INTERFACE in $DNSMASQ_EXCEPT; do
86 DNSMASQ_INTERFACES="$DNSMASQ_INTERFACES -I $INTERFACE"
87 done
89 if [ ! "$DNSMASQ_USER" ]; then
90 DNSMASQ_USER="dnsmasq"
93 start()
95 # Return
96 # 0 if daemon has been started
97 # 1 if daemon was already running
98 # 2 if daemon could not be started
100 # /var/run may be volatile, so we need to ensure that
101 # /var/run/dnsmasq exists here as well as in postinst
102 if [ ! -d /var/run/dnsmasq ]; then
103 mkdir /var/run/dnsmasq || return 2
104 chown dnsmasq:nogroup /var/run/dnsmasq || return 2
107 start-stop-daemon --start --quiet --pidfile /var/run/dnsmasq/$NAME.pid --exec $DAEMON --test > /dev/null || return 1
108 start-stop-daemon --start --quiet --pidfile /var/run/dnsmasq/$NAME.pid --exec $DAEMON -- \
109 -x /var/run/dnsmasq/$NAME.pid \
110 ${MAILHOSTNAME:+ -m $MAILHOSTNAME} \
111 ${MAILTARGET:+ -t $MAILTARGET} \
112 ${DNSMASQ_USER:+ -u $DNSMASQ_USER} \
113 ${DNSMASQ_INTERFACES:+ $DNSMASQ_INTERFACES} \
114 ${DHCP_LEASE:+ -l $DHCP_LEASE} \
115 ${DOMAIN_SUFFIX:+ -s $DOMAIN_SUFFIX} \
116 ${RESOLV_CONF:+ -r $RESOLV_CONF} \
117 ${CACHESIZE:+ -c $CACHESIZE} \
118 ${CONFIG_DIR:+ -7 $CONFIG_DIR} \
119 ${DNSMASQ_OPTS:+ $DNSMASQ_OPTS} \
120 || return 2
123 start_resolvconf()
125 # If interface "lo" is explicitly disabled in /etc/default/dnsmasq
126 # Then dnsmasq won't be providing local DNS, so don't add it to
127 # the resolvconf server set.
128 for interface in $DNSMASQ_EXCEPT
130 [ $interface = lo ] && return
131 done
133 if [ -x /sbin/resolvconf ] ; then
134 echo "nameserver 127.0.0.1" | /sbin/resolvconf -a lo.$NAME
136 return 0
139 stop()
141 # Return
142 # 0 if daemon has been stopped
143 # 1 if daemon was already stopped
144 # 2 if daemon could not be stopped
145 # other if a failure occurred
146 start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile /var/run/dnsmasq/$NAME.pid --name $NAME
147 RETVAL="$?"
148 [ "$RETVAL" = 2 ] && return 2
149 return "$RETVAL"
152 stop_resolvconf()
154 if [ -x /sbin/resolvconf ] ; then
155 /sbin/resolvconf -d lo.$NAME
157 return 0
160 status()
162 # Return
163 # 0 if daemon is running
164 # 1 if daemon is dead and pid file exists
165 # 3 if daemon is not running
166 # 4 if daemon status is unknown
167 start-stop-daemon --start --quiet --pidfile /var/run/dnsmasq/$NAME.pid --exec $DAEMON --test > /dev/null
168 case "$?" in
169 0) [ -e "/var/run/dnsmasq/$NAME.pid" ] && return 1 ; return 3 ;;
170 1) return 0 ;;
171 *) return 4 ;;
172 esac
175 case "$1" in
176 start)
177 test "$ENABLED" != "0" || exit 0
178 log_daemon_msg "Starting $DESC" "$NAME"
179 start
180 case "$?" in
182 log_end_msg 0
183 start_resolvconf
184 exit 0
187 log_success_msg "(already running)"
188 exit 0
191 log_end_msg 1
192 exit 1
194 esac
196 stop)
197 stop_resolvconf
198 if [ "$ENABLED" != "0" ]; then
199 log_daemon_msg "Stopping $DESC" "$NAME"
201 stop
202 RETVAL="$?"
203 if [ "$ENABLED" = "0" ]; then
204 case "$RETVAL" in
205 0) log_daemon_msg "Stopping $DESC" "$NAME"; log_end_msg 0 ;;
206 esac
207 exit 0
209 case "$RETVAL" in
210 0) log_end_msg 0 ; exit 0 ;;
211 1) log_warning_msg "(not running)" ; exit 0 ;;
212 *) log_end_msg 1; exit 1 ;;
213 esac
215 restart|force-reload)
216 test "$ENABLED" != "0" || exit 1
217 $DAEMON --test ${CONFIG_DIR:+ -7 $CONFIG_DIR} ${DNSMASQ_OPTS:+ $DNSMASQ_OPTS} >/dev/null 2>&1
218 if [ $? -ne 0 ]; then
219 NAME="configuration syntax check"
220 RETVAL="2"
221 else
222 stop_resolvconf
223 stop
224 RETVAL="$?"
226 log_daemon_msg "Restarting $DESC" "$NAME"
227 case "$RETVAL" in
228 0|1)
229 sleep 2
230 start
231 case "$?" in
233 log_end_msg 0
234 start_resolvconf
235 exit 0
238 log_end_msg 1
239 exit 1
241 esac
244 log_end_msg 1
245 exit 1
247 esac
249 status)
250 log_daemon_msg "Checking $DESC" "$NAME"
251 status
252 case "$?" in
253 0) log_success_msg "(running)" ; exit 0 ;;
254 1) log_success_msg "(dead, pid file exists)" ; exit 1 ;;
255 3) log_success_msg "(not running)" ; exit 3 ;;
256 *) log_success_msg "(unknown)" ; exit 4 ;;
257 esac
259 dump-stats)
260 kill -s USR1 `cat /var/run/dnsmasq/$NAME.pid`
262 systemd-start-resolvconf)
263 start_resolvconf
265 systemd-stop-resolvconf)
266 stop_resolvconf
268 systemd-exec)
269 # --pid-file without argument disables writing a PIDfile, we don't need one with sytemd.
270 # Enable DBus by default because we use DBus activation with systemd.
271 exec $DAEMON --keep-in-foreground --pid-file --enable-dbus \
272 ${MAILHOSTNAME:+ -m $MAILHOSTNAME} \
273 ${MAILTARGET:+ -t $MAILTARGET} \
274 ${DNSMASQ_USER:+ -u $DNSMASQ_USER} \
275 ${DNSMASQ_INTERFACES:+ $DNSMASQ_INTERFACES} \
276 ${DHCP_LEASE:+ -l $DHCP_LEASE} \
277 ${DOMAIN_SUFFIX:+ -s $DOMAIN_SUFFIX} \
278 ${RESOLV_CONF:+ -r $RESOLV_CONF} \
279 ${CACHESIZE:+ -c $CACHESIZE} \
280 ${CONFIG_DIR:+ -7 $CONFIG_DIR} \
281 ${DNSMASQ_OPTS:+ $DNSMASQ_OPTS}
284 echo "Usage: /etc/init.d/$NAME {start|stop|restart|force-reload|dump-stats|status}" >&2
285 exit 3
287 esac
289 exit 0