_ _
| |_ ___| |_ _
| | . | | | |
|_|_|___|_|_ |
|___|
git mirror - github.com/owenewans/holy - branch master
file tests/bootstrap-doas.sh
#!/bin/sh
set -eu
test "$#" -eq 2 || exit 2
if test "${HOLY_DOAS_CHECK_NAMESPACE:-}" != 1; then
test "$(id -u)" != 0 || exit 6
export HOLY_DOAS_CHECK_NAMESPACE=1
exec unshare --map-root-user -- sh "$0" "$@"
fi
test "$(id -u)" = 0 || exit 6
bin=$(realpath "$1")
package=$(realpath "$2")
tmp=$(mktemp -d)
trap 'rm -rf "$tmp"' EXIT HUP INT TERM
root="$tmp/root"
mkdir -p "$root/usr/bin" "$root/usr/share/man/man1" \
"$root/usr/share/man/man5" "$root/usr/share/licenses/doas"
"$bin" verify "local:$package" > "$tmp/verify"
"$bin" db init --root "$root" > "$tmp/out"
"$bin" cache stage "local:$package" --root "$root" > "$tmp/out"
digest=$(sha256sum "$package")
digest=${digest%% *}
set -- "$digest"
if "$bin" info "local:$package" | grep -qx 'arch x86' && test "$(uname -m)" = x86_64; then
set -- "$@" --accept-arch "$digest"
fi
if "$bin" db plan-set "$@" --root "$root" > "$tmp/out" 2> "$tmp/error"; then
printf 'unapproved setuid package was accepted\n' >&2
exit 1
else
test "$?" -eq 3
fi
grep -q 'decision-required privileged' "$tmp/error"
"$bin" db plan-set "$@" --accept-privileged "$digest" --root "$root" > "$tmp/out"
plan=$(sed -n 's/.* sha256 \([0-9a-f]*\) read-only$/\1/p' "$tmp/out")
test "${#plan}" -eq 64
if "$bin" db apply-set "$plan" "$@" --root "$root" > "$tmp/out" 2> "$tmp/error"; then
printf 'unapproved setuid plan was applied\n' >&2
exit 1
else
test "$?" -eq 3
fi
test ! -e "$root/usr/bin/doas"
"$bin" db apply-set "$plan" "$@" --accept-privileged "$digest" --root "$root" > "$tmp/out"
test "$(stat -c '%a %u:%g' "$root/usr/bin/doas")" = '4755 0:0'
grep -qx "privileged $digest" "$root/var/lib/holypkg/installed/$digest/state"
"$bin" elf "$root/usr/bin/doas" > "$tmp/elf"
grep -qx 'runtime nolibc' "$tmp/elf"
"$bin" db check "$digest" --root "$root" > "$tmp/out"
"$bin" db rm "$digest" --root "$root" > "$tmp/out"
test ! -e "$root/usr/bin/doas"
printf 'doas static setuid package fixture passed artifact=%s\n' "$digest"