diff options
Diffstat (limited to 'init.d.misc/named')
-rw-r--r-- | init.d.misc/named | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/init.d.misc/named b/init.d.misc/named new file mode 100644 index 00000000..4b2a1175 --- /dev/null +++ b/init.d.misc/named @@ -0,0 +1,116 @@ +#!/sbin/runscript +# Copyright 2007 Roy Marples +# All rights reserved + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. + +command=/usr/sbin/named +command_args=${named_args} +pidfile=/var/run/named/pid +name="Domain Name server" +extra_commands="reload" + +namedb=/etc/namedb +named_uid=${named_uid:-bind} + +depend() { + provide dns + need localmount + after bootmisc +} + +start_pre() { + if [ -n "${named_chroot}" ]; then + # Create (or update) the chroot directory structure + if [ -r /etc/mtree/BIND.chroot.dist ]; then + mtree -deU -f /etc/mtree/BIND.chroot.dist -p "${named_chroot}" + else + ewarn "/etc/mtree/BIND.chroot.dist missing," + ewarn "chroot directory structure not updated" + fi + + if [ ! -d "${named_chroot}"/. ]; then + eerror "chroot directory ${named_chroot} missing" + exit 1 + fi + + # Create /etc/namedb symlink + if [ ! -L "${namedb}" ]; then + if [ -d "${namedb}" ]; then + ewarn "named chroot: ${namedb} is a directory!" + elif [ -e "${namedb}" ]; then + ewarn "named chroot: ${namedb} exists!" + else + ln -s "${named_chroot}${namedb}" "${namedb}" + fi + else + # Make sure it points to the right place. + ln -shf "${named_chroot}${namedb}" "${namedb}" + fi + + case "${RC_UNAME}" in + *BSD|DragonFly) + # Mount a devfs in the chroot directory if needed + umount "${named_chroot}"/dev 2>/dev/null + mount -t devfs dev "${named_chroot}"/dev + devfs -m "${named_chroot}"/dev ruleset devfsrules_hide_all + devfs -m "${named_chroot}"/dev rule apply path null unhide + devfs -m "${named_chroot}"/dev rule apply path random unhide + ;; + esac + + # Copy local timezone information if it is not up to date. + if [ -r /etc/localtime ]; then + cmp -s /etc/localtime "${named_chroot}/etc/localtime" || + cp -p /etc/localtime "${named_chroot}/etc/localtime" + fi + + command_args="${command_args} -t ${named_chroot}" + + ln -fs "${named_chroot}${pidfile}" "${pidfile}" + fi + + if [ ! -s "${named_chroot}${namedb}/rndc.conf" ]; then + local confgen="${command%/named}/rndc-confgen -a -b256 -u ${named_uid} \ + -c ${named_chrootdir}/etc/namedb/rndc.key" + if [ -s "${named_chroot}${namedb}/rndc.key" ]; then + local getuser="stat -f%Su" + [ "${RC_UNAME}" = "Linux" ] && getuser="stat -c%U" + case $(${getuser} "${named_chroot}${namedb}"/rndc.key) in + root|"${named_uid}") ;; + *) ${confgen} ;; + esac + else + ${confgen} + fi + fi +} + +reload() { + rndc reload +} + +stop_post() { + if [ -n "${named_chroot}" -a -c "${named_chroot}"/dev/null ]; then + umount "${named_chroot}"/dev 2>/dev/null || true + fi +} |