Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 11 Nov 2018 06:05:29 +0000 (UTC)
From:      Devin Teske <dteske@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org
Subject:   svn commit: r340348 - in stable/12: libexec/rc share/man/man5 share/man/man8
Message-ID:  <201811110605.wAB65Tjp052983@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dteske
Date: Sun Nov 11 06:05:28 2018
New Revision: 340348
URL: https://svnweb.freebsd.org/changeset/base/340348

Log:
  MFC r339971: 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
  Approved by:	re (rgrimes)
  Relnotes:	yes
  Sponsored by:	Smule, Inc.
  Differential Revision:	https://reviews.freebsd.org/D17113

Modified:
  stable/12/libexec/rc/rc.conf
  stable/12/libexec/rc/rc.subr
  stable/12/share/man/man5/rc.conf.5
  stable/12/share/man/man8/rc.8
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/libexec/rc/rc.conf
==============================================================================
--- stable/12/libexec/rc/rc.conf	Sun Nov 11 01:46:48 2018	(r340347)
+++ stable/12/libexec/rc/rc.conf	Sun Nov 11 06:05:28 2018	(r340348)
@@ -617,6 +617,7 @@ savecore_enable="YES"	# Extract core from dump devices
 savecore_flags="-m 10"	# Used if dumpdev is enabled above, and present.
 			# By default, only the 10 most recent kernel dumps
 			# are saved.
+service_delete_empty="NO" # Have 'service delete' remove empty rc.conf.d files.
 crashinfo_enable="YES"	# Automatically generate crash dump summary.
 crashinfo_program="/usr/sbin/crashinfo"	# Script to generate crash dump summary.
 quota_enable="NO"	# turn on quotas on startup (or NO).

Modified: stable/12/libexec/rc/rc.subr
==============================================================================
--- stable/12/libexec/rc/rc.subr	Sun Nov 11 01:46:48 2018	(r340347)
+++ stable/12/libexec/rc/rc.subr	Sun Nov 11 06:05:28 2018	(r340348)
@@ -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
@@ -1028,6 +1029,31 @@ run_rc_command()
 	
 		extracommands)
 			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)

Modified: stable/12/share/man/man5/rc.conf.5
==============================================================================
--- stable/12/share/man/man5/rc.conf.5	Sun Nov 11 01:46:48 2018	(r340347)
+++ stable/12/share/man/man5/rc.conf.5	Sun Nov 11 06:05:28 2018	(r340348)
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd August 22, 2018
+.Dd October 24, 2018
 .Dt RC.CONF 5
 .Os
 .Sh NAME
@@ -4511,6 +4511,14 @@ at boot time.
 The directory where the files exported by USB LUN are located.
 The default directory is
 .Pa /var/cfumass .
+.It Va service_delete_empty
+.Pq Vt bool
+If set to
+.Dq Li YES ,
+.Ql Li service delete
+removes empty
+.Dq Li rc.conf.d
+files.
 .El
 .Sh FILES
 .Bl -tag -width ".Pa /etc/defaults/rc.conf" -compact
@@ -4599,6 +4607,7 @@ The default directory is
 .Xr rwhod 8 ,
 .Xr savecore 8 ,
 .Xr sdpd 8 ,
+.Xr service 8 ,
 .Xr sshd 8 ,
 .Xr swapon 8 ,
 .Xr sysctl 8 ,

Modified: stable/12/share/man/man8/rc.8
==============================================================================
--- stable/12/share/man/man8/rc.8	Sun Nov 11 01:46:48 2018	(r340347)
+++ stable/12/share/man/man8/rc.8	Sun Nov 11 06:05:28 2018	(r340348)
@@ -31,7 +31,7 @@
 .\"     @(#)rc.8	8.2 (Berkeley) 12/11/93
 .\" $FreeBSD$
 .\"
-.Dd April 25, 2017
+.Dd September 18, 2018
 .Dt RC 8
 .Os
 .Sh NAME
@@ -326,6 +326,21 @@ If the script starts a process (rather than performing
 operation), show the status of the process.
 Otherwise it is not necessary to support this argument.
 Defaults to displaying the process ID of the program (if running).
+.It Cm enable
+Enable the service in
+.Xr rc.conf 5 .
+.It Cm disable
+Disable the service in
+.Xr rc.conf 5 .
+.It Cm delete
+Remove the service from
+.Xr rc.conf 5 .
+If
+.Ql Li service_delete_empty
+is set to
+.Dq Li YES ,
+.Pa /etc/rc.conf.d/$servicename
+will be deleted if empty after modification.
 .It Cm describe
 Print a short description of what the script does.
 .It Cm extracommands



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201811110605.wAB65Tjp052983>