Bug#318464: [Resolvconf-devel] Bug#318464: minor fix
for /etc/resolvconf/update.d/dnscache
Thomas Hood
jdthood at yahoo.co.uk
Fri Jun 9 09:35:45 UTC 2006
Hi and thanks for the tips. Please test the attached dnscache script.
--
Thomas Hood
-------------- next part --------------
#!/bin/sh
#
# /etc/resolvconf/update.d/dnscache
#
# Script to update every forwarding djbdns dnscache instance running
# on the local machine
#
# this script sets up every FORWARDONLY dnscache managed by
# daemontools on this machine to use the dynamically-offered
# nameservers for the default '@'
#
# Assumption: On entry, PWD contains the resolv.conf-type files
#
# If no nameservers are offered, we ask the dnscache instances to fall
# back to the root nameservers listed in /etc/dnsroots.global
#
# Licensed under the GNU GPL. See /usr/share/doc/resolvconf/copyright.
#
# Written by Daniel Kahn Gillmor <dkg-debian.org at fifthhorseman.net>
# based on other scripts by Thomas Hood
set -e
PATH=/sbin:/bin
[ -x /usr/bin/dnscache ] || exit 0
[ -x /lib/resolvconf/list-records ] || exit 1
# We'll only manage caches actually managed by daemontools
if [ -d /var/lib/svscan ] ; then
# daemontools is built "the debian way"
SERVICEDIR=/var/lib/svscan
elif [ -d /service ] ; then
# It's built "the djb way"
SERVICEDIR=/service
else
# We don't know where to look for the daemontools services
exit 0
fi
ETC=/etc
ETCRESOLVCONF="${ETC}/resolvconf"
TMPFILE="${ETCRESOLVCONF}/run/dnscache_new.$$"
DEFAULTROOTS="${ETC}/dnsroots.global"
CACHES=""
for SVC in $SERVICEDIR/* ; do
if [ -f $SVC/run ] && \
(grep -q dnscache $SVC/run) && \
[ -d $SVC/root ] && \
[ -d $SVC/root/servers ] && \
[ -d $SVC/root/ip ] && \
[ -s $SVC/env/FORWARDONLY ] ; then
CACHES="$SVC $CACHES"
fi
done
# Stores arguments (minus duplicates) in RSLT, separated by spaces
# Doesn't work properly if an argument itself contain whitespace
uniquify()
{
RSLT=""
while [ "$1" ] ; do
for E in $RSLT ; do
[ "$1" = "$E" ] && { shift ; continue 2 ; }
done
RSLT="${RSLT:+$RSLT }$1"
shift
done
}
RSLVCNFFILES="$(/lib/resolvconf/list-records)"
### Compile list of nameservers ###
NMSRVRS=""
if [ "$RSLVCNFFILES" ] ; then
uniquify $(sed -n 's/^[[:space:]]*nameserver[[:space:]]\+//p' $RSLVCNFFILES)
NMSRVRS="$RSLT"
fi
# If no nameservers were present, use the default root nameservers
# provided by the djbdns package:
if [ -z "$NMSRVRS" ] && [ -e "$DEFAULTROOTS" ] ; then
cp "$DEFAULTROOTS" "$TMPFILE"
else
: > "$TMPFILE"
for N in $NMSRVRS ; do
echo "$N" >> "$TMPFILE"
done
fi
SVC_CMD="$(which svc)" || :
[ ! "$SVC_CMD" ] && [ -x /command/svc ] && SVC_CMD=/command/svc
for CACHE in $CACHES ; do
cp "$TMPFILE" "$CACHE/root/servers/@"
# Restart the cache if it's already running:
[ "$SVC_CMD" ] && $SVC_CMD -t "$CACHE"
done
rm -f "$TMPFILE"
More information about the Resolvconf-devel
mailing list