[arch-projects] [DEVTOOLS][PATCH] 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. --- arch-nspawn.in | 2 +- archbuild.in | 4 +--- lib/common.sh | 13 +++++++++++++ makechrootpkg.in | 2 +- mkarchroot.in | 3 ++- 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 cb9db76..75cf2e0 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 d03b703..a9510f4 100644 --- a/makechrootpkg.in +++ b/makechrootpkg.in @@ -82,7 +82,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 -- Sébastien "Seblu" Luttringer
participants (1)
-
Sébastien Luttringer