[arch-projects] [INITSCRIPTS][PATCH 3/3] Ensure rc.d scripts are run as root

Sebastien Luttringer seblu at seblu.net
Fri Jun 17 21:31:07 EDT 2011


By default all script should be run as root.
If NEED_ROOT=0 is set before loading /etc/rc.d/functions in a rc.d scripts, this will not apply.
This allow script with only some part which require root level to call need_root() function
at beginning of those parts.

Close FS#24095

Signed-off-by: Sebastien Luttringer <seblu at seblu.net>
---
 functions |   10 ++++++++++
 rc.d      |    1 +
 2 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/functions b/functions
index adf4ea9..2ee56b4 100644
--- a/functions
+++ b/functions
@@ -394,5 +394,15 @@ for f in /etc/rc.d/functions.d/*; do
 	[[ -e $f ]] && . "$f"
 done
 
+# Exit current shell if user is not root
+need_root() {
+	(( $EUID != 0 )) && printf 'You need to be root.\n' && exit 1
+}
+
+# Quit script if it's not running by root
+# This can be disabled in scripts sourcing functions by setting NEED_ROOT=0
+# A local call to need_root can be done to ensure part of script need root privilege
+(( ${NEED_ROOT:-1} == 1 )) && need_root
+
 # End of file
 # vim: set ts=2 sw=2 noet:
diff --git a/rc.d b/rc.d
index f5dd652..6d9a9f7 100755
--- a/rc.d
+++ b/rc.d
@@ -1,5 +1,6 @@
 #!/bin/bash
 
+NEED_ROOT=0 # this script can be run without be root
 . /etc/rc.conf
 . /etc/rc.d/functions
 
-- 
Sebastien "Seblu" Luttringer



More information about the arch-projects mailing list