void-packages/common/hooks/post-install/11-pkglint-elf-in-usrshare.sh
Piotr Wójcik dcdbcbf30a 11-pkglint-elf-in-usrshare: disallow x-executable
Can be allowed per-package now
2020-08-25 21:18:59 +02:00

53 lines
1.5 KiB
Bash

# vim: set ts=4 sw=4 et:
#
# This hook executes the following tasks:
# - Looks on all packages for binary files being installed to /usr/share
# - Allows exceptions listed in $ignore_elf_files and $ignore_elf_dirs
hook() {
local matches mime file f prune_expr dir
if [ ! -d ${PKGDESTDIR}/usr/share ]; then
return 0
fi
if [ "${ignore_elf_dirs}" ]; then
for dir in ${ignore_elf_dirs}; do
if ! [ "${prune_expr}" ]; then
prune_expr="( -path ${PKGDESTDIR}${dir}"
else
prune_expr+=" -o -path ${PKGDESTDIR}${dir}"
fi
done
prune_expr+=" ) -prune -o "
fi
# Find all binaries in /usr/share and add them to the pool
while read -r f; do
mime="${f##*:}"
mime="${mime// /}"
file="${f%:*}"
file="${file#${PKGDESTDIR}}"
case "${mime}" in
application/x-sharedlib*|\
application/x-pie-executable*|\
application/x-executable*)
if [[ ${ignore_elf_files} != *"${file}"* ]]; then
matches+=" ${file}"
fi
;;
esac
done < <(find $PKGDESTDIR/usr/share $prune_expr -type f | file --mime-type --files-from -)
# Check passed if no packages in pool
if [ -z "$matches" ]; then
return 0
fi
msg_red "${pkgver}: ELF files found in /usr/share:\n"
for f in $matches; do
msg_red " ${f}\n"
done
msg_error "${pkgver}: cannot continue with installation!\n"
}