freebsd-dev/etc/rc.d/named
Doug Barton ae00aa68e8 Fix two glitches that appear in the non-chroot case. First, if not
chrooted the pid symlink code should not fire. Also, remove the quotes
around the chroot variable in the rndc-confgen invocation so that if
not chrooted the command will still succeed.

Pointed out by:	Sean McNeil <sean@mcneil.com>
2004-09-24 23:49:38 +00:00

86 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 necessary. 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
else
named_symlink_enable=NO
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"