1#!/bin/sh
2#
3# unbound	This shell script takes care of starting and stopping
4#		unbound (DNS server).
5#
6# chkconfig:   - 14 86
7# description:	unbound is a Domain Name Server (DNS) \
8#		that is used to resolve host names to IP addresses.
9
10### BEGIN INIT INFO
11# Provides: unbound
12# Required-Start: $network $local_fs
13# Required-Stop: $network $local_fs
14# Should-Start: $syslog
15# Should-Stop: $syslog
16# Short-Description: unbound recursive Domain Name Server.
17# Description:  unbound is a Domain Name Server (DNS) 
18#		that is used to resolve host names to IP addresses.
19### END INIT INFO
20
21# Source function library.
22. /etc/rc.d/init.d/functions
23
24exec="/usr/sbin/unbound"
25config="/var/lib/unbound/unbound.conf"
26rootdir="/var/lib/unbound"
27pidfile="/var/run/unbound/unbound.pid"
28
29[ -e /etc/sysconfig/unbound ] && . /etc/sysconfig/unbound
30
31lockfile=/var/lock/subsys/unbound
32
33start() {
34    [ -x $exec ] || exit 5
35    [ -f $config ] || exit 6
36    echo -n $"Starting unbound: "
37
38	if [ ! -e ${rootdir}/etc/resolv.conf ] || /usr/bin/cmp -s /etc/resolv.conf ${rootdir}/etc/resolv.conf; then
39	    cp -fp /etc/resolv.conf ${rootdir}/etc/resolv.conf
40	fi;
41	if [ ! -e ${rootdir}/etc/localtime ] || /usr/bin/cmp -s /etc/localtime ${rootdir}/etc/localtime; then
42	    cp -fp /etc/localtime ${rootdir}/etc/localtime
43	fi;
44	mount --bind -n /dev/log ${rootdir}/dev/log >/dev/null 2>&1;
45	mount --bind -n /dev/urandom ${rootdir}/dev/urandom >/dev/null 2>&1;
46	mount --bind -n /var/run/unbound ${rootdir}/var/run/unbound >/dev/null 2>&1;
47
48    # if not running, start it up here
49    daemon $exec
50    retval=$?
51    [ $retval -eq 0 ] && touch $lockfile
52    echo
53}
54
55stop() {
56    echo -n $"Stopping unbound: "
57    # stop it here, often "killproc unbound"
58    killproc -p $pidfile unbound
59    retval=$?
60    [ $retval -eq 0 ] && rm -f $lockfile
61    [ $retval -eq 0 ] && rm -f $pidfile
62    for mountfile in /dev/log /dev/urandom /etc/localtime /etc/resolv.conf /var/run/unbound
63    do
64    if egrep -q '^/[^[:space:]]+[[:space:]]+'${rootdir}''${mountfile}'' /proc/mounts; then
65	umount ${rootdir}$mountfile >/dev/null 2>&1
66    fi;
67    done
68    echo
69}
70
71restart() {
72    stop
73    start
74}
75
76reload() {
77    kill -HUP `cat $pidfile`
78}
79
80force_reload() {
81    restart
82}
83
84rh_status() {
85    # run checks to determine if the service is running or use generic status
86    status -p $pidfile unbound
87}
88
89rh_status_q() {
90    rh_status -p $pidfile >/dev/null 2>&1
91}
92
93case "$1" in
94    start)
95        start
96        ;;
97    stop)
98        stop
99        ;;
100    restart)
101        restart
102        ;;
103    reload)
104        reload
105        ;;
106    force-reload)
107        force_reload
108        ;;
109    status)
110        rh_status
111        ;;
112    condrestart|try-restart)
113        rh_status_q || exit 0
114        restart
115        ;;
116    *)
117        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
118        exit 2
119esac
120exit $?
121