makepkg: add PACMAN_AUTH configurable setting for sudo elevation

If specified, this will be used no matter what. If not, then we check if
sudo exists and use that, or else fall back on su.

Implements FS#32621

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
Eli Schwartz 2021-04-05 17:26:07 -04:00 committed by Allan McRae
parent d6f8659443
commit 2535611d6c
4 changed files with 26 additions and 4 deletions

View file

@ -278,6 +278,14 @@ Options
`.tar.lzo`, `.tar.lrz`, `.tar.lz4`, `.tar.lz` and `.tar.Z`, or
simply `.tar` to disable compression entirely.
**PACMAN_AUTH=()**::
Specify a command prefix for running pacman as root. If unset, makepkg will
check for the presence of sudo(8) and su(1) in turn, and try the first one
it finds.
+
If present, `%c` will be replaced with the shell-quoted form of the command
to run. Otherwise, the command to run is appended to the auth command.
See Also

View file

@ -147,3 +147,10 @@ COMPRESSLZ=(lzip -c -f)
#
PKGEXT='@PKGEXT@'
SRCEXT='@SRCEXT@'
#########################################################################
# OTHER
#########################################################################
#
#-- Command used to run pacman as root, instead of trying sudo and su
PACMAN_AUTH=()

View file

@ -29,7 +29,7 @@ executable_functions+=('executable_sudo')
executable_sudo() {
if (( DEP_BIN || RMDEPS || INSTALL )); then
if ! type -p sudo >/dev/null; then
if (( ${#PACMAN_AUTH[@]} == 0 )) && ! type -p sudo >/dev/null; then
warning "$(gettext "Cannot find the %s binary. Will use %s to acquire root privileges.")" "sudo" "su"
fi
fi

View file

@ -225,15 +225,22 @@ missing_source_file() {
}
run_pacman() {
local cmd
local cmd cmdescape
if [[ $1 = -@(T|Q)*([[:alpha:]]) ]]; then
cmd=("$PACMAN_PATH" "$@")
else
cmd=("$PACMAN_PATH" "${PACMAN_OPTS[@]}" "$@")
if type -p sudo >/dev/null; then
cmdescape="$(printf '%q ' "${cmd[@]}")"
if (( ${#PACMAN_AUTH[@]} )); then
if in_array '%c' "${PACMAN_AUTH[@]}"; then
cmd=("${PACMAN_AUTH[@]/\%c/$cmdescape}")
else
cmd=("${PACMAN_AUTH[@]}" "${cmd[@]}")
fi
elif type -p sudo >/dev/null; then
cmd=(sudo "${cmd[@]}")
else
cmd=(su root -c "$(printf '%q ' "${cmd[@]}")")
cmd=(su root -c "$cmdescape")
fi
local lockfile="$(pacman-conf DBPath)/db.lck"
while [[ -f $lockfile ]]; do