summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSébastien Luttringer <seblu@seblu.net>2014-01-08 01:15:37 +0100
committerPierre Schmitz <pierre@archlinux.de>2014-05-10 08:05:08 +0200
commit03611dc63e3e44d0504f0d05c3129fbc0b2d1510 (patch)
tree770ca5cea407be8a4c9ad0cd9ec8b5de30e429f4
parent7aac293d76e4bdf6ceee1cfe5d888060c24f1822 (diff)
downloaddevtools-03611dc63e3e44d0504f0d05c3129fbc0b2d1510.tar.gz
devtools-03611dc63e3e44d0504f0d05c3129fbc0b2d1510.tar.xz
Switch to root when started as regular user
In collaborative builder machine, these scripts are often allowed to become root via sudo. This patch avoid to prefix them by sudo each time or call su. Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
-rw-r--r--arch-nspawn.in2
-rw-r--r--archbuild.in4
-rw-r--r--lib/common.sh13
-rw-r--r--makechrootpkg.in2
-rw-r--r--mkarchroot.in3
5 files changed, 18 insertions, 6 deletions
diff --git a/arch-nspawn.in b/arch-nspawn.in
index 6900382..4436a0e 100644
--- a/arch-nspawn.in
+++ b/arch-nspawn.in
@@ -37,8 +37,8 @@ while getopts 'hC:M:c:' arg; do
done
shift $(($OPTIND - 1))
-(( $EUID != 0 )) && die 'This script must be run as root.'
(( $# < 1 )) && die 'You must specify a directory.'
+check_root "$0" "$@"
working_dir=$(readlink -f "$1")
shift 1
diff --git a/archbuild.in b/archbuild.in
index b1c96f9..ae2f511 100644
--- a/archbuild.in
+++ b/archbuild.in
@@ -40,9 +40,7 @@ done
# Pass all arguments after -- right to makepkg
makechrootpkg_args+=("${@:$OPTIND}")
-if (( EUID )); then
- die 'This script must be run as root.'
-fi
+check_root "$0" "$@"
if ${clean_first} || [[ ! -d "${chroots}/${repo}-${arch}" ]]; then
msg "Creating chroot for [${repo}] (${arch})..."
diff --git a/lib/common.sh b/lib/common.sh
index c9ff1b8..b885080 100644
--- a/lib/common.sh
+++ b/lib/common.sh
@@ -228,3 +228,16 @@ find_cached_package() {
return 1
esac
}
+
+##
+# usage : check_root ("$0" "$@")
+##
+check_root() {
+ (( EUID == 0 )) && return
+ if type -P sudo >/dev/null; then
+ exec sudo -- "$@"
+ else
+ exec su root -c "$(printf '%q' "$@")"
+ fi
+ die 'This script must be run as root.'
+}
diff --git a/makechrootpkg.in b/makechrootpkg.in
index 47c6ac9..97c7780 100644
--- a/makechrootpkg.in
+++ b/makechrootpkg.in
@@ -81,7 +81,7 @@ while getopts 'hcur:I:l:nTD:d:' arg; do
esac
done
-(( EUID != 0 )) && die 'This script must be run as root.'
+check_root "$0" "$@"
[[ ! -f PKGBUILD && -z "${install_pkgs[*]}" ]] && die 'This must be run in a directory containing a PKGBUILD.'
diff --git a/mkarchroot.in b/mkarchroot.in
index 7cdb274..fb472bc 100644
--- a/mkarchroot.in
+++ b/mkarchroot.in
@@ -35,9 +35,10 @@ while getopts 'hC:M:c:' arg; do
done
shift $(($OPTIND - 1))
-(( $EUID != 0 )) && die 'This script must be run as root.'
(( $# < 2 )) && die 'You must specify a directory and one or more packages.'
+check_root "$0" "$@"
+
working_dir="$(readlink -f $1)"
shift 1