Create a gist now

Instantly share code, notes, and snippets.

@dlangille /borked
Last active Oct 27, 2017

What would you like to do?
/etc/rc.subr got messed up during an FreeBSD 10.3 to FreeBSD 11.1 upgrade. I am sure this was my fault. re http://dan.langille.org/2017/10/27/etcrc-subr-1391-syntax-error-fi-unexpected/
--- rc.subr 2017-10-27 18:41:39.578099000 +0000
+++ rc.subr.borked 2017-10-26 23:00:47.987005000 +0000
@@ -1,778 +1,4 @@
# $NetBSD: rc.subr,v 1.67 2006/10/07 11:25:15 elad Exp $
-# $FreeBSD$
-#
-# Copyright (c) 1997-2004 The NetBSD Foundation, Inc.
-# All rights reserved.
-#
-# This code is derived from software contributed to The NetBSD Foundation
-# by Luke Mewburn.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
-# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
-# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-#
-# rc.subr
-# functions used by various rc scripts
-#
-
-: ${RC_PID:=$$}; export RC_PID
-
-#
-# Operating System dependent/independent variables
-#
-
-if [ -z "${_rc_subr_loaded}" ]; then
-
-_rc_subr_loaded="YES"
-
-SYSCTL="/sbin/sysctl"
-SYSCTL_N="${SYSCTL} -n"
-SYSCTL_W="${SYSCTL}"
-PROTECT="/usr/bin/protect"
-ID="/usr/bin/id"
-IDCMD="if [ -x $ID ]; then $ID -un; fi"
-PS="/bin/ps -ww"
-JID=`$PS -p $$ -o jid=`
-
-#
-# functions
-# ---------
-
-# list_vars pattern
-# List vars matching pattern.
-#
-list_vars()
-{
- set | { while read LINE; do
- var="${LINE%%=*}"
- case "$var" in
- "$LINE"|*[!a-zA-Z0-9_]*) continue ;;
- $1) echo $var
- esac
- done; }
-}
-
-# set_rcvar [var] [defval] [desc]
-#
-# Echo or define a rc.conf(5) variable name. Global variable
-# $rcvars is used.
-#
-# If no argument is specified, echo "${name}_enable".
-#
-# If only a var is specified, echo "${var}_enable".
-#
-# If var and defval are specified, the ${var} is defined as
-# rc.conf(5) variable and the default value is ${defvar}. An
-# optional argument $desc can also be specified to add a
-# description for that.
-#
-set_rcvar()
-{
- local _var
-
- case $# in
- 0) echo ${name}_enable ;;
- 1) echo ${1}_enable ;;
- *)
- debug "set_rcvar: \$$1=$2 is added" \
- " as a rc.conf(5) variable."
- _var=$1
- rcvars="${rcvars# } $_var"
- eval ${_var}_defval=\"$2\"
- shift 2
- eval ${_var}_desc=\"$*\"
- ;;
- esac
-}
-
-# set_rcvar_obsolete oldvar [newvar] [msg]
-# Define obsolete variable.
-# Global variable $rcvars_obsolete is used.
-#
-set_rcvar_obsolete()
-{
- local _var
- _var=$1
- debug "set_rcvar_obsolete: \$$1(old) -> \$$2(new) is defined"
-
- rcvars_obsolete="${rcvars_obsolete# } $1"
- eval ${1}_newvar=\"$2\"
- shift 2
- eval ${_var}_obsolete_msg=\"$*\"
-}
-
-#
-# force_depend script [rcvar]
-# Force a service to start. Intended for use by services
-# to resolve dependency issues.
-# $1 - filename of script, in /etc/rc.d, to run
-# $2 - name of the script's rcvar (minus the _enable)
-#
-force_depend()
-{
- local _depend _dep_rcvar
-
- _depend="$1"
- _dep_rcvar="${2:-$1}_enable"
-
- [ -n "$rc_fast" ] && ! checkyesno always_force_depends &&
- checkyesno $_dep_rcvar && return 0
-
- /etc/rc.d/${_depend} forcestatus >/dev/null 2>&1 && return 0
-
- info "${name} depends on ${_depend}, which will be forced to start."
- if ! /etc/rc.d/${_depend} forcestart; then
- warn "Unable to force ${_depend}. It may already be running."
- return 1
- fi
-}
-
-#
-# checkyesno var
-# Test $1 variable, and warn if not set to YES or NO.
-# Return 0 if it's "yes" (et al), nonzero otherwise.
-#
-checkyesno()
-{
- eval _value=\$${1}
- debug "checkyesno: $1 is set to $_value."
- case $_value in
-
- # "yes", "true", "on", or "1"
- [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1)
- return 0
- ;;
-
- # "no", "false", "off", or "0"
- [Nn][Oo]|[Ff][Aa][Ll][Ss][Ee]|[Oo][Ff][Ff]|0)
- return 1
- ;;
- *)
- warn "\$${1} is not set properly - see rc.conf(5)."
- return 1
- ;;
- esac
-}
-
-#
-# reverse_list list
-# print the list in reverse order
-#
-reverse_list()
-{
- _revlist=
- for _revfile; do
- _revlist="$_revfile $_revlist"
- done
- echo $_revlist
-}
-
-# stop_boot always
-# If booting directly to multiuser or $always is enabled,
-# send SIGTERM to the parent (/etc/rc) to abort the boot.
-# Otherwise just exit.
-#
-stop_boot()
-{
- local always
-
- case $1 in
- # "yes", "true", "on", or "1"
- [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1)
- always=true
- ;;
- *)
- always=false
- ;;
- esac
- if [ "$autoboot" = yes -o "$always" = true ]; then
- echo "ERROR: ABORTING BOOT (sending SIGTERM to parent)!"
- kill -TERM ${RC_PID}
- fi
- exit 1
-}
-
-#
-# mount_critical_filesystems type
-# Go through the list of critical filesystems as provided in
-# the rc.conf(5) variable $critical_filesystems_${type}, checking
-# each one to see if it is mounted, and if it is not, mounting it.
-#
-mount_critical_filesystems()
-{
- eval _fslist=\$critical_filesystems_${1}
- for _fs in $_fslist; do
- mount | (
- _ismounted=false
- while read what _on on _type type; do
- if [ $on = $_fs ]; then
- _ismounted=true
- fi
- done
- if $_ismounted; then
- :
- else
- mount $_fs >/dev/null 2>&1
- fi
- )
- done
-}
-
-#
-# check_pidfile pidfile procname [interpreter]
-# Parses the first line of pidfile for a PID, and ensures
-# that the process is running and matches procname.
-# Prints the matching PID upon success, nothing otherwise.
-# interpreter is optional; see _find_processes() for details.
-#
-check_pidfile()
-{
- _pidfile=$1
- _procname=$2
- _interpreter=$3
- if [ -z "$_pidfile" -o -z "$_procname" ]; then
- err 3 'USAGE: check_pidfile pidfile procname [interpreter]'
- fi
- if [ ! -f $_pidfile ]; then
- debug "pid file ($_pidfile): not readable."
- return
- fi
- read _pid _junk < $_pidfile
- if [ -z "$_pid" ]; then
- debug "pid file ($_pidfile): no pid in file."
- return
- fi
- _find_processes $_procname ${_interpreter:-.} '-p '"$_pid"
-}
-
-#
-# check_process procname [interpreter]
-# Ensures that a process (or processes) named procname is running.
-# Prints a list of matching PIDs.
-# interpreter is optional; see _find_processes() for details.
-#
-check_process()
-{
- _procname=$1
- _interpreter=$2
- if [ -z "$_procname" ]; then
- err 3 'USAGE: check_process procname [interpreter]'
- fi
- _find_processes $_procname ${_interpreter:-.} '-ax'
-}
-
-#
-# _find_processes procname interpreter psargs
-# Search for procname in the output of ps generated by psargs.
-# Prints the PIDs of any matching processes, space separated.
-#
-# If interpreter == ".", check the following variations of procname
-# against the first word of each command:
-# procname
-# `basename procname`
-# `basename procname` + ":"
-# "(" + `basename procname` + ")"
-# "[" + `basename procname` + "]"
-#
-# If interpreter != ".", read the first line of procname, remove the
-# leading #!, normalise whitespace, append procname, and attempt to
-# match that against each command, either as is, or with extra words
-# at the end. As an alternative, to deal with interpreted daemons
-# using perl, the basename of the interpreter plus a colon is also
-# tried as the prefix to procname.
-#
-_find_processes()
-{
- if [ $# -ne 3 ]; then
- err 3 'USAGE: _find_processes procname interpreter psargs'
- fi
- _procname=$1
- _interpreter=$2
- _psargs=$3
-
- _pref=
- if [ $_interpreter != "." ]; then # an interpreted script
- _script="${_chroot}${_chroot:+/}$_procname"
- if [ -r "$_script" ]; then
- read _interp < $_script # read interpreter name
- case "$_interp" in
- \#!*)
- _interp=${_interp#\#!} # strip #!
- set -- $_interp
- case $1 in
- */bin/env)
- shift # drop env to get real name
- ;;
- esac
- if [ $_interpreter != $1 ]; then
- warn "\$command_interpreter $_interpreter != $1"
- fi
- ;;
- *)
- warn "no shebang line in $_script"
- set -- $_interpreter
- ;;
- esac
- else
- warn "cannot read shebang line from $_script"
- set -- $_interpreter
- fi
- _interp="$* $_procname" # cleanup spaces, add _procname
- _interpbn=${1##*/}
- _fp_args='_argv'
- _fp_match='case "$_argv" in
- ${_interp}|"${_interp} "*|"[${_interpbn}]"|"${_interpbn}: ${_procname}"*)'
- else # a normal daemon
- _procnamebn=${_procname##*/}
- _fp_args='_arg0 _argv'
- _fp_match='case "$_arg0" in
- $_procname|$_procnamebn|${_procnamebn}:|"(${_procnamebn})"|"[${_procnamebn}]")'
- fi
-
- _proccheck="\
- $PS 2>/dev/null -o pid= -o jid= -o command= $_psargs"' |
- while read _npid _jid '"$_fp_args"'; do
- '"$_fp_match"'
- if [ "$JID" -eq "$_jid" ];
- then echo -n "$_pref$_npid";
- _pref=" ";
- fi
- ;;
- esac
- done'
-
-# debug "in _find_processes: proccheck is ($_proccheck)."
- eval $_proccheck
-}
-
-# sort_lite [-b] [-n] [-k POS] [-t SEP]
-# A lite version of sort(1) (supporting a few options) that can be used
-# before the real sort(1) is available (e.g., in scripts that run prior
-# to mountcritremote). Requires only shell built-in functionality.
-#
-sort_lite()
-{
- local funcname=sort_lite
- local sort_sep="$IFS" sort_ignore_leading_space=
- local sort_field=0 sort_strict_fields= sort_numeric=
- local nitems=0 skip_leading=0 trim=
-
- local OPTIND flag
- while getopts bnk:t: flag; do
- case "$flag" in
- b) sort_ignore_leading_space=1 ;;
- n) sort_numeric=1 sort_ignore_leading_space=1 ;;
- k) sort_field="${OPTARG%%,*}" ;; # only up to first comma
- # NB: Unlike sort(1) only one POS allowed
- t) sort_sep="$OPTARG"
- if [ ${#sort_sep} -gt 1 ]; then
- echo "$funcname: multi-character tab \`$sort_sep'" >&2
- return 1
- fi
- sort_strict_fields=1
- ;;
- \?) return 1 ;;
- esac
- done
- shift $(( $OPTIND - 1 ))
-
- # Create transformation pattern to trim leading text if desired
- case "$sort_field" in
- ""|[!0-9]*|*[!0-9.]*)
- echo "$funcname: invalid sort field \`$sort_field'" >&2
- return 1
- ;;
- *.*)
- skip_leading=${sort_field#*.} sort_field=${sort_field%%.*}
- while [ ${skip_leading:-0} -gt 1 ] 2> /dev/null; do
- trim="$trim?" skip_leading=$(( $skip_leading - 1 ))
- done
- esac
-
- # Copy input to series of local numbered variables
- # NB: IFS of NULL preserves leading whitespace
- local LINE
- while IFS= read -r LINE || [ "$LINE" ]; do
- nitems=$(( $nitems + 1 ))
- local src_$nitems="$LINE"
- done
-
- #
- # Sort numbered locals using insertion sort
- #
- local curitem curitem_orig curitem_mod curitem_haskey
- local dest dest_orig dest_mod dest_haskey
- local d gt n
- local i=1
- while [ $i -le $nitems ]; do
- curitem_haskey=1 # Assume sort field (-k POS) exists
- eval curitem=\"\$src_$i\"
- curitem_mod="$curitem" # for modified comparison
- curitem_orig="$curitem" # for original comparison
-
- # Trim leading whitespace if desired
- if [ "$sort_ignore_leading_space" ]; then
- while case "$curitem_orig" in
- [$IFS]*) : ;; *) false; esac
- do
- curitem_orig="${curitem_orig#?}"
- done
- curitem_mod="$curitem_orig"
- fi
-
- # Shift modified comparison value if sort field (-k POS) is > 1
- n=$sort_field
- while [ $n -gt 1 ]; do
- case "$curitem_mod" in
- *[$sort_sep]*)
- # Cut text up-to (and incl.) first separator
- curitem_mod="${curitem_mod#*[$sort_sep]}"
-
- # Skip NULLs unless strict field splitting
- [ "$sort_strict_fields" ] ||
- [ "${curitem_mod%%[$sort_sep]*}" ] ||
- [ $n -eq 2 ] ||
- continue
- ;;
- *)
- # Asked for a field that doesn't exist
- curitem_haskey= break
- esac
- n=$(( $n - 1 ))
- done
-
- # Trim trailing words if sort field >= 1
- [ $sort_field -ge 1 -a "$sort_numeric" ] &&
- curitem_mod="${curitem_mod%%[$sort_sep]*}"
-
- # Apply optional trim (-k POS.TRIM) to cut leading characters
- curitem_mod="${curitem_mod#$trim}"
-
- # Determine the type of modified comparison to use initially
- # NB: Prefer numerical if requested but fallback to standard
- case "$curitem_mod" in
- ""|[!0-9]*) # NULL or begins with non-number
- gt=">"
- [ "$sort_numeric" ] && curitem_mod=0
- ;;
- *)
- if [ "$sort_numeric" ]; then
- gt="-gt"
- curitem_mod="${curitem_mod%%[!0-9]*}"
- # NB: trailing non-digits removed
- # otherwise numeric comparison fails
- else
- gt=">"
- fi
- esac
-
- # If first time through, short-circuit below position-search
- if [ $i -le 1 ]; then
- d=0
- else
- d=1
- fi
-
- #
- # Find appropriate element position
- #
- while [ $d -gt 0 ]
- do
- dest_haskey=$curitem_haskey
- eval dest=\"\$dest_$d\"
- dest_mod="$dest" # for modified comparison
- dest_orig="$dest" # for original comparison
-
- # Trim leading whitespace if desired
- if [ "$sort_ignore_leading_space" ]; then
- while case "$dest_orig" in
- [$IFS]*) : ;; *) false; esac
- do
- dest_orig="${dest_orig#?}"
- done
- dest_mod="$dest_orig"
- fi
-
- # Shift modified value if sort field (-k POS) is > 1
- n=$sort_field
- while [ $n -gt 1 ]; do
- case "$dest_mod" in
- *[$sort_sep]*)
- # Cut text up-to (and incl.) 1st sep
- dest_mod="${dest_mod#*[$sort_sep]}"
-
- # Skip NULLs unless strict fields
- [ "$sort_strict_fields" ] ||
- [ "${dest_mod%%[$sort_sep]*}" ] ||
- [ $n -eq 2 ] ||
- continue
- ;;
- *)
- # Asked for a field that doesn't exist
- dest_haskey= break
- esac
- n=$(( $n - 1 ))
- done
-
- # Trim trailing words if sort field >= 1
- [ $sort_field -ge 1 -a "$sort_numeric" ] &&
- dest_mod="${dest_mod%%[$sort_sep]*}"
-
- # Apply optional trim (-k POS.TRIM), cut leading chars
- dest_mod="${dest_mod#$trim}"
-
- # Determine type of modified comparison to use
- # NB: Prefer numerical if requested, fallback to std
- case "$dest_mod" in
- ""|[!0-9]*) # NULL or begins with non-number
- gt=">"
- [ "$sort_numeric" ] && dest_mod=0
- ;;
- *)
- if [ "$sort_numeric" ]; then
- gt="-gt"
- dest_mod="${dest_mod%%[!0-9]*}"
- # NB: kill trailing non-digits
- # for numeric comparison safety
- else
- gt=">"
- fi
- esac
-
- # Break if we've found the proper element position
- if [ "$curitem_haskey" -a "$dest_haskey" ]; then
- if [ "$dest_mod" = "$curitem_mod" ]; then
- [ "$dest_orig" ">" "$curitem_orig" ] &&
- break
- elif [ "$dest_mod" $gt "$curitem_mod" ] \
- 2> /dev/null
- then
- break
- fi
- else
- [ "$dest_orig" ">" "$curitem_orig" ] && break
- fi
-
- # Break if we've hit the end
- [ $d -ge $i ] && break
-
- d=$(( $d + 1 ))
- done
-
- # Shift remaining positions forward, making room for new item
- n=$i
- while [ $n -ge $d ]; do
- # Shift destination item forward one placement
- eval dest_$(( $n + 1 ))=\"\$dest_$n\"
- n=$(( $n - 1 ))
- done
-
- # Place the element
- if [ $i -eq 1 ]; then
- local dest_1="$curitem"
- else
- local dest_$d="$curitem"
- fi
-
- i=$(( $i + 1 ))
- done
-
- # Print sorted results
- d=1
- while [ $d -le $nitems ]; do
- eval echo \"\$dest_$d\"
- d=$(( $d + 1 ))
- done
-}
-
-#
-# wait_for_pids pid [pid ...]
-# spins until none of the pids exist
-#
-wait_for_pids()
-{
- local _list _prefix _nlist _j
-
- _list="$@"
- if [ -z "$_list" ]; then
- return
- fi
- _prefix=
- while true; do
- _nlist="";
- for _j in $_list; do
- if kill -0 $_j 2>/dev/null; then
- _nlist="${_nlist}${_nlist:+ }$_j"
- [ -n "$_prefix" ] && sleep 1
- fi
- done
- if [ -z "$_nlist" ]; then
- break
- fi
- _list=$_nlist
- echo -n ${_prefix:-"Waiting for PIDS: "}$_list
- _prefix=", "
- pwait $_list 2>/dev/null
- done
- if [ -n "$_prefix" ]; then
- echo "."
- 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()
-{
- if [ -z "$1" -o -z "$2" ]; then
- err 3 "USAGE: get_pidfile_from_conf string file ($name)"
- fi
-
- local string file line
-
- string="$1" ; file="$2"
-
- if [ ! -s "$file" ]; then
- err 3 "get_pidfile_from_conf: $file does not exist ($name)"
- 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.
-#
-check_startmsgs()
-{
- if [ -n "$rc_quiet" ]; then
- checkyesno rc_startmsgs
- else
- return 0
- fi
-}
-
-#
-# run_rc_command argument
-# Search for argument in the list of supported commands, which is:
-# "start stop restart rcvar status poll ${extra_commands}"
-# If there's a match, run ${argument}_cmd or the default method
-# (see below).
-#
-# If argument has a given prefix, then change the operation as follows:
-# Prefix Operation
-# ------ ---------
-# fast Skip the pid check, and set rc_fast=yes, rc_quiet=yes
-# force Set ${rcvar} to YES, and set rc_force=yes
-# one Set ${rcvar} to YES
-# quiet Don't output some diagnostics, and set rc_quiet=yes
-#
-# The following globals are used:
-#
-# Name Needed Purpose
-# ---- ------ -------
-# name y Name of script.
-#
-# command n Full path to command.
-# Not needed if ${rc_arg}_cmd is set for
-# each keyword.
-#
-# command_args n Optional args/shell directives for command.
-#
-# command_interpreter n If not empty, command is interpreted, so
-# call check_{pidfile,process}() appropriately.
-#
-# desc n Description of script.
-#
-# extra_commands n List of extra commands supported.
-#
-# pidfile n If set, use check_pidfile $pidfile $command,
-# otherwise use check_process $command.
-# In either case, only check if $command is set.
-#
-# procname n Process name to check for instead of $command.
-#
-# rcvar n This is checked with checkyesno to determine
-# if the action should be run.
-#
-# ${name}_program n Full path to command.
-# Meant to be used in /etc/rc.conf to override
-# ${command}.
-#
-# ${name}_chroot n Directory to chroot to before running ${command}
-# Requires /usr to be mounted.
-#
-# ${name}_chdir n Directory to cd to before running ${command}
-# (if not using ${name}_chroot).
-#
-# ${name}_flags n Arguments to call ${command} with.
-# NOTE: $flags from the parent environment
-# can be used to override this.
-#
-# ${name}_env n Environment variables to run ${command} with.
-#
-# ${name}_fib n Routing table number to run ${command} with.
-#
-# ${name}_nice n Nice level to run ${command} at.
-#
-# ${name}_oomprotect n Don't kill ${command} when swap space is exhausted.
-#
-# ${name}_user n User to run ${command} as, using su(1) if not
-# using ${name}_chroot.
-# Requires /usr to be mounted.
-#
-# ${name}_group n Group to run chrooted ${command} as.
-# Requires /usr to be mounted.
-#
-# ${name}_groups n Comma separated list of supplementary groups
-# to run the chrooted ${command} with.
-# Requires /usr to be mounted.
-#
-# ${name}_prepend n Command added before ${command}.
-#
-# ${name}_login_class n Login class to use, else "daemon".
-#
# ${rc_arg}_cmd n If set, use this as the method when invoked;
# Otherwise, use default command (see below)
#
@@ -985,14 +211,6 @@
fi
fi
- if [ $rc_arg = "start" -a -z "$rc_fast" -a -n "$rc_pid" ]; then
- if [ -z "$rc_quiet" ]; then
- echo 1>&2 "${name} already running? " \
- "(pid=$rc_pid)."
- fi
- return 1
- fi
-
# if there's a custom ${XXX_cmd},
# run that instead of the default
#
@@ -1031,6 +249,14 @@
;;
start)
+ if [ -z "$rc_fast" -a -n "$rc_pid" ]; then
+ if [ -z "$rc_quiet" ]; then
+ echo 1>&2 "${name} already running? " \
+ "(pid=$rc_pid)."
+ fi
+ return 1
+ fi
+
if [ ! -x "${_chroot}${_chroot:+/}${command}" ]; then
warn "run_rc_command: cannot run $command"
return 1
@@ -1049,14 +275,12 @@
_doit="\
${_nice:+nice -n $_nice }\
${_fib:+setfib -F $_fib }\
-${_env:+env $_env }\
chroot ${_user:+-u $_user }${_group:+-g $_group }${_groups:+-G $_groups }\
$_chroot $command $rc_flags $command_args"
else
_cd="${_chdir:+cd $_chdir && }"
_doit="\
${_fib:+setfib -F $_fib }\
-${_env:+env $_env }\
$command $rc_flags $command_args"
if [ -n "$_user" ]; then
_doit="su -m $_user -c 'sh -c \"$_doit\"'"
@@ -1067,9 +291,6 @@
fi
_doit="nice -n $_nice $_doit"
fi
- if [ -n "$_prepend" ]; then
- _doit="$_prepend $_doit"
- fi
fi
# Prepend default limits
@@ -1356,15 +577,21 @@
}
#
-# load_rc_config [service]
-# Source in the configuration file(s) for a given service.
-# If no service is specified, only the global configuration
-# file(s) will be loaded.
+# load_rc_config name
+# Source in the configuration file for a given name.
#
load_rc_config()
{
local _name _rcvar_val _var _defval _v _msg _new _d
_name=$1
+ if [ -z "$_name" ]; then
+ err 3 'USAGE: load_rc_config name'
+ fi
+
+ if [ -L /etc/rc.digitalocean.d/droplet.conf -a -f /etc/rc.digitalocean.d/droplet.conf ]
+ then
+ . /etc/rc.digitalocean.d/droplet.conf
+ fi
if ${_rc_conf_loaded:-false}; then
:
@@ -1380,25 +607,20 @@
_rc_conf_loaded=true
fi
- # If a service name was specified, attempt to load
- # service-specific configuration
- if [ -n "$_name" ] ; then
- for _d in /etc ${local_startup}; do
- _d=${_d%/rc.d}
- if [ -f ${_d}/rc.conf.d/"$_name" ]; then
- debug "Sourcing ${_d}/rc.conf.d/$_name"
- . ${_d}/rc.conf.d/"$_name"
- elif [ -d ${_d}/rc.conf.d/"$_name" ] ; then
- local _rc
- for _rc in ${_d}/rc.conf.d/"$_name"/* ; do
- if [ -f "$_rc" ] ; then
- debug "Sourcing $_rc"
- . "$_rc"
- fi
- done
- fi
- done
- fi
+ for _d in /etc ${local_startup%*/rc.d}; do
+ if [ -f ${_d}/rc.conf.d/"$_name" ]; then
+ debug "Sourcing ${_d}/rc.conf.d/$_name"
+ . ${_d}/rc.conf.d/"$_name"
+ elif [ -d ${_d}/rc.conf.d/"$_name" ] ; then
+ local _rc
+ for _rc in ${_d}/rc.conf.d/"$_name"/* ; do
+ if [ -f "$_rc" ] ; then
+ debug "Sourcing $_rc"
+ . "$_rc"
+ fi
+ done
+ fi
+ done
# Set defaults if defined.
for _var in $rcvar $rcvars; do
@@ -2133,7 +1355,7 @@
# check_namevarlist var
# Return "0" if ${name}_var is reserved in rc.subr.
-_rc_namevarlist="program chroot chdir env flags fib nice user group groups prepend"
+_rc_namevarlist="program chroot chdir flags fib nice user group groups"
check_namevarlist()
{
local _v
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment