b3d763cf9b
names in it. We therefore now depend on it. However, this would have then created a circular dependency because named depended on "SERVERS", and racoon was before SERVERS and required kdc, and kdc needs the time to be right and thus depended on ntp. Instead, have named depend on NETWORKING (so that there is a network there), mountcritremote (so we know that named has a directory to work from) and syslogd (so that named has some place to spew information). I'm not sure this is perfect, but it is certainly a big improvement over constantly failing ntpdate runs during boot.
131 lines
3.1 KiB
Bash
Executable File
131 lines
3.1 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# $NetBSD: named,v 1.22 2009/08/03 17:45:48 perry Exp $
|
|
#
|
|
|
|
# PROVIDE: named
|
|
# REQUIRE: NETWORKING mountcritremote syslogd
|
|
# BEFORE: DAEMON
|
|
# KEYWORD: chrootdir
|
|
|
|
$_rc_subr_loaded . /etc/rc.subr
|
|
|
|
name="named"
|
|
rcvar=$name
|
|
command="/usr/sbin/${name}"
|
|
pidfile="/var/run/${name}/${name}.pid"
|
|
start_precmd="named_precmd"
|
|
extra_commands="reload"
|
|
required_dirs="$named_chrootdir" # if it is set, it must exist
|
|
|
|
named_migrate()
|
|
{
|
|
local src=$1
|
|
local dst=$2$1
|
|
echo "Migrating $src to $dst"
|
|
(
|
|
diff=false
|
|
cd $src
|
|
for f in $(find . -type f)
|
|
do
|
|
f=${f##./}
|
|
case $f in
|
|
*/*)
|
|
d=$dst/$(dirname $f)
|
|
;;
|
|
*) d=$dst
|
|
;;
|
|
esac
|
|
mkdir -p $d
|
|
if [ -r "$dst/$f" ]
|
|
then
|
|
if ! cmp $f $dst/$f; then
|
|
diff=true
|
|
fi
|
|
else
|
|
cp -p $f $dst/$f
|
|
fi
|
|
done
|
|
if $diff; then
|
|
echo "Cannot complete migration because files are different"
|
|
echo "Run 'diff -r $src $dst' resolve the differences"
|
|
else
|
|
rm -fr $src
|
|
ln -s $dst $src
|
|
fi
|
|
)
|
|
}
|
|
|
|
named_precmd()
|
|
{
|
|
if [ -z "$named_chrootdir" ]; then
|
|
return 0;
|
|
fi
|
|
|
|
# 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).
|
|
#
|
|
case "$($command -v)" in
|
|
BIND*) # 9 no group, named-xfer, or ndc
|
|
;;
|
|
named*) # 4 and 8
|
|
rc_flags="-g named $rc_flags"
|
|
if [ ! -x "${named_chrootdir}/usr/libexec/named-xfer" -o \
|
|
"${named_chrootdir}/usr/libexec/named-xfer" -ot \
|
|
/usr/libexec/named-xfer ]; then
|
|
rm -f "${named_chrootdir}/usr/libexec/named-xfer"
|
|
cp -p /usr/libexec/named-xfer \
|
|
"${named_chrootdir}/usr/libexec"
|
|
fi
|
|
ln -fs "${named_chrootdir}/var/run/ndc" /var/run/ndc
|
|
;;
|
|
esac
|
|
|
|
for i in null random
|
|
do
|
|
if [ ! -c "${named_chrootdir}/dev/$i" ]; then
|
|
rm -f "${named_chrootdir}/dev/$i"
|
|
(cd /dev &&
|
|
/bin/pax -rw -pe "$i" "${named_chrootdir}/dev")
|
|
fi
|
|
done
|
|
|
|
if [ ! -h /etc/namedb ]; then
|
|
named_migrate /etc/namedb ${named_chrootdir}
|
|
fi
|
|
if [ \( -r /etc/named.conf \) -a \( ! -h /etc/named.conf \) -a \
|
|
\( ! -r ${named_chrootdir}/etc/named.conf \) ]
|
|
then
|
|
mv /etc/named.conf ${named_chrootdir}/etc/named.conf
|
|
ln -s ${named_chrootdir}/etc/named.conf /etc/named.conf
|
|
fi
|
|
if [ \( ! -r ${named_chrootdir}/etc/named.conf \) -a \
|
|
\( -r ${named_chrootdir}/etc/namedb/named.conf \) ]; then
|
|
ln -s namedb/named.conf ${named_chrootdir}/etc
|
|
fi
|
|
|
|
if [ -f /etc/localtime ]; then
|
|
cmp -s /etc/localtime "${named_chrootdir}/etc/localtime" || \
|
|
cp -p /etc/localtime "${named_chrootdir}/etc/localtime"
|
|
fi
|
|
|
|
local piddir="$(dirname "${pidfile}")"
|
|
mkdir -p "${named_chrootdir}${piddir}" "${piddir}"
|
|
chmod 755 "${named_chrootdir}${piddir}" "${piddir}"
|
|
chown named:named "${named_chrootdir}${piddir}" "${piddir}"
|
|
ln -fs "${named_chrootdir}${pidfile}" "${pidfile}"
|
|
|
|
# Change run_rc_commands()'s internal copy of $named_flags
|
|
#
|
|
rc_flags="-u named -t ${named_chrootdir} $rc_flags"
|
|
}
|
|
|
|
load_rc_config $name
|
|
run_rc_command "$1"
|