mirror of
https://https.git.savannah.gnu.org/git/coreutils.git
synced 2026-01-26 15:29:07 +00:00
tests: support non-MLS enabled SELinux systems
When running "make check" on a Linux system running SELinux with a non-MLS policy, tests/mkdir/restorecon.sh test fails with: chcon: invalid context: root:object_r:tmp_t:s0: Invalid argument Indeed in such a configuration, contexts cannot have ":s0" suffix. * init.cfg (get_selinux_type): Refactor this function to here from various tests. Update to work with a non-MLS policy. (mls_enabled_): A new function to detect if MLS is enabled. (skip_if_mcstransd_is_running_): Update to not skip when MLS is not enabled. * tests/mkdir/restorecon.sh: Use a valid non-MLS context when needed. * tests/install/install-Z-selinux.sh: Likewise. * tests/cp/cp-a-selinux.sh: Likewise. * tests/misc/selinux.sh: Likewise. * tests/misc/chcon.sh: Skip if non-MLS as --range used throughout. Fixes http://bugs.gnu.org/22631
This commit is contained in:
parent
ca52f3bf3f
commit
be2f82f670
18
init.cfg
18
init.cfg
@ -128,6 +128,15 @@ require_selinux_()
|
||||
esac
|
||||
}
|
||||
|
||||
# Return the SELinux type component if available
|
||||
get_selinux_type() { ls -Zd "$1" | sed -n 's/.*:\(.*_t\)[: ].*/\1/p'; }
|
||||
|
||||
# Whether SELinux Multi Level Security is enabled
|
||||
mls_enabled_() {
|
||||
sestatus 2>&1 |
|
||||
grep 'Policy MLS status:.*enabled' > /dev/null
|
||||
}
|
||||
|
||||
# Skip this test if we're not in SELinux "enforcing" mode.
|
||||
require_selinux_enforcing_()
|
||||
{
|
||||
@ -637,10 +646,13 @@ skip_if_mcstransd_is_running_()
|
||||
# and if it's running, skip this test.
|
||||
__ctx=$(stat --printf='%C\n' .) || framework_failure_
|
||||
case $__ctx in
|
||||
*:*:*:*) ;; # four components is ok
|
||||
*) # anything else probably means mcstransd is running
|
||||
skip_ "unexpected context '$__ctx'; turn off mcstransd" ;;
|
||||
*:*:*:*) __ctx_ok=1 ;; # four components is ok
|
||||
*:*:*) # three components is ok too if there is no MLS
|
||||
mls_enabled_ && __ctk_ok=1 ;;
|
||||
esac
|
||||
|
||||
test "$__ctx_ok" ||
|
||||
skip_ "unexpected context '$__ctx'; turn off mcstransd"
|
||||
}
|
||||
|
||||
# Skip the current test if umask doesn't work as usual.
|
||||
|
||||
@ -28,7 +28,8 @@ cwd=$(pwd)
|
||||
cleanup_() { cd /; umount "$cwd/mnt"; }
|
||||
|
||||
# This context is special: it works even when mcstransd isn't running.
|
||||
ctx=root:object_r:tmp_t:s0
|
||||
ctx='root:object_r:tmp_t'
|
||||
mls_enabled_ && ctx="$ctx:s0"
|
||||
|
||||
# Check basic functionality - before check on fixed context mount
|
||||
touch c || framework_failure_
|
||||
@ -62,7 +63,6 @@ grep $ctx ed_ctx &&
|
||||
{ ls -lZd restore/existing_dir; fail=1; }
|
||||
|
||||
# Check restorecon (-Z) functionality for file and directory
|
||||
get_selinux_type() { ls -Zd "$1" | sed -n 's/.*:\(.*_t\):.*/\1/p'; }
|
||||
# Also make a dir with our known context
|
||||
mkdir c_d || framework_failure_
|
||||
chcon $ctx c_d || framework_failure_
|
||||
|
||||
@ -21,11 +21,10 @@
|
||||
print_ver_ ginstall
|
||||
require_selinux_
|
||||
|
||||
|
||||
get_selinux_type() { ls -Zd "$1" | sed -n 's/.*:\(.*_t\):.*/\1/p'; }
|
||||
|
||||
mkdir subdir || framework_failure_
|
||||
chcon 'root:object_r:tmp_t:s0' subdir || framework_failure_
|
||||
ctx='root:object_r:tmp_t'
|
||||
mls_enabled_ && ctx="$ctx:s0"
|
||||
chcon "$ctx" subdir || framework_failure_
|
||||
cd subdir
|
||||
|
||||
# Since in a tmp_t dir, dirs can be created as user_tmp_t ...
|
||||
|
||||
@ -21,6 +21,7 @@ print_ver_ chcon
|
||||
require_root_
|
||||
require_selinux_
|
||||
skip_if_mcstransd_is_running_
|
||||
mls_enabled_ || skip_ 'MLS is disabled'
|
||||
|
||||
mkdir -p d/sub/s2 || framework_failure_
|
||||
touch f g d/sub/1 d/sub/2 || framework_failure_
|
||||
|
||||
@ -30,7 +30,8 @@ mkfifo_or_skip_ p
|
||||
|
||||
|
||||
# special context that works both with and without mcstransd
|
||||
ctx=root:object_r:tmp_t:s0
|
||||
ctx='root:object_r:tmp_t'
|
||||
mls_enabled_ && ctx="$ctx:s0"
|
||||
|
||||
chcon $ctx f d p ||
|
||||
skip_ '"chcon '$ctx' ..." failed'
|
||||
|
||||
@ -20,11 +20,10 @@
|
||||
print_ver_ mkdir mknod mkfifo
|
||||
require_selinux_
|
||||
|
||||
|
||||
get_selinux_type() { ls -Zd "$1" | sed -n 's/.*:\(.*_t\):.*/\1/p'; }
|
||||
|
||||
mkdir subdir || framework_failure_
|
||||
chcon 'root:object_r:tmp_t:s0' subdir || framework_failure_
|
||||
ctx='root:object_r:tmp_t'
|
||||
mls_enabled_ && ctx="$ctx:s0"
|
||||
chcon "$ctx" subdir || framework_failure_
|
||||
cd subdir
|
||||
|
||||
# --- mkdir -Z ---
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user