Add support for "rc.conf.d" file(s).
Differential Revision: https://reviews.freebsd.org/D3551 Reviewed by: allanjude MFC after: 1 week X-MFC-to: stable/10 X-MFC-with: 290337 Relnotes: yes
This commit is contained in:
parent
11051df0cb
commit
bfe64a81a2
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=290693
@ -1,6 +1,6 @@
|
|||||||
if [ ! "$_SYSRC_SUBR" ]; then _SYSRC_SUBR=1
|
if [ ! "$_SYSRC_SUBR" ]; then _SYSRC_SUBR=1
|
||||||
#
|
#
|
||||||
# Copyright (c) 2006-2012 Devin Teske
|
# Copyright (c) 2006-2015 Devin Teske
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
# Redistribution and use in source and binary forms, with or without
|
# Redistribution and use in source and binary forms, with or without
|
||||||
@ -204,6 +204,100 @@ f_sysrc_get()
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# f_sysrc_service_configs [-a|-p] $name [$var_to_set]
|
||||||
|
#
|
||||||
|
# Get a list of optional `rc.conf.d' entries sourced by system `rc.d' script
|
||||||
|
# $name (see rc.subr(8) for additional information on `rc.conf.d'). If $name
|
||||||
|
# exists in `/etc/rc.d' or $local_startup directories and is an rc(8) script
|
||||||
|
# the result is a space separated list of `rc.conf.d' entries sourced by the
|
||||||
|
# $name `rc.d' script. Otherwise, if $name exists as a binary `rc.d' script,
|
||||||
|
# the result is ``/etc/rc.conf.d/$name /usr/local/etc/rc.conf.d/$name''. The
|
||||||
|
# result is NULL if $name does not exist.
|
||||||
|
#
|
||||||
|
# If $var_to_set is missing or NULL, output is to standard out. Returns success
|
||||||
|
# if $name was found, failure otherwise.
|
||||||
|
#
|
||||||
|
# If `-a' flag is given and $var_to_set is non-NULL, append result to value of
|
||||||
|
# $var_to_set rather than overwriting current contents.
|
||||||
|
#
|
||||||
|
# If `-p' flag is given and $var_to_set is non-NULL, prepend result to value of
|
||||||
|
# $var_to_set rather than overwriting current contents.
|
||||||
|
#
|
||||||
|
# NB: The `-a' and `-p' option flags are mutually exclusive.
|
||||||
|
#
|
||||||
|
f_sysrc_service_configs()
|
||||||
|
{
|
||||||
|
local OPTIND=1 OPTARG __flag __append= __prepend=
|
||||||
|
local __local_startup __dir __spath __stype __names=
|
||||||
|
|
||||||
|
while getopts ap __flag; do
|
||||||
|
case "$__flag" in
|
||||||
|
a) __append=1 __prepend= ;;
|
||||||
|
p) __prepend=1 __append= ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
shift $(( $OPTIND - 1 ))
|
||||||
|
|
||||||
|
[ $# -gt 0 ] || return $FAILURE
|
||||||
|
local __sname="$1" __var_to_set="$2"
|
||||||
|
|
||||||
|
__local_startup=$( f_sysrc_get local_startup )
|
||||||
|
for __dir in /etc/rc.d $__local_startup; do
|
||||||
|
__spath="$__dir/$__sname"
|
||||||
|
[ -f "$__spath" -a -x "$__spath" ] || __spath= continue
|
||||||
|
break
|
||||||
|
done
|
||||||
|
[ "$__spath" ] || return $FAILURE
|
||||||
|
|
||||||
|
__stype=$( file -b "$__spath" 2> /dev/null )
|
||||||
|
case "$__stype" in
|
||||||
|
*"shell script"*)
|
||||||
|
__names=$( exec 9<&1 1>&- 2>&-
|
||||||
|
last_name=
|
||||||
|
print_name() {
|
||||||
|
local name="$1"
|
||||||
|
[ "$name" = "$last_name" ] && return
|
||||||
|
echo "$name" >&9
|
||||||
|
last_name="$name"
|
||||||
|
}
|
||||||
|
eval "$( awk '{
|
||||||
|
gsub(/load_rc_config /, "print_name ")
|
||||||
|
gsub(/run_rc_command /, ": ")
|
||||||
|
print
|
||||||
|
}' "$__spath" )"
|
||||||
|
) ;;
|
||||||
|
*)
|
||||||
|
__names="$__sname"
|
||||||
|
esac
|
||||||
|
|
||||||
|
local __name __test_path __configs=
|
||||||
|
for __name in $__names; do
|
||||||
|
for __dir in /etc/rc.d $__local_startup; do
|
||||||
|
__test_path="${__dir%/rc.d}/rc.conf.d/$__name"
|
||||||
|
[ -d "$__test_path" ] ||
|
||||||
|
__configs="$__configs $__test_path" continue
|
||||||
|
for __test_path in "$__test_path"/*; do
|
||||||
|
[ -f "$__test_path" ] || continue
|
||||||
|
__configs="$__configs $__test_path"
|
||||||
|
done
|
||||||
|
done
|
||||||
|
done
|
||||||
|
__configs="${__configs# }"
|
||||||
|
|
||||||
|
if [ "$__var_to_set" ]; then
|
||||||
|
local __cur=
|
||||||
|
[ "$__append" -o "$__prepend" ] &&
|
||||||
|
f_getvar "$__var_to_set" __cur
|
||||||
|
[ "$__append" ] && __configs="$__cur{$__cur:+ }$__configs"
|
||||||
|
[ "$__prepend" ] && __configs="$__configs${__cur:+ }$__cur"
|
||||||
|
setvar "$__var_to_set" "$__configs"
|
||||||
|
else
|
||||||
|
echo "$__configs"
|
||||||
|
fi
|
||||||
|
|
||||||
|
return $SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
# f_sysrc_get_default $varname
|
# f_sysrc_get_default $varname
|
||||||
#
|
#
|
||||||
# Get a system configuration default setting from the default rc.conf(5) file
|
# Get a system configuration default setting from the default rc.conf(5) file
|
||||||
|
Loading…
Reference in New Issue
Block a user