aboutsummaryrefslogtreecommitdiffstats
path: root/main/paxmark/paxmark
blob: 2a933246e70c2dfcdf491762a84b9171d9ad616d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/bin/sh

local ret=0
local flags="${1//[!zPpEeMmRrSs]}"
[ -n "${flags}" ] || return 0
shift

# Create PT_PAX marking (remove after migration)
for f in "$@"; do
	paxctl -q${flags} "${f}" >/dev/null 2>&1 && continue
	paxctl -qC${flags} "${f}" >/dev/null 2>&1 && continue
	paxctl -qc${flags} "${f}" >/dev/null 2>&1 && continue
	ret=1
done

# Create XATTR_PAX marking using attr
local 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"
[ "${flags//[!z]}" -a -z "${flags//[!Ee]}" ] && 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
	attr -q -s pax.flags -V "${xval}" "${f}" >/dev/null 2>&1 && continue
	ret=1
done

return $ret