[PATCH 3/3] checkupdates: Do not use sudo when run as root
Daniel M. Capella
polyzen at archlinux.org
Thu Sep 3 01:36:55 UTC 2020
runcmd() taken from paccache.
Fixes FS#64328
Signed-off-by: Daniel M. Capella <polyzen at archlinux.org>
---
src/checkupdates.sh.in | 26 +++++++++++++++++++++-----
1 file changed, 21 insertions(+), 5 deletions(-)
diff --git a/src/checkupdates.sh.in b/src/checkupdates.sh.in
index ba9b960..67ff144 100644
--- a/src/checkupdates.sh.in
+++ b/src/checkupdates.sh.in
@@ -30,6 +30,24 @@ USE_COLOR=0
source "$LIBRARY"/util/message.sh
source "$LIBRARY"/util/parseopts.sh
+die() {
+ error "$@"
+ exit 1
+}
+
+runcmd() {
+ if (( EUID != 0 )); then
+ msg 'Escalating privileges using sudo'
+ if sudo -v &>/dev/null && sudo -l &>/dev/null; then
+ sudo "$@"
+ else
+ die 'Failed to escalate'
+ fi
+ else
+ "$@"
+ fi
+}
+
usage() {
cat << __EOF__
${myname} v${myver}
@@ -80,8 +98,7 @@ else
fi
if ! type -P fakeroot >/dev/null; then
- error 'Cannot find the fakeroot binary.'
- exit 1
+ die 'Cannot find the fakeroot binary'
fi
if [[ -z $CHECKUPDATES_DB ]]; then
@@ -98,15 +115,14 @@ fi
mkdir -p "$CHECKUPDATES_DB"
ln -s "${DBPath}/local" "$CHECKUPDATES_DB" &> /dev/null
if ! fakeroot -- pacman -Sy --dbpath "$CHECKUPDATES_DB" --logfile /dev/null &> /dev/null; then
- error 'Cannot fetch updates'
- exit 1
+ die 'Cannot fetch updates'
fi
mapfile -t updates < <(pacman -Qu --dbpath "$CHECKUPDATES_DB" 2> /dev/null | grep -v '\[.*\]')
if (( ${#updates[@]} )); then
printf '%s\n' "${updates[@]}"
if (( DOWNLOAD_CACHE )); then
- sudo pacman -Sw --noconfirm "${updates[@]%% *}" --dbpath "$CHECKUPDATES_DB" --logfile /dev/null
+ runcmd pacman -Sw --noconfirm "${updates[@]%% *}" --dbpath "$CHECKUPDATES_DB" --logfile /dev/null
fi
else
exit 2
--
2.28.0
More information about the pacman-contrib
mailing list