Author: dougb
Date: Sat Apr 23 04:26:31 2011
New Revision: 220962
URL: http://svn.freebsd.org/changeset/base/220962

Log:
  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.

Modified:
  head/etc/defaults/rc.conf
  head/etc/rc.d/devd
  head/etc/rc.d/named
  head/etc/rc.subr
  head/share/man/man5/rc.conf.5

Modified: head/etc/defaults/rc.conf
==============================================================================
--- head/etc/defaults/rc.conf   Sat Apr 23 02:10:38 2011        (r220961)
+++ head/etc/defaults/rc.conf   Sat Apr 23 04:26:31 2011        (r220962)
@@ -274,7 +274,6 @@ named_enable="NO"           # Run named, the DNS 
 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

Modified: head/etc/rc.d/devd
==============================================================================
--- head/etc/rc.d/devd  Sat Apr 23 02:10:38 2011        (r220961)
+++ head/etc/rc.d/devd  Sat Apr 23 04:26:31 2011        (r220962)
@@ -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

Modified: head/etc/rc.d/named
==============================================================================
--- head/etc/rc.d/named Sat Apr 23 02:10:38 2011        (r220961)
+++ head/etc/rc.d/named Sat Apr 23 04:26:31 2011        (r220962)
@@ -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"

Modified: head/etc/rc.subr
==============================================================================
--- head/etc/rc.subr    Sat Apr 23 02:10:38 2011        (r220961)
+++ head/etc/rc.subr    Sat Apr 23 04:26:31 2011        (r220962)
@@ -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.

Modified: head/share/man/man5/rc.conf.5
==============================================================================
--- head/share/man/man5/rc.conf.5       Sat Apr 23 02:10:38 2011        
(r220961)
+++ head/share/man/man5/rc.conf.5       Sat Apr 23 04:26:31 2011        
(r220962)
@@ -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
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to