kiss: Elevate permissions if needed during checksum generation.

This simply modifies as_root() to allow running commands as any
given user and generates checksums according to the owner of the
checksums file and the current user's write permissions.
This commit is contained in:
Dylan Araps 2020-04-18 09:35:38 +03:00
parent 766e5d7089
commit 1c059e8139
No known key found for this signature in database
GPG Key ID: 46D62DD9F1DE636E

20
kiss
View File

@ -53,12 +53,12 @@ prompt() {
as_root() {
# Simple function to run a command as root using either 'sudo',
# 'doas' or 'su'. Hurrah for choice.
[ "$uid" = 0 ] || log "Using '${su:-su}'"
[ "$uid" = 0 ] || log "Using '${su:-su}' (to become ${user:=root})"
case $su in
*sudo) sudo -E -- "$@" ;;
*doas) doas -- "$@" ;;
*) su -pc "$* <&3" 3<&0 </dev/tty ;;
*sudo) sudo -E -u "$user" -- "$@" ;;
*doas) doas -u "$user" -- "$@" ;;
*) su -pc "$* <&3" "$user" 3<&0 </dev/tty ;;
esac
}
@ -1236,7 +1236,17 @@ args() {
for pkg do pkg_lint "$pkg" c; done
for pkg do pkg_sources "$pkg" c; done
for pkg do
pkg_checksums "$pkg" > "$(pkg_find "$pkg")/checksums"
pkg_checksums "$pkg" | {
repo_dir=$(pkg_find "$pkg")/checksums
if [ -w "$repo_dir" ]; then
tee "$repo_dir"
else
log "$pkg" "Need permissions to generate checksums"
user=$(stat -c %U "$repo_dir") as_root tee "$repo_dir"
fi
}
log "$pkg" "Generated checksums"
done