Rearrange AppArmor policy precompilation to handle a click package being in multiple locations.

This commit is contained in:
Colin Watson 2014-10-13 16:51:48 +01:00
parent 95c970f52f
commit 448c8f9fc0

View File

@ -18,11 +18,29 @@ mkdir -p /custom/lib/apparmor/clicks
mkdir -p /custom/lib/apparmor/profiles mkdir -p /custom/lib/apparmor/profiles
for manifest in /var/lib/apparmor/clicks/*; do for manifest in /var/lib/apparmor/clicks/*; do
case $(readlink -f $manifest) in # FIXME: if this code survives for very long, it should probably be
/custom/*) # rewritten using click's Python bindings
mv $manifest /custom/lib/apparmor/clicks/$(basename $manifest) pkgdir="$(click pkgdir "$manifest")"
profile=$(basename $manifest .json) manifest_tail="${manifest#$pkgdir}"
mv /var/lib/apparmor/profiles/click_$profile /custom/lib/apparmor/profiles # Does this package exist in the custom tarball? If so, move its
;; # profiles there (if it only exists in custom) or copy them (if it
esac # also exists in core).
version="${pkgdir##*/}"
pkgdir_noversion="${pkgdir%/*}"
name="${pkgdir_noversion##*/}"
if [ -d "/custom/click/$name/$version" ]; then
# Clone into custom.
ln -nsf "/custom/click/$name/$version$manifest_tail" "/custom/lib/apparmor/clicks$manifest_tail"
profile="$(basename "$manifest" .json)"
cp -a "/var/lib/apparmor/profiles/click_$profile" /custom/lib/apparmor/profiles/
if [ -d "/usr/share/click/preinstalled/$name/$version" ]; then
# Ensure that the version in the rootfs points to
# the core database.
ln -nsf "/usr/share/click/preinstalled/$name/$version$manifest_tail" "$manifest"
else
# Remove from the rootfs.
rm -f "$manifest"
rm -f "/var/lib/apparmor/profiles/click_$profile"
fi
fi
done done