summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--etc/defaults/rc.conf3
-rwxr-xr-xetc/rc.d/named67
-rw-r--r--share/man/man5/rc.conf.57
3 files changed, 53 insertions, 24 deletions
diff --git a/etc/defaults/rc.conf b/etc/defaults/rc.conf
index 0acb903..3c28fdb 100644
--- a/etc/defaults/rc.conf
+++ b/etc/defaults/rc.conf
@@ -197,8 +197,9 @@ inetd_flags="-wW -C 60" # Optional flags to inetd
#
named_enable="NO" # Run named, the DNS server (or NO).
named_program="/usr/sbin/named" # path to named, if you want a different one.
-named_flags="-u bind" # Flags for named
+#named_flags="" # Flags for named
named_pidfile="/var/run/named/pid" # Must set this in named.conf as well
+named_uid="bind" # User to run named as
named_chrootdir="/var/named" # Chroot directory (or "" not to auto-chroot it)
named_chroot_autoupdate="YES" # Automatically install/update chrooted
# components of named. See /etc/rc.d/named.
diff --git a/etc/rc.d/named b/etc/rc.d/named
index e2246ff..bcfdd71 100755
--- a/etc/rc.d/named
+++ b/etc/rc.d/named
@@ -1,24 +1,25 @@
#!/bin/sh
#
-# $NetBSD: named,v 1.10 2002/03/22 04:33:59 thorpej Exp $
# $FreeBSD$
#
# PROVIDE: named
# REQUIRE: SERVERS cleanvar
-# BEFORE: DAEMON
# KEYWORD: shutdown
. /etc/rc.subr
name="named"
-rcvar=`set_rcvar`
-command="/usr/sbin/${name}"
+rcvar=named_enable
+
+command="/usr/sbin/named"
+extra_commands="reload"
+
start_precmd="named_precmd"
start_postcmd="make_symlinks"
+reload_cmd="named_reload"
+stop_cmd="named_stop"
stop_postcmd="named_poststop"
-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
@@ -33,7 +34,7 @@ chroot_autoupdate()
{
# Create (or update) the chroot directory structure
#
- if [ -f /etc/mtree/BIND.chroot.dist ]; then
+ if [ -r /etc/mtree/BIND.chroot.dist ]; then
mtree -deU -f /etc/mtree/BIND.chroot.dist \
-p ${named_chrootdir}
else
@@ -54,7 +55,6 @@ chroot_autoupdate()
else
# Make sure it points to the right place.
ln -shf ${named_chrootdir}/etc/namedb /etc/namedb
-
fi
# Mount a devfs in the chroot directory if needed
@@ -66,9 +66,9 @@ chroot_autoupdate()
# Copy local timezone information if it is 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"
+ if [ -r /etc/localtime ]; then
+ cmp -s /etc/localtime "${named_chrootdir}/etc/localtime" ||
+ cp -p /etc/localtime "${named_chrootdir}/etc/localtime"
fi
}
@@ -77,25 +77,40 @@ chroot_autoupdate()
make_symlinks()
{
checkyesno named_symlink_enable &&
- ln -fs "${named_chrootdir}${pidfile}" ${pidfile}
+ ln -fs "${named_chrootdir}${pidfile}" ${pidfile}
+}
+
+named_reload()
+{
+ rndc reload
+}
+
+named_stop()
+{
+ echo -n "Stopping named"
+ if rndc stop 2>/dev/null; then
+ echo .
+ else
+ echo -n ": rndc failed, trying killall: "
+ if killall named; then
+ echo .
+ fi
+ fi
}
named_poststop()
{
- if [ -n "${named_chrootdir}" -a -c ${named_chrootdir}/dev/null ]; then
+ if [ -n "${named_chrootdir}" -a -c ${named_chrootdir}/dev/null ]; then
umount ${named_chrootdir}/dev 2>/dev/null || true
fi
}
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} -u bind"
checkyesno named_chroot_autoupdate && chroot_autoupdate
else
named_symlink_enable=NO
@@ -103,16 +118,26 @@ named_precmd()
# Create an rndc.key file for the user if none exists
#
- if [ ! -f "${named_chrootdir}/etc/namedb/rndc.key" -a \
- ! -f "${named_chrootdir}/etc/namedb/rndc.conf" ]; then
- rndc-confgen -a -b256 ${confgen_chroot}
+ if [ -s "${named_chrootdir}/etc/namedb/rndc.conf" ]; then
+ return 0
+ fi
+ confgen_command="rndc-confgen -a -b256 -u $named_uid \
+ -c ${named_chrootdir}/etc/namedb/rndc.key"
+ if [ -s "${named_chrootdir}/etc/namedb/rndc.key" ]; then
+ if [ ! `stat -f%Su ${named_chrootdir}/etc/namedb/rndc.key` = \
+ "$named_uid" ]; then
+ $confgen_command
+ fi
+ else
+ $confgen_command
fi
}
load_rc_config $name
-# The following variable requires that rc.conf be loaded first
+# Updating the following variables 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}"
+pidfile="${named_pidfile:-/var/run/named/pid}"
+command_args="-u ${named_uid:=root}"
run_rc_command "$1"
diff --git a/share/man/man5/rc.conf.5 b/share/man/man5/rc.conf.5
index d4d4627..c430d5a 100644
--- a/share/man/man5/rc.conf.5
+++ b/share/man/man5/rc.conf.5
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd February 3, 2006
+.Dd February 13, 2006
.Dt RC.CONF 5
.Os
.Sh NAME
@@ -1448,8 +1448,11 @@ these are the flags to pass to
This is the default path to the
.Xr named 8
daemon's PID file.
-Change it if you change the location in
+This must match the location in
.Xr named.conf 5 .
+.It Va named_uid
+.Pq Vt str
+The user that the named process should be run as.
.It Va named_chrootdir
.Pq Vt str
The root directory for a name server run in a
OpenPOWER on IntegriCloud