#!/bin/sh DAEMON=unbound DAEMON_LONG_NAME=Unbound DAEMON_CFGFILE=/tmp/flash/$DAEMON/$DAEMON.conf . /etc/init.d/modlibrc [ -e /etc/init.d/rc.rextd ] && MASTER=rextd || MASTER=multid [ -r /etc/options.cfg ] && . /etc/options.cfg if [ "$FREETZ_AVMDAEMON_DISABLE_DNS" != "y" ]; then [ "$(/etc/init.d/rc.$MASTER status)" != "running" -o "$UNBOUND_MULTID_RESTART" != "yes" ] && nomultid=y else nomultid=y fi startdaemon_pre() { [ "$nomultid" == "y" ] || /etc/init.d/rc.$MASTER stop >/dev/null } start() { modlib_startdaemon unbound $UNBOUND_CMDLINE } startdaemon_post() { [ "$nomultid" == "y" ] || /etc/init.d/rc.$MASTER start >/dev/null } stop_pre() { [ "$nomultid" == "y" ] || /etc/init.d/rc.$MASTER stop >/dev/null } stop_post() { [ "$nomultid" == "y" ] || /etc/init.d/rc.$MASTER start >/dev/null } config() { [ "$FREETZ_PACKAGE_UNBOUND_WEBIF_CRON" != "y" ] && return local NEW OLD="$(cat /tmp/cron.d/$DAEMON 2>/dev/null)" if [ "$UNBOUND_CRON_ENABLED" == "yes" -a -n "$UNBOUND_CRON_TIMEM" -a -n "UNBOUND_CRON_TIMEH" -a -n "UNBOUND_CRON_WEEKD" ]; then NEW="$UNBOUND_CRON_TIMEM $UNBOUND_CRON_TIMEH * * $UNBOUND_CRON_WEEKD /mod/etc/init.d/rc.unbound update" fi if [ "$OLD" != "$NEW" ] ; then mkdir -p /tmp/cron.d/ echo "$NEW" > /tmp/cron.d/$DAEMON /mod/etc/init.d/rc.crond reload >/dev/null fi } case $1 in ""|load|multid|rextd) if [ "$1" == "multid" -o "$1" == "rextd" ]; then [ "$UNBOUND_WRAPPER" != "yes" ] && exit else [ "$UNBOUND_WRAPPER" == "yes" ] && exit fi modlib_add_user_and_group nobody modlib_defaults $DAEMON_CFGFILE [ ! -s "/tmp/flash/$DAEMON/root.key" ] && echo '. IN DS 20326 8 2 E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D' > /tmp/flash/$DAEMON/root.key [ ! -e "/tmp/flash/$DAEMON/root.hints" ] && touch /tmp/flash/$DAEMON/root.hints chown -R nobody.nobody /tmp/flash/$DAEMON [ "$FREETZ_PACKAGE_UNBOUND_WEBIF_STATS" == "y" ] && \ modreg file $DAEMON "unbound_stats" 'Stats' 1 "unbound_stats" modreg file $DAEMON "unbound_hints" 'root.hints' 1 "unbound_hints" modreg file $DAEMON "unbound_key" 'root.key' 1 "unbound_key" modreg file $DAEMON "unbound_conf" 'unbound.conf' 1 "unbound_conf" modreg cgi $DAEMON $DAEMON_LONG_NAME modreg daemon $DAEMON config modlib_start $UNBOUND_ENABLED ;; unload) modunreg daemon $DAEMON modunreg cgi $DAEMON modunreg file $DAEMON if [ -e /tmp/cron.d/$DAEMON ]; then rm -f /tmp/cron.d/$DAEMON /mod/etc/init.d/rc.crond reload >/dev/null fi modlib_stop ;; start) modlib_start ;; stop) modlib_stop ;; restart) if [ "$FREETZ_AVMDAEMON_DISABLE_DNS" != "y" ]; then modlib_check_running && nomultid=y fi modlib_restart ;; reload) modlib_reload ;; update) echo -n "Updating $DAEMON_LONG_NAME ... " wget https://www.internic.net/domain/named.root -q -O - | grep -v '^;' > /tmp/.$DAEMON.root if [ ! -s /tmp/.$DAEMON.root ]; then rm -f /tmp/.$DAEMON.root echo "failed." exit 1 fi if [ "$(cat /tmp/.$DAEMON.root | md5sum)" == "$(cat /tmp/flash/$DAEMON/root.hints | md5sum)" ]; then echo "skipped." else cat /tmp/.$DAEMON.root > /tmp/flash/$DAEMON/root.hints echo "done." modsave flash modlib_reload fi rm -f /tmp/.$DAEMON.root ;; config) echo -n "Configuring $DAEMON_LONG_NAME ... " config echo "done." ;; status) modlib_status ;; stats) [ -n "$2" ] && SHORT='|=0$' (unbound-control stats_noreset || echo "Error") | grep -vE "^thread|^histogram$SHORT" ;; *) echo "Usage: $0 [load|unload|start|stop|restart|reload|update|config|status|stats]" 1>&2 exit 1 ;; esac exit 0