mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	 6ae0042f4d
			
		
	
	
		6ae0042f4d
		
	
	
	
	
		
			
			Subshell evaluations are not exempt from errexit, so if a command is
not available, `which` will fail and exit the script as a whole.
This causes the helpful error messages to not be printed if they are
tacked on using a `$?` comparison.
Resolve the issue by using chains of logical operators, which are not
subject to the effects of errexit.
Fixes: e37c1877ba ("scripts/selinux: modernize mdp")
Signed-off-by: Tim Schumacher <tim.schumacher1@huawei.com>
Signed-off-by: Paul Moore <paul@paul-moore.com>
		
	
			
		
			
				
	
	
		
			81 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/bin/sh
 | |
| # SPDX-License-Identifier: GPL-2.0
 | |
| set -e
 | |
| if [ `id -u` -ne 0 ]; then
 | |
| 	echo "$0: must be root to install the selinux policy"
 | |
| 	exit 1
 | |
| fi
 | |
| 
 | |
| SF=`which setfiles` || {
 | |
| 	echo "Could not find setfiles"
 | |
| 	echo "Do you have policycoreutils installed?"
 | |
| 	exit 1
 | |
| }
 | |
| 
 | |
| CP=`which checkpolicy` || {
 | |
| 	echo "Could not find checkpolicy"
 | |
| 	echo "Do you have checkpolicy installed?"
 | |
| 	exit 1
 | |
| }
 | |
| VERS=`$CP -V | awk '{print $1}'`
 | |
| 
 | |
| ENABLED=`which selinuxenabled` || {
 | |
| 	echo "Could not find selinuxenabled"
 | |
| 	echo "Do you have libselinux-utils installed?"
 | |
| 	exit 1
 | |
| }
 | |
| 
 | |
| if selinuxenabled; then
 | |
|     echo "SELinux is already enabled"
 | |
|     echo "This prevents safely relabeling all files."
 | |
|     echo "Boot with selinux=0 on the kernel command-line."
 | |
|     exit 1
 | |
| fi
 | |
| 
 | |
| cd mdp
 | |
| ./mdp -m policy.conf file_contexts
 | |
| $CP -U allow -M -o policy.$VERS policy.conf
 | |
| 
 | |
| mkdir -p /etc/selinux/dummy/policy
 | |
| mkdir -p /etc/selinux/dummy/contexts/files
 | |
| 
 | |
| echo "__default__:user_u:s0" > /etc/selinux/dummy/seusers
 | |
| echo "base_r:base_t:s0" > /etc/selinux/dummy/contexts/failsafe_context
 | |
| echo "base_r:base_t:s0 base_r:base_t:s0" > /etc/selinux/dummy/default_contexts
 | |
| cat > /etc/selinux/dummy/contexts/x_contexts <<EOF
 | |
| client * user_u:base_r:base_t:s0
 | |
| property * user_u:object_r:base_t:s0
 | |
| extension * user_u:object_r:base_t:s0
 | |
| selection * user_u:object_r:base_t:s0
 | |
| event * user_u:object_r:base_t:s0
 | |
| EOF
 | |
| touch /etc/selinux/dummy/contexts/virtual_domain_context
 | |
| touch /etc/selinux/dummy/contexts/virtual_image_context
 | |
| 
 | |
| cp file_contexts /etc/selinux/dummy/contexts/files
 | |
| cp dbus_contexts /etc/selinux/dummy/contexts
 | |
| cp policy.$VERS /etc/selinux/dummy/policy
 | |
| FC_FILE=/etc/selinux/dummy/contexts/files/file_contexts
 | |
| 
 | |
| if [ ! -d /etc/selinux ]; then
 | |
| 	mkdir -p /etc/selinux
 | |
| fi
 | |
| if [ -f /etc/selinux/config ]; then
 | |
|     echo "/etc/selinux/config exists, moving to /etc/selinux/config.bak."
 | |
|     mv /etc/selinux/config /etc/selinux/config.bak
 | |
| fi
 | |
| echo "Creating new /etc/selinux/config for dummy policy."
 | |
| cat > /etc/selinux/config << EOF
 | |
| SELINUX=permissive
 | |
| SELINUXTYPE=dummy
 | |
| EOF
 | |
| 
 | |
| cd /etc/selinux/dummy/contexts/files
 | |
| $SF -F file_contexts /
 | |
| 
 | |
| mounts=`cat /proc/$$/mounts | \
 | |
| 	grep -E "ext[234]|jfs|xfs|reiserfs|jffs2|gfs2|btrfs|f2fs|ocfs2" | \
 | |
| 	awk '{ print $2 '}`
 | |
| $SF -F file_contexts $mounts
 | |
| 
 | |
| echo "-F" > /.autorelabel
 |