diff options
Diffstat (limited to 'contrib/openresolv/unbound.in')
-rw-r--r-- | contrib/openresolv/unbound.in | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/contrib/openresolv/unbound.in b/contrib/openresolv/unbound.in new file mode 100644 index 0000000..b5fb7ec --- /dev/null +++ b/contrib/openresolv/unbound.in @@ -0,0 +1,69 @@ +#!/bin/sh +# Copyright (c) 2009 Roy Marples +# All rights reserved + +# unbound subscriber for resolvconf + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +[ -f "@SYSCONFDIR@"/resolvconf.conf ] || exit 0 +. "@SYSCONFDIR@/resolvconf.conf" || exit 1 +[ -z "$unbound_conf" ] && exit 0 +[ -z "$RESOLVCONF" ] && eval "$(@PREFIX@/sbin/resolvconf -v)" + +: ${unbound_pid:=/var/run/unbound.pid} +: ${unbound_service:=unbound} +: ${unbound_restart:=@RESTARTCMD ${unbound_service}@} +newconf="# Generated by resolvconf\n" + +for d in $DOMAINS; do + dn="${d%%:*}" + ns="${d#*:}" + newconf="${newconf}\nforward-zone:\n\tname: \"$dn\"\n" + while [ -n "$ns" ]; do + newconf="${newconf}\tforward-addr: ${ns%%,*}\n" + [ "$ns" = "${ns#*,}" ] && break + ns="${ns#*,}" + done +done + +if [ -n "$NAMESERVERS" ]; then + newconf="${newconf}\nforward-zone:\n\tname: \".\"\n" + for n in $NAMESERVERS; do + newconf="${newconf}\tforward-addr: $n\n" + done +fi + +if [ ! -f "$unbound_conf" ] || \ + [ "$(cat "$unbound_conf")" != "$(printf "$newconf")" ] +then + printf "$newconf" >"$unbound_conf" + # If we can't sent a HUP then force a restart + if [ -s "$unbound_pid" ]; then + if ! kill -HUP $(cat "$unbound_pid") 2>/dev/null; then + eval $unbound_restart + fi + else + eval $unbound_restart + fi +fi |