mirror of
https://codeberg.org/kiss-community/kiss
synced 2024-09-28 12:22:39 -06:00
kiss: Simpler elevation method
This commit is contained in:
parent
22b4af9342
commit
7eb80497f6
60
kiss
60
kiss
@ -45,6 +45,33 @@ prompt() {
|
|||||||
read -r _
|
read -r _
|
||||||
}
|
}
|
||||||
|
|
||||||
|
root_cache() {
|
||||||
|
# This function simply mimics a 'su' prompt to then store
|
||||||
|
# the user's root password for the lifetime of the package
|
||||||
|
# manager.
|
||||||
|
#
|
||||||
|
# Think of this as the simplest method of "elevating"
|
||||||
|
# permissions where needed without the endless stream of
|
||||||
|
# password prompts.
|
||||||
|
printf 'Password: '
|
||||||
|
stty -echo
|
||||||
|
read -r pass || read -r pass ||:
|
||||||
|
stty echo
|
||||||
|
printf '\n'
|
||||||
|
|
||||||
|
# Validate the password now with a simple 'true' command
|
||||||
|
# as we don't yet need to elevate permissions.
|
||||||
|
root_run true
|
||||||
|
}
|
||||||
|
|
||||||
|
root_run() {
|
||||||
|
# Run a command as root using the cached password. The 'su'
|
||||||
|
# command allows you to input a password via stdin. To hide
|
||||||
|
# the prompt, the command's output is sent to '/dev/tty'
|
||||||
|
# and the output of 'su' is sent to '/dev/null'.
|
||||||
|
echo "$pass" | su -c "$* >/dev/tty" >/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
pkg_lint() {
|
pkg_lint() {
|
||||||
# Check that each mandatory file in the package entry exists.
|
# Check that each mandatory file in the package entry exists.
|
||||||
log "$1" "Checking repository files"
|
log "$1" "Checking repository files"
|
||||||
@ -880,17 +907,8 @@ pkg_updates() {
|
|||||||
git fetch
|
git fetch
|
||||||
git merge
|
git merge
|
||||||
else
|
else
|
||||||
log "$PWD" "Need root to update"
|
root_run git fetch
|
||||||
|
root_run git merge
|
||||||
if command -v sudo >/dev/null; then
|
|
||||||
sudo git fetch
|
|
||||||
sudo git merge
|
|
||||||
elif command -v doas >/dev/null; then
|
|
||||||
doas git fetch
|
|
||||||
doas git merge
|
|
||||||
else
|
|
||||||
su -c 'git fetch && git merge'
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
done
|
done
|
||||||
@ -995,22 +1013,12 @@ args() {
|
|||||||
[ "$1" ] || die "'kiss $action' requires an argument"
|
[ "$1" ] || die "'kiss $action' requires an argument"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
i|install|r|remove)
|
i|install|r|remove|u|update)
|
||||||
[ "$1" ] || die "'kiss $action' requires an argument"
|
[ "$1" ] || [ -z "${action##u*}" ] ||
|
||||||
|
die "'kiss $action' requires an argument"
|
||||||
|
|
||||||
# Rerun the script with 'su' if the user isn't root.
|
# Cache the root password for use where needed.
|
||||||
# Cheeky but 'su' can't be used on shell functions themselves.
|
[ "$(id -u)" = 0 ] || root_cache
|
||||||
[ "$(id -u)" = 0 ] || {
|
|
||||||
if command -v sudo >/dev/null; then
|
|
||||||
sudo -E KISS_FORCE="$KISS_FORCE" kiss "$action" "$@"
|
|
||||||
elif command -v doas >/dev/null; then
|
|
||||||
KISS_FORCE="$KISS_FORCE" doas kiss "$action" "$@"
|
|
||||||
else
|
|
||||||
su -pc "KISS_FORCE=$KISS_FORCE kiss $action $*"
|
|
||||||
fi
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user