aboutsummaryrefslogtreecommitdiff
path: root/init.d.misc/named
diff options
context:
space:
mode:
Diffstat (limited to 'init.d.misc/named')
-rw-r--r--init.d.misc/named116
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
+}