#!/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_started_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 }