From 8028832653dc02dbb77af7068dcdd065b99d4ba6 Mon Sep 17 00:00:00 2001 From: Doug Barton Date: Sat, 23 Apr 2011 04:26:31 +0000 Subject: [PATCH] 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. --- etc/defaults/rc.conf | 1 - etc/rc.d/devd | 13 ++++++++++++- etc/rc.d/named | 18 +++++++++++++++++- etc/rc.subr | 39 +++++++++++++++++++++++++++++++++++++++ share/man/man5/rc.conf.5 | 9 +-------- 5 files changed, 69 insertions(+), 11 deletions(-) diff --git a/etc/defaults/rc.conf b/etc/defaults/rc.conf index 42722b98fc87..51fdf25d3f0f 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 a12664507ca4..e257da6aca86 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 81db6463dd3d..676de7667415 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 9f3c7b6a7144..74a6b6393d90 100644 --- a/etc/rc.subr +++ b/etc/rc.subr @@ -383,6 +383,45 @@ wait_for_pids() fi } +# +# 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 diff --git a/share/man/man5/rc.conf.5 b/share/man/man5/rc.conf.5 index 6ff9c38815cc..ff731dd99249 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