fix(archroot): pass along the real command and argv by the caller

Before modularizing the repo layout, we used m4_include to assemble
together sources into a single file. Now, we properly use a library
layout without assembling multiple files, which means we cannot anymore
rely on BASH_SOURCE inside the library file. Hence, pass along the
actual command and argv from the check_root caller.

Fixes: src: modularize repo layout into a library

Signed-off-by: Morten Linderud <foxboron@archlinux.org>
Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
This commit is contained in:
Levente Polyak 2023-05-20 00:20:41 +02:00
parent 4d3ab0b489
commit 41d4624879
No known key found for this signature in database
GPG Key ID: FC1B547C8D8172C8
6 changed files with 8 additions and 7 deletions

View File

@ -46,7 +46,7 @@ done
shift $((OPTIND - 1))
(( $# < 1 )) && die 'You must specify a directory.'
check_root
check_root "" "${BASH_SOURCE[0]}" "$@"
working_dir=$(readlink -f "$1")
shift 1

View File

@ -74,7 +74,7 @@ while getopts 'hcr:' arg; do
esac
done
check_root SOURCE_DATE_EPOCH,SRCDEST,SRCPKGDEST,PKGDEST,LOGDEST,MAKEFLAGS,PACKAGER,GNUPGHOME
check_root SOURCE_DATE_EPOCH,SRCDEST,SRCPKGDEST,PKGDEST,LOGDEST,MAKEFLAGS,PACKAGER,GNUPGHOME "${BASH_SOURCE[0]}" "$@"
# Pass all arguments after -- right to makepkg
makechrootpkg_args+=("${@:$OPTIND}")

View File

@ -9,13 +9,14 @@ CHROOT_VERSION='v4'
##
# usage : check_root $keepenv
##
orig_argv=("${BASH_SOURCE[0]}" "$@")
check_root() {
local keepenv=$1
shift
local orig_argv=("$@")
(( EUID == 0 )) && return
if type -P sudo >/dev/null; then
exec sudo --preserve-env=$keepenv -- "${orig_argv[@]}"
exec sudo --preserve-env="${keepenv}" -- "${orig_argv[@]}"
else
exec su root -c "$(printf ' %q' "${orig_argv[@]}")"
fi

View File

@ -301,7 +301,7 @@ done
[[ -n $makepkg_user && -z $(id -u "$makepkg_user") ]] && die 'Invalid makepkg user.'
makepkg_user=${makepkg_user:-${SUDO_USER:-$USER}}
check_root SOURCE_DATE_EPOCH,BUILDTOOL,BUILDTOOLVER,GNUPGHOME,SRCDEST,SRCPKGDEST,PKGDEST,LOGDEST,MAKEFLAGS,PACKAGER
check_root SOURCE_DATE_EPOCH,BUILDTOOL,BUILDTOOLVER,GNUPGHOME,SRCDEST,SRCPKGDEST,PKGDEST,LOGDEST,MAKEFLAGS,PACKAGER "${BASH_SOURCE[0]}" "$@"
# Canonicalize chrootdir, getting rid of trailing /
chrootdir=$(readlink -e "$passeddir")

View File

@ -137,7 +137,7 @@ while getopts 'dM:c:l:h' arg; do
done
shift $((OPTIND - 1))
check_root
check_root "" "${BASH_SOURCE[0]}" "$@"
[[ -f PKGBUILD ]] || { error "No PKGBUILD in current directory."; exit 1; }

View File

@ -52,7 +52,7 @@ shift $((OPTIND - 1))
(( $# < 2 )) && die 'You must specify a directory and one or more packages.'
check_root
check_root "" "${BASH_SOURCE[0]}" "$@"
working_dir="$(readlink -f "$1")"
shift 1