xref: /netbsd-src/external/bsd/openresolv/dist/pdns_recursor.in (revision 91b0a986de1681d9dd8285b94a008ea6e59b9ad0)
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