#!/bin/sh

NAME=unbound
DESC="recursive DNS server"
DAEMON=/usr/sbin/unbound
CHROOT_DIR=/var/lib/unbound
PIDFILE=$CHROOT_DIR/unbound.pid

test -x $DAEMON || exit 0

. /lib/lsb/init-functions

test -f /etc/default/$NAME && . /etc/default/$NAME

install_chroot() {
    if [ "$CHROOT" != "no" ]; then
        uninstall_chroot
        [ -d $CHROOT_DIR/etc ] || mkdir -p $CHROOT_DIR/etc
        [ -d $CHROOT_DIR/dev ] || mkdir -p $CHROOT_DIR/dev
        [ -c $CHROOT_DIR/dev/random ] || ( cd $CHROOT_DIR/dev && MAKEDEV random )
        [ -c $CHROOT_DIR/dev/urandom ] || ( cd $CHROOT_DIR/dev && MAKEDEV urandom )
        test -f /etc/localtime && cp -fp /etc/localtime $CHROOT_DIR/etc
        install_chroot_conf
    fi
}

install_chroot_conf() {
    test -d $CHROOT_DIR/etc/unbound && rm -rf $CHROOT_DIR/etc/unbound
    cp -a /etc/unbound $CHROOT_DIR/etc
}

uninstall_chroot() {
    test -d $CHROOT_DIR/etc/unbound && rm -rf $CHROOT_DIR/etc/unbound
}

daemon_stopped() {
    start-stop-daemon --start --pidfile $PIDFILE \
        --startas $DAEMON --test >/dev/null 2>&1
}

case "$1" in
    start)
        log_daemon_msg "Starting $DESC" "$NAME"
        if daemon_stopped; then
            install_chroot
        fi
        if start-stop-daemon --start --quiet --oknodo --pidfile $PIDFILE --name $NAME --startas $DAEMON -- $DAEMON_OPTS; then
            log_end_msg 0
        else
            log_end_msg 1
        fi
        ;;

    stop)
        log_daemon_msg "Stopping $DESC" "$NAME"
        if start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE --name $NAME; then
            log_end_msg 0
        else
            log_end_msg 1
        fi
        ;;

    restart|force-reload)
        log_daemon_msg "Restarting $DESC" "$NAME"
        start-stop-daemon --stop --quiet --pidfile $PIDFILE --name $NAME --retry 5
        uninstall_chroot
        install_chroot
        if start-stop-daemon --start --quiet --oknodo --pidfile $PIDFILE --name $NAME --startas $DAEMON -- $DAEMON_OPTS; then
            log_end_msg 0
        else
            log_end_msg 1
        fi
        ;;

    *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac

### BEGIN INIT INFO
# Provides:          unbound
# Required-Start:    $network $remote_fs $syslog
# Required-Stop:     $network $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
### END INIT INFO
