aboutsummaryrefslogtreecommitdiff
path: root/libexec/rc/rc.subr
diff options
context:
space:
mode:
authorDevin Teske <dteske@FreeBSD.org>2018-10-31 20:37:12 +0000
committerDevin Teske <dteske@FreeBSD.org>2018-10-31 20:37:12 +0000
commitda45b4da83c6a68c3bc3a1682ec77d44141164d2 (patch)
tree2b8b0a3b274b0b8d630092cad2311fad17fd7c15 /libexec/rc/rc.subr
parent9319dded3d53a39ab6ba093c87bcbc42115ae968 (diff)
downloadsrc-da45b4da83c6a68c3bc3a1682ec77d44141164d2.tar.gz
src-da45b4da83c6a68c3bc3a1682ec77d44141164d2.zip
Add new rc keywords: enable, disable, delete
This adds new keywords to rc/service to enable/disable a service's rc.conf(5) variable and "delete" to remove the variable. When the "service_delete_empty" variable in rc.conf(5) is set to "YES" (default is "NO") an rc.conf.d file (in /etc/ or /usr/local/etc) is deleted if empty after modification using "service $foo delete". Submitted by: lme (modified) Reviewed by: 0mp (previous version), lme, bcr Relnotes: yes Sponsored by: Smule, Inc. Differential Revision: https://reviews.freebsd.org/D17113
Notes
Notes: svn path=/head/; revision=339971
Diffstat (limited to 'libexec/rc/rc.subr')
-rw-r--r--libexec/rc/rc.subr32
1 files changed, 29 insertions, 3 deletions
diff --git a/libexec/rc/rc.subr b/libexec/rc/rc.subr
index 56eccdb15b0d..072eda2cebf6 100644
--- a/libexec/rc/rc.subr
+++ b/libexec/rc/rc.subr
@@ -922,7 +922,7 @@ run_rc_command()
eval _override_command=\$${name}_program
command=${_override_command:-$command}
- _keywords="start stop restart rcvar enabled describe extracommands $extra_commands"
+ _keywords="start stop restart rcvar enable disable delete enabled describe extracommands $extra_commands"
rc_pid=
_pidcmd=
_procname=${procname:-${command}}
@@ -977,12 +977,13 @@ run_rc_command()
if [ "$_elem" != "$rc_arg" ]; then
continue
fi
- # if ${rcvar} is set, $1 is not "rcvar" and not "describe"
- # and ${rc_pid} is not set, then run
+ # if ${rcvar} is set, $1 is not "rcvar", "describe",
+ # "enable" or "delete", and ${rc_pid} is not set, run:
# checkyesno ${rcvar}
# and return if that failed
#
if [ -n "${rcvar}" -a "$rc_arg" != "rcvar" -a "$rc_arg" != "stop" \
+ -a "$rc_arg" != "delete" -a "$rc_arg" != "enable" \
-a "$rc_arg" != "describe" ] ||
[ -n "${rcvar}" -a "$rc_arg" = "stop" -a -z "${rc_pid}" ]; then
if ! checkyesno ${rcvar}; then
@@ -1030,6 +1031,31 @@ run_rc_command()
echo "$extra_commands"
;;
+ enable)
+ _out=$(/usr/sbin/sysrc -vs "$name" "$rcvar=YES") &&
+ echo "$name enabled in ${_out%%:*}"
+ ;;
+
+ disable)
+ _out=$(/usr/sbin/sysrc -vs "$name" "$rcvar=NO") &&
+ echo "$name disabled in ${_out%%:*}"
+ ;;
+
+ delete)
+ _files=
+ for _file in $(sysrc -lEs "$name"); do
+ _out=$(sysrc -Fif $_file "$rcvar") && _files="$_files $_file"
+ done
+ /usr/sbin/sysrc -x "$rcvar" && echo "$rcvar deleted in ${_files# }"
+ # delete file in rc.conf.d if desired and empty.
+ checkyesno service_delete_empty || _files=
+ for _file in $_files; do
+ [ "$_file" = "${_file#*/rc.conf.d/}" ] && continue
+ [ $(/usr/bin/stat -f%z $_file) -gt 0 ] && continue
+ /bin/rm "$_file" && echo "Empty file $_file removed"
+ done
+ ;;
+
status)
_run_rc_precmd || return 1
if [ -n "$rc_pid" ]; then