diff options
Diffstat (limited to 'contrib/openresolv/named.in')
-rw-r--r-- | contrib/openresolv/named.in | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/contrib/openresolv/named.in b/contrib/openresolv/named.in new file mode 100644 index 0000000..6448961 --- /dev/null +++ b/contrib/openresolv/named.in @@ -0,0 +1,94 @@ +#!/bin/sh +# Copyright (c) 2007-2009 Roy Marples +# All rights reserved + +# named 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 "$named_zones" -a -z "$named_options" ] && exit 0 +[ -z "$RESOLVCONF" ] && eval "$(@PREFIX@/sbin/resolvconf -v)" + +# Platform specific kludges +if [ -z "$named_service" -a -z "$named_restart" -a \ + -d "@RCDIR@" -a ! -x "@RCDIR@"/named ] +then + if [ -x "@RCDIR@"/bind9 ]; then + # Debian and derivatives + named_service=bind9 + fi +fi +: ${named_service:=named} +: ${named_restart:=@RESTARTCMD ${named_service}@} +newoptions="# Generated by resolvconf\n" +newzones="$newoptions" + +forward= +for n in $NAMESERVERS; do + case "$forward" in + *"\n\t$n;"*);; + *) forward="$forward\n\t$n;";; + esac +done +if [ -n "$forward" ]; then + newoptions="${newoptions}forward first;\nforwarders {$forward\n};\n" +fi + +for d in $DOMAINS; do + newzones="${newzones}zone \"${d%%:*}\" {\n" + newzones="$newzones\ttype forward;\n" + newzones="$newzones\tforward first;\n\tforwarders {\n" + ns="${d#*:}" + while [ -n "$ns" ]; do + newzones="$newzones\t\t${ns%%,*};\n" + [ "$ns" = "${ns#*,}" ] && break + ns="${ns#*,}" + done + newzones="$newzones\t};\n};\n" +done + +# No point in changing files or reloading bind if the end result has not +# changed +changed=false +if [ -n "$named_options" ]; then + if [ ! -f "$named_options" ] || \ + [ "$(cat "$named_options")" != "$(printf "$newoptions")" ] + then + printf "$newoptions" >"$named_options" + changed=true + fi +fi +if [ -n "$named_zones" ]; then + if [ ! -f "$named_zones" ] || \ + [ "$(cat "$named_zones")" != "$(printf "$newzones")" ] + then + printf "$newzones" >"$named_zones" + changed=true + fi +fi + +if $changed; then + eval $named_restart +fi |