summaryrefslogtreecommitdiff
path: root/system/paxmark/paxmark
diff options
context:
space:
mode:
Diffstat (limited to 'system/paxmark/paxmark')
-rw-r--r--system/paxmark/paxmark33
1 files changed, 33 insertions, 0 deletions
diff --git a/system/paxmark/paxmark b/system/paxmark/paxmark
new file mode 100644
index 000000000..f80eb69ff
--- /dev/null
+++ b/system/paxmark/paxmark
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+ret=0
+flags="${1//[!zPpEeMmRrSs]}"
+[ -n "${flags}" ] || exit 0
+shift
+
+# Create XATTR_PAX marking using attr
+xval=""
+[ "${flags//[!P]}" ] && xval="${xval}P"
+[ "${flags//[!p]}" -a -z "${flags//[!P]}" ] && xval="${xval}p"
+[ "${flags//[!E]}" ] && xval="${xval}E"
+[ "${flags//[!e]}" -a -z "${flags//[!E]}" ] && xval="${xval}e"
+[ -z "${flags//[!zEe]}" ] && xval="${xval}e"
+[ "${flags//[!M]}" ] && xval="${xval}M"
+[ "${flags//[!m]}" -a -z "${flags//[!M]}" ] && xval="${xval}m"
+[ "${flags//[!R]}" ] && xval="${xval}R"
+[ "${flags//[!r]}" -a -z "${flags//[!R]}" ] && xval="${xval}r"
+[ "${flags//[!S]}" ] && xval="${xval}S"
+[ "${flags//[!s]}" -a -z "${flags//[!S]}" ] && xval="${xval}s"
+
+for f in "$@"; do
+ if [ -n "FAKEROOTKEY" ]; then
+ # fakeroot does not set xattr's on disk.
+ # explicitly do that, because the marked binary might
+ # be executed next during install.
+ LD_PRELOAD="" FAKEROOTKEY="" attr -q -s pax.flags -V "${xval}" "${f}" >/dev/null || ret=1
+ fi
+ attr -q -s pax.flags -V "${xval}" "${f}" >/dev/null || ret=1
+done
+
+exit $ret
+