1#!/bin/sh 2# Copyright (c) 2007-2012 Roy Marples 3# All rights reserved 4 5# named subscriber for resolvconf 6 7# Redistribution and use in source and binary forms, with or without 8# modification, are permitted provided that the following conditions 9# are met: 10# * Redistributions of source code must retain the above copyright 11# notice, this list of conditions and the following disclaimer. 12# * Redistributions in binary form must reproduce the above 13# copyright notice, this list of conditions and the following 14# disclaimer in the documentation and/or other materials provided 15# with the distribution. 16# 17# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 29[ -f "@SYSCONFDIR@"/resolvconf.conf ] || exit 0 30. "@SYSCONFDIR@/resolvconf.conf" || exit 1 31[ -z "$named_zones" -a -z "$named_options" ] && exit 0 32[ -z "$RESOLVCONF" ] && eval "$(@SBINDIR@/resolvconf -v)" 33NL=" 34" 35 36# Platform specific kludges 37if [ -z "$named_service" -a -z "$named_restart" -a \ 38 -d "@RCDIR@" -a ! -x "@RCDIR@"/named ] 39then 40 if [ -x "@RCDIR@"/bind9 ]; then 41 # Debian and derivatives 42 named_service=bind9 43 elif [ -x "@RCDIR@"/rc.bind ]; then 44 # Slackware 45 named_service=rc.bind 46 fi 47fi 48: ${named_service:=named} 49: ${named_restart:=@RESTARTCMD ${named_service}@} 50newoptions="# Generated by resolvconf$NL" 51newzones="$newoptions" 52 53forward= 54for n in $NAMESERVERS; do 55 case "$forward" in 56 *"$NL $n;"*);; 57 *) forward="$forward$NL $n;";; 58 esac 59done 60if [ -n "$forward" ]; then 61 newoptions="${newoptions}forward first;${NL}forwarders {$forward${NL}};$NL" 62fi 63 64for d in $DOMAINS; do 65 newzones="${newzones}zone \"${d%%:*}\" {$NL" 66 newzones="$newzones type forward;$NL" 67 newzones="$newzones forward first;$NL forwarders {$NL" 68 ns="${d#*:}" 69 while [ -n "$ns" ]; do 70 newzones="$newzones ${ns%%,*};$NL" 71 [ "$ns" = "${ns#*,}" ] && break 72 ns="${ns#*,}" 73 done 74 newzones="$newzones };$NL};$NL" 75done 76 77# Try to ensure that config dirs exist 78if type config_mkdirs >/dev/null 2>&1; then 79 config_mkdirs "$named_options" "$named_zones" 80else 81 @SBINDIR@/resolvconf -D "$named_options" "$named_zones" 82fi 83 84# No point in changing files or reloading bind if the end result has not 85# changed 86changed=false 87if [ -n "$named_options" ]; then 88 if [ ! -f "$named_options" ] || \ 89 [ "$(cat "$named_options")" != "$(printf %s "$newoptions")" ] 90 then 91 printf %s "$newoptions" >"$named_options" 92 changed=true 93 fi 94fi 95if [ -n "$named_zones" ]; then 96 if [ ! -f "$named_zones" ] || \ 97 [ "$(cat "$named_zones")" != "$(printf %s "$newzones")" ] 98 then 99 printf %s "$newzones" >"$named_zones" 100 changed=true 101 fi 102fi 103 104if $changed; then 105 eval $named_restart 106fi 107