summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordougb <dougb@FreeBSD.org>2011-04-23 04:26:31 +0000
committerdougb <dougb@FreeBSD.org>2011-04-23 04:26:31 +0000
commitd05cc95927280821298e08e1be9fe78cc987ad6c (patch)
tree19cd95ff052dd0f9ab092912f12efc9fa1559f6b
parent44325abfea7570a22af7a54f3a32c64fa462744f (diff)
downloadFreeBSD-src-d05cc95927280821298e08e1be9fe78cc987ad6c.zip
FreeBSD-src-d05cc95927280821298e08e1be9fe78cc987ad6c.tar.gz
Introduce to rc.subr get_pidfile_from_conf(). It does just what it sounds
like, determines the path to a pid file as it is specified in a conf file. Use the new feature for rc.d/named and rc.d/devd, the 2 services in the base that list their pid files in their conf files. Remove the now-obsolete named_pidfile, and warn users if they have it set.
-rw-r--r--etc/defaults/rc.conf1
-rwxr-xr-xetc/rc.d/devd13
-rwxr-xr-xetc/rc.d/named18
-rw-r--r--etc/rc.subr39
-rw-r--r--share/man/man5/rc.conf.59
5 files changed, 69 insertions, 11 deletions
diff --git a/etc/defaults/rc.conf b/etc/defaults/rc.conf
index 42722b9..51fdf25 100644
--- a/etc/defaults/rc.conf
+++ b/etc/defaults/rc.conf
@@ -274,7 +274,6 @@ 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_conf="/etc/namedb/named.conf" # Path to the configuration file
#named_flags="" # Use this for flags OTHER than -u and -c
-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
diff --git a/etc/rc.d/devd b/etc/rc.d/devd
index a126645..e257da6 100755
--- a/etc/rc.d/devd
+++ b/etc/rc.d/devd
@@ -13,12 +13,23 @@
name="devd"
rcvar=`set_rcvar`
command="/sbin/${name}"
-pidfile=/var/run/${name}.pid
start_precmd=${name}_prestart
+stop_precmd=find_pidfile
+
+find_pidfile()
+{
+ if get_pidfile_from_conf pid-file /etc/devd.conf; then
+ pidfile="$_pidfile_from_conf"
+ else
+ pidfile="/var/run/${name}.pid"
+ fi
+}
devd_prestart ()
{
+ find_pidfile
+
# If devd is disabled, turn it off in the kernel to avoid memory leaks.
if ! checkyesno ${rcvar}; then
$SYSCTL hw.bus.devctl_disable=1
diff --git a/etc/rc.d/named b/etc/rc.d/named
index 81db646..676de76 100755
--- a/etc/rc.d/named
+++ b/etc/rc.d/named
@@ -112,8 +112,19 @@ named_reload()
${command%/named}/rndc reload
}
+find_pidfile()
+{
+ if get_pidfile_from_conf pid-file $named_conf; then
+ pidfile="$_pidfile_from_conf"
+ else
+ pidfile="/var/run/named/pid"
+ fi
+}
+
named_stop()
{
+ find_pidfile
+
# This duplicates an undesirably large amount of code from the stop
# routine in rc.subr in order to use rndc to shut down the process,
# and to give it a second chance in case rndc fails.
@@ -156,6 +167,12 @@ create_file () {
named_prestart()
{
+ find_pidfile
+
+ if [ -n "$named_pidfile" ]; then
+ warn 'named_pidfile: now determined from the conf file'
+ fi
+
command_args="-u ${named_uid:=root}"
if [ ! "$named_conf" = '/etc/namedb/named.conf' ]; then
@@ -279,7 +296,6 @@ load_rc_config $name
#
required_dirs="$named_chrootdir" # if it is set, it must exist
-pidfile="${named_pidfile:-/var/run/named/pid}"
named_confdir="${named_chrootdir}${named_conf%/*}"
run_rc_command "$1"
diff --git a/etc/rc.subr b/etc/rc.subr
index 9f3c7b6..74a6b63 100644
--- a/etc/rc.subr
+++ b/etc/rc.subr
@@ -384,6 +384,45 @@ wait_for_pids()
}
#
+# get_pidfile_from_conf string file
+#
+# Takes a string to search for in the specified file.
+# Ignores lines with traditional comment characters.
+#
+# Example:
+#
+# if get_pidfile_from_conf string file; then
+# pidfile="$_pidfile_from_conf"
+# else
+# pidfile='appropriate default'
+# fi
+#
+get_pidfile_from_conf()
+{
+ local string file line
+
+ string="$1" ; file="$2"
+
+ if [ -z "$string" -o -z "$file" ] || [ ! -s "$file" ]; then
+ err 3 'USAGE: get_pidfile_from_conf string file'
+ fi
+
+ while read line; do
+ case "$line" in
+ *[#\;]*${string}*) continue ;;
+ *${string}*) break ;;
+ esac
+ done < $file
+
+ if [ -n "$line" ]; then
+ line=${line#*/}
+ _pidfile_from_conf="/${line%%[\"\;]*}"
+ else
+ return 1
+ fi
+}
+
+#
# check_startmsgs
# If rc_quiet is set (usually as a result of using faststart at
# boot time) check if rc_startmsgs is enabled.
diff --git a/share/man/man5/rc.conf.5 b/share/man/man5/rc.conf.5
index 6ff9c38..ff731dd 100644
--- a/share/man/man5/rc.conf.5
+++ b/share/man/man5/rc.conf.5
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd January 7, 2011
+.Dd April 22, 2011
.Dt RC.CONF 5
.Os
.Sh NAME
@@ -1832,13 +1832,6 @@ is set to
.Dq Li YES ,
these are the flags to pass to
.Xr named 8 .
-.It Va named_pidfile
-.Pq Vt str
-This is the default path to the
-.Xr named 8
-daemon's PID file.
-This must match the location in
-.Xr named.conf 5 .
.It Va named_uid
.Pq Vt str
The user that the
OpenPOWER on IntegriCloud