File: selinux-loadpolicy.sh

package info (click to toggle)
dracut 005-1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 1,368 kB
  • ctags: 207
  • sloc: sh: 6,487; ansic: 192; makefile: 108
file content (67 lines) | stat: -rwxr-xr-x 1,747 bytes parent folder | download
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/bin/sh
# FIXME: load selinux policy.  this should really be done after we switchroot 

rd_load_policy()
{

    SELINUX="enforcing"
    [ -e "$NEWROOT/etc/selinux/config" ] && . "$NEWROOT/etc/selinux/config"

    disabled=0
    # If SELinux is disabled exit now 
    getarg "selinux=0" > /dev/null
    if [ $? -eq 0 -o "$SELINUX" = "disabled" ]; then
	disabled=1
    fi

    # Check whether SELinux is in permissive mode
    permissive=0
    getarg "enforcing=0" > /dev/null
    if [ $? -eq 0 -o "$SELINUX" = "permissive" ]; then
	permissive=1
    fi

    # Attempt to load SELinux Policy
    if [ -x "$NEWROOT/usr/sbin/load_policy" -o -x "$NEWROOT/sbin/load_policy" ]; then
	ret=0
	info "Loading SELinux policy"
	{
            # load_policy does mount /proc and /selinux in 
            # libselinux,selinux_init_load_policy()
            if [ -x "$NEWROOT/sbin/load_policy" ]; then
		chroot "$NEWROOT" /sbin/load_policy -i
		ret=$?
            else
		chroot "$NEWROOT" /usr/sbin/load_policy -i
		ret=$?
            fi
	} 2>&1 | vinfo

	if [ $disabled -eq 1 ]; then
	    return 0;
	fi

	if [ $ret -eq 0 -o $ret -eq 2 ]; then
	    # If machine requires a relabel, force to permissive mode
	    [ -e "$NEWROOT"/.autorelabel ] && ( echo 0 > "$NEWROOT"/selinux/enforce )
	    return 0
	fi

	warn "Initial SELinux policy load failed."
	if [ $ret -eq 3 -o $permissive -eq 0 ]; then
	    warn "Machine in enforcing mode."
	    warn "Not continuing"
	    sleep 100d
	    exit 1
	fi
	return 0
    elif [ $permissive -eq 0 -a $disabled -eq 0 ]; then
	warn "Machine in enforcing mode and cannot execute load_policy."
	warn "To disable selinux, add selinux=0 to the kernel command line."
	warn "Not continuing"
	sleep 100d
	exit 1
    fi
}

rd_load_policy