summaryrefslogtreecommitdiffstats
path: root/etc/rc.d/named
diff options
context:
space:
mode:
Diffstat (limited to 'etc/rc.d/named')
-rwxr-xr-xetc/rc.d/named98
1 files changed, 97 insertions, 1 deletions
diff --git a/etc/rc.d/named b/etc/rc.d/named
index e90fd13..65a13a5 100755
--- a/etc/rc.d/named
+++ b/etc/rc.d/named
@@ -16,7 +16,7 @@ command="/usr/sbin/named"
extra_commands="reload"
start_precmd="named_precmd"
-start_postcmd="make_symlinks"
+start_postcmd="named_poststart"
reload_cmd="named_reload"
stop_cmd="named_stop"
stop_postcmd="named_poststop"
@@ -97,6 +97,17 @@ make_symlinks()
ln -fs "${named_chrootdir}${pidfile}" ${pidfile}
}
+named_poststart () {
+ make_symlinks
+
+ if checkyesno named_wait; then
+ until ${command%/sbin/named}/bin/host $named_wait_host >/dev/null 2>&1; do
+ echo " Waiting for nameserver to resolve $named_wait_host"
+ sleep 1
+ done
+ fi
+}
+
named_reload()
{
${command%/named}/rndc reload
@@ -135,8 +146,19 @@ named_poststop()
fi
}
+create_file () {
+ if [ -e "$1" ]; then
+ unlink $1
+ fi
+ > $1
+ chown root:wheel $1
+ chmod 644 $1
+}
+
named_precmd()
{
+ local line nsip firstns
+
# Is the user using a sandbox?
#
if [ -n "$named_chrootdir" ]; then
@@ -161,6 +183,80 @@ named_precmd()
else
$confgen_command
fi
+
+ # Create a forwarder configuration based on /etc/resolv.conf
+ if checkyesno named_auto_forward; then
+ if [ ! -s /etc/resolv.conf ]; then
+ warn "named_auto_forward enabled, but no /etc/resolv.conf"
+
+ # Empty the file in case it is included in named.conf
+ [ -s "${named_chrootdir}/etc/namedb/auto_forward.conf" ] &&
+ create_file ${named_chrootdir}/etc/namedb/auto_forward.conf
+
+ ${command%/named}/named-checkconf $named_conf ||
+ err 3 'named-checkconf for $named_conf failed'
+ return
+ fi
+
+ create_file /var/run/naf-resolv.conf
+ create_file /var/run/auto_forward.conf
+
+ echo ' forwarders {' > /var/run/auto_forward.conf
+
+ while read line; do
+ case "$line" in
+ 'nameserver '*|'nameserver '*)
+ nsip=${line##nameserver[ ]}
+
+ if [ -z "$firstns" ]; then
+ if [ ! "$nsip" = '127.0.0.1' ]; then
+ echo 'nameserver 127.0.0.1'
+ echo " ${nsip};" >> /var/run/auto_forward.conf
+ fi
+
+ firstns=1
+ else
+ [ "$nsip" = '127.0.0.1' ] && continue
+ echo " ${nsip};" >> /var/run/auto_forward.conf
+ fi
+ ;;
+ esac
+
+ echo $line
+ done < /etc/resolv.conf > /var/run/naf-resolv.conf
+
+ echo ' };' >> /var/run/auto_forward.conf
+ echo '' >> /var/run/auto_forward.conf
+ if checkyesno named_auto_forward_only; then
+ echo " forward only;" >> /var/run/auto_forward.conf
+ else
+ echo " forward first;" >> /var/run/auto_forward.conf
+ fi
+
+ if cmp -s /etc/resolv.conf /var/run/naf-resolv.conf; then
+ unlink /var/run/naf-resolv.conf
+ else
+ [ -e /etc/resolv.conf ] && unlink /etc/resolv.conf
+ mv /var/run/naf-resolv.conf /etc/resolv.conf
+ fi
+
+ if cmp -s ${named_chrootdir}/etc/namedb/auto_forward.conf \
+ /var/run/auto_forward.conf; then
+ unlink /var/run/auto_forward.conf
+ else
+ [ -e "${named_chrootdir}/etc/namedb/auto_forward.conf" ] &&
+ unlink ${named_chrootdir}/etc/namedb/auto_forward.conf
+ mv /var/run/auto_forward.conf \
+ ${named_chrootdir}/etc/namedb/auto_forward.conf
+ fi
+ else
+ # Empty the file in case it is included in named.conf
+ [ -s "${named_chrootdir}/etc/namedb/auto_forward.conf" ] &&
+ create_file ${named_chrootdir}/etc/namedb/auto_forward.conf
+ fi
+
+ ${command%/named}/named-checkconf $named_conf ||
+ err 3 'named-checkconf for $named_conf failed'
}
load_rc_config $name
OpenPOWER on IntegriCloud