summaryrefslogtreecommitdiffstats
path: root/lib/facter/selinux.rb
blob: 9fab4276b8c227a3b241932ff4dff712acfee5a4 (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
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
68
69
70
71
72
73
74
75
76
77
78
# Fact for SElinux
# Written by immerda admin team (admin(at)immerda.ch)

Facter.add("selinux") do
    confine :kernel => :linux

    setcode do
        result = "false"
        if FileTest.exists?("/selinux/enforce")
            if FileTest.exists?("/proc/self/attr/current")
                if (File.read("/proc/self/attr/current") != "kernel\0")
                    result = "true"
                end
            end
        end
        result
    end
end

Facter.add("selinux_enforced") do
    confine :selinux => :true

    setcode do
        result = "false"
        if FileTest.exists?("/selinux/enforce") and File.read("/selinux/enforce") =~ /1/i
            result = "true"
        end
        result
    end
end

Facter.add("selinux_policyversion") do
    confine :selinux => :true
    setcode do
        File.read("/selinux/policyvers")
    end
end

Facter.add("selinux_current_mode") do
    confine :selinux => :true
    setcode do
	result = 'unknown'
        mode = Facter::Util::Resolution.exec('/usr/sbin/sestatus')
        mode.each_line { |l| result = $1 if l =~ /^Current mode\:\s+(\w+)$/i }
        result.chomp
    end
end

Facter.add("selinux_config_mode") do
    confine :selinux => :true
    setcode do
        result = 'unknown'
        mode = Facter::Util::Resolution.exec('/usr/sbin/sestatus')
        mode.each_line { |l| result = $1 if l =~ /^Mode from config file\:\s+(\w+)$/i }
        result.chomp
    end
end

Facter.add("selinux_config_policy") do
    confine :selinux => :true
    setcode do
        result = 'unknown'
        mode = Facter::Util::Resolution.exec('/usr/sbin/sestatus')
        mode.each_line { |l| result = $1 if l =~ /^Policy from config file\:\s+(\w+)$/i }
        result.chomp
    end
end

# This is a legacy fact which returns the old selinux_mode fact value to prevent 
# breakages of existing manifests. It should be removed at the next major release.
# See ticket #6677.

Facter.add("selinux_mode") do
    confine :selinux => :true
    setcode do
        Facter.value(:selinux_config_policy)
    end
end