freebsd-nq/etc/rc.d/named
Doug Barton fb9540a0dc Update to reflect BIND 9 in the base:
1. Making the pid symlink now has to happen after named starts, otherwise
it can generate a fatal error.

2. named-xfer is not part of the BIND 9 world.

3. BIND 9 needs a /dev/random in the chroot directory if chrooted.

4. Only the pid file is symlinked now, the ndc socket is BIND 8 only.

5. Create an rndc.key file for the user if one does not exist.
This (generally) allows a BIND 8 config file to be used in a BIND 9
world with little or no modification.
2004-09-24 04:53:18 +00:00

84 lines
2.1 KiB
Bash
Executable File

#!/bin/sh
#
# $NetBSD: named,v 1.10 2002/03/22 04:33:59 thorpej Exp $
# $FreeBSD$
#
# PROVIDE: named
# REQUIRE: SERVERS
# BEFORE: DAEMON
# KEYWORD: FreeBSD
. /etc/rc.subr
name="named"
rcvar=`set_rcvar`
start_precmd="named_precmd"
start_postcmd="make_symlinks"
required_dirs="$named_chrootdir" # if it is set, it must exist
extra_commands="reload"
# If running in a chroot cage, ensure that the appropriate files
# exist inside the cage, as well as helper symlinks into the cage
# from outside.
#
# As this is called after the is_running and required_dir checks
# are made in run_rc_command(), we can safely assume ${named_chrootdir}
# exists and named isn't running at this point (unless forcestart
# is used).
#
chroot_autoupdate()
{
# Copy devices if neccessary. Preserve everything (perms,
# ownership, mod times).
#
if [ ! -c "${named_chrootdir}/dev/null" ]; then
rm -f "${named_chrootdir}/dev/null"
( cd /dev ; /bin/pax -rw -pe null "${named_chrootdir}/dev" )
fi
if [ ! -c "${named_chrootdir}/dev/random" ]; then
rm -f "${named_chrootdir}/dev/random"
( cd /dev ; /bin/pax -rw -pe random "${named_chrootdir}/dev" )
fi
# Copy local timezone information if it's not up-to-date.
#
if [ -f /etc/localtime ]; then
cmp -s /etc/localtime "${named_chrootdir}/etc/localtime" || \
cp -p /etc/localtime "${named_chrootdir}/etc/localtime"
fi
}
# Make symlinks to the correct pid file
#
make_symlinks()
{
checkyesno named_symlink_enable &&
ln -fs "${named_chrootdir}${pidfile}" ${pidfile}
}
named_precmd()
{
local confgen_chroot
# Is the user using a sandbox?
if [ -n "$named_chrootdir" ]; then
rc_flags="$rc_flags -t $named_chrootdir"
confgen_chroot="-t${named_chrootdir}"
checkyesno named_chroot_autoupdate && chroot_autoupdate
fi
# Create an rndc.key file for the user if none exists
if [ ! -f "${named_chrootdir}/etc/namedb/rndc.key" ]; then
rndc-confgen -a -b256 "${confgen_chroot}"
fi
}
load_rc_config $name
# The following variable requires that rc.conf be loaded first
#
required_dirs="$named_chrootdir" # if it is set, it must exist
pidfile="${named_pidfile:-/var/run/${name}/pid}"
run_rc_command "$1"