summarylogtreecommitdiffstats
path: root/0001-tests-support-non-MLS-enabled-SELinux-systems.patch
diff options
context:
space:
mode:
Diffstat (limited to '0001-tests-support-non-MLS-enabled-SELinux-systems.patch')
-rw-r--r--0001-tests-support-non-MLS-enabled-SELinux-systems.patch158
1 files changed, 158 insertions, 0 deletions
diff --git a/0001-tests-support-non-MLS-enabled-SELinux-systems.patch b/0001-tests-support-non-MLS-enabled-SELinux-systems.patch
new file mode 100644
index 000000000000..db183cc45384
--- /dev/null
+++ b/0001-tests-support-non-MLS-enabled-SELinux-systems.patch
@@ -0,0 +1,158 @@
+From 97f0b56bcad827d954f9a6fe2051aa63ab591478 Mon Sep 17 00:00:00 2001
+From: Nicolas Iooss <nicolas.iooss@m4x.org>
+Date: Thu, 11 Feb 2016 15:07:52 +0100
+Subject: [PATCH 1/1] 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
+---
+ init.cfg | 18 +++++++++++++++---
+ tests/cp/cp-a-selinux.sh | 4 ++--
+ tests/install/install-Z-selinux.sh | 7 +++----
+ tests/misc/chcon.sh | 1 +
+ tests/misc/selinux.sh | 3 ++-
+ tests/mkdir/restorecon.sh | 7 +++----
+ 6 files changed, 26 insertions(+), 14 deletions(-)
+
+diff --git a/init.cfg b/init.cfg
+index db861944c6af..d29b3f254585 100644
+--- a/init.cfg
++++ b/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_ || __ctx_ok=1 ;;
+ esac
++
++ test "$__ctx_ok" ||
++ skip_ "unexpected context '$__ctx'; turn off mcstransd"
+ }
+
+ # Skip the current test if umask doesn't work as usual.
+diff --git a/tests/cp/cp-a-selinux.sh b/tests/cp/cp-a-selinux.sh
+index 89735b65a832..3915952188dd 100755
+--- a/tests/cp/cp-a-selinux.sh
++++ b/tests/cp/cp-a-selinux.sh
+@@ -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_
+diff --git a/tests/install/install-Z-selinux.sh b/tests/install/install-Z-selinux.sh
+index 9c3b6420bc95..c63a4786230a 100755
+--- a/tests/install/install-Z-selinux.sh
++++ b/tests/install/install-Z-selinux.sh
+@@ -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 ...
+diff --git a/tests/misc/chcon.sh b/tests/misc/chcon.sh
+index bd40fbc7d314..c99021907172 100755
+--- a/tests/misc/chcon.sh
++++ b/tests/misc/chcon.sh
+@@ -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_
+diff --git a/tests/misc/selinux.sh b/tests/misc/selinux.sh
+index a9515680a44f..28c05c4f82d7 100755
+--- a/tests/misc/selinux.sh
++++ b/tests/misc/selinux.sh
+@@ -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'
+diff --git a/tests/mkdir/restorecon.sh b/tests/mkdir/restorecon.sh
+index 0e7f03bc93db..49e72196ff88 100755
+--- a/tests/mkdir/restorecon.sh
++++ b/tests/mkdir/restorecon.sh
+@@ -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 ---
+--
+2.11.0
+