On Wednesday 03 May 2006 11:57, Roy Marples wrote:
> Attached is a patch to pre19-r1 that does this.

Of course, everyone spotted the obvious mistake where RC_HOTPLUG="no" didn't 
work with that patch. This should - heh.


-- 
Roy Marples <[EMAIL PROTECTED]>
Gentoo/Linux Developer (baselayout, networking)
Index: etc/conf.d/rc
===================================================================
--- etc/conf.d/rc	(revision 2022)
+++ etc/conf.d/rc	(working copy)
@@ -16,16 +16,26 @@
 
 RC_INTERACTIVE="yes"
 
+# Do we allow hotplugging? If not, set to RC_HOTPLUG="no"
+
+RC_HOTPLUG="yes"
+
 # Dynamic /dev managers can trigger coldplug events which cause services to
 # start before we are ready for them. If this happens, we can defer these
-# services to start in the boot runlevel. RC_COLDPLUG is a list of services we
-# allow to be coldplugged in this way. Globbing is allowed as is prefixing
-# with ! which means don't coldplug.
-# Example - RC_COLDPLUG="net.wlan !net.* *"
-# This allows net.wlan and any service not matching net.* to coldplug.
+# services to start in the boot runlevel. Set RC_COLDPLUG="no" if you don't
+# want this.
 
-RC_COLDPLUG="*"
+RC_COLDPLUG="yes"
 
+# Some people want a finer grain over hotplug/coldplug. RC_PLUG_SERVICES is a
+# list of services that are matched in order, either allowing or not. By
+# default we allow services through as RC_COLDPLUG/RC_HOTPLUG has to be yes
+# anyway.
+# Example - RC_PLUG_SERVICES="net.wlan !net.*"
+# This allows net.wlan and any service not matching net.* to be plugged.
+
+RC_PLUG_SERVICES=""
+
 # RC_NET_STRICT_CHECKING allows some flexibility with the 'net' service.
 # The following values are allowed:
 #  none  - The 'net' service is always considered up.
Index: sbin/runscript.sh
===================================================================
--- sbin/runscript.sh	(revision 2023)
+++ sbin/runscript.sh	(working copy)
@@ -27,16 +27,12 @@
 # until after rc sysinit has completed so we punt them to the boot runlevel
 if [[ -e /dev/.rcsysinit ]] ; then
 	eerror "ERROR:  cannot run ${SVCNAME} until sysinit completes"
-	[[ "${RC_COLDPLUG}  " == "!* "* ]] && exit 1
-	if [[ "${RC_COLDPLUG}  " != "* "* ]] ; then
-		cd /etc/init.d
-		shopt -s nullglob extglob
-		for x in ${RC_COLDPLUG} ; do
-			[[ ${SVCNAME} == "${x}" ]] && break
-			[[ "!${SVCNAME}" == "${x}" ]] && exit 1
-		done
-		[[ ${SVCNAME} == "${x}" ]] || exit 1
-	fi
+	[[ ${RC_COLDPLUG:-yes} != "yes" ]] && exit 1
+	set -f
+	for x in ${RC_PLUG_SERVICES} ; do
+		[[ ${SVCNAME} == ${x} ]] && break
+		[[ "!${SVCNAME}" == ${x} ]] && exit 1
+	done
 	eerror "${SVCNAME} will be started in the ${BOOTLEVEL} runlevel"
 	if [[ ! -L /dev/.rcboot/"${SVCNAME}" ]] ; then
 		[[ ! -d /dev/.rcboot ]] && mkdir /dev/.rcboot
@@ -45,6 +41,24 @@
 	exit 1
 fi
 
+# Only hotplug if we're allowed to
+if [[ ${IN_HOTPLUG} == "1" ]] ; then
+	if [[ ${RC_HOTPLUG:-yes} != "yes" ]] ; then
+		eerror "${SVCNAME} is not allowed to be hotplugged"
+		exit 1
+	fi
+	
+	set -f
+	for x in ${RC_PLUG_SERVICES} ; do
+		[[ ${SVCNAME} == ${x} ]] && break
+		if [[ "!${SVCNAME}" == ${x} ]] ; then
+			eerror "${SVCNAME} is not allowed to be hotplugged"
+			exit 1
+		fi
+	done
+	set +f
+fi
+
 svc_trap() {
 	trap 'eerror "ERROR:  ${SVCNAME} caught an interrupt"; exit 1' \
 		INT QUIT TSTP

Reply via email to