16dab695bSroy#!/bin/sh 2*91b0a986Sroy# Copyright (c) 2009-2023 Roy Marples 36dab695bSroy# All rights reserved 46dab695bSroy 56dab695bSroy# PowerDNS Recursor subscriber for resolvconf 66dab695bSroy 76dab695bSroy# Redistribution and use in source and binary forms, with or without 86dab695bSroy# modification, are permitted provided that the following conditions 96dab695bSroy# are met: 106dab695bSroy# * Redistributions of source code must retain the above copyright 116dab695bSroy# notice, this list of conditions and the following disclaimer. 126dab695bSroy# * Redistributions in binary form must reproduce the above 136dab695bSroy# copyright notice, this list of conditions and the following 146dab695bSroy# disclaimer in the documentation and/or other materials provided 156dab695bSroy# with the distribution. 166dab695bSroy# 176dab695bSroy# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 186dab695bSroy# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 196dab695bSroy# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 206dab695bSroy# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 216dab695bSroy# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 226dab695bSroy# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 236dab695bSroy# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 246dab695bSroy# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 256dab695bSroy# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 266dab695bSroy# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 276dab695bSroy# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 286dab695bSroy 296dab695bSroy[ -f "@SYSCONFDIR@"/resolvconf.conf ] || exit 0 306dab695bSroy. "@SYSCONFDIR@/resolvconf.conf" || exit 1 316dab695bSroy[ -z "$pdns_zones" ] && exit 0 326dab695bSroy[ -z "$RESOLVCONF" ] && eval "$(@SBINDIR@/resolvconf -v)" 336dab695bSroyNL=" 346dab695bSroy" 356dab695bSroy 367bae451cSroy: ${pdns_service:=pdns-recursor} 376dab695bSroy 386dab695bSroynewzones= 396dab695bSroy 407bae451cSroyfor n in $NAMESERVERS; do 417bae451cSroy newzones="$newzones${newzones:+,}$n" 427bae451cSroydone 437bae451cSroy[ -n "$newzones" ] && newzones="+.=$newzones$NL" 446dab695bSroy 456dab695bSroyfor d in $DOMAINS; do 466dab695bSroy newns= 476dab695bSroy ns="${d#*:}" 486dab695bSroy while [ -n "$ns" ]; do 496dab695bSroy newns="$newns${newns:+,}${ns%%,*}" 506dab695bSroy [ "$ns" = "${ns#*,}" ] && break 516dab695bSroy ns="${ns#*,}" 526dab695bSroy done 536dab695bSroy [ -n "$newns" ] && newzones="$newzones${d%%:*}=$newns$NL" 546dab695bSroydone 556dab695bSroy 566dab695bSroy# Try to ensure that config dirs exist 57*91b0a986Sroyif command -v config_mkdirs >/dev/null 2>&1; then 586dab695bSroy config_mkdirs "$pdnsd_zones" 596dab695bSroyelse 606dab695bSroy @SBINDIR@/resolvconf -D "$pdnsd_zones" 616dab695bSroyfi 626dab695bSroy 636dab695bSroyif [ ! -f "$pdns_zones" ] || \ 646dab695bSroy [ "$(cat "$pdns_zones")" != "$(printf %s "$newzones")" ] 656dab695bSroythen 666dab695bSroy printf %s "$newzones" >"$pdns_zones" 676dab695bSroy if [ -n "$pdns_restart" ]; then 686dab695bSroy eval $pdns_restart 696dab695bSroy elif [ -n "$RESTARTCMD" ]; then 706dab695bSroy set -- ${pdns_service} 717bae451cSroy eval "$RESTARTCMD" 726dab695bSroy else 736dab695bSroy @SBINDIR@/resolvconf -r ${pdns_service} 746dab695bSroy fi 756dab695bSroyfi 76