summaryrefslogtreecommitdiff
blob: 009e06a3addf233ecdf8af1e03473d3ff3053323 (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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
# Copyright 1999-2002 Gentoo Technologies, Inc.
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/sys-apps/selinux-small/selinux-small-2003040709-r4.ebuild,v 1.5 2003/07/28 19:47:38 pebenito Exp $

DESCRIPTION="SELinux libraries and policy compiler"
HOMEPAGE="http://www.nsa.gov/selinux"
SRC_URI="http://www.nsa.gov/selinux/archives/${P}.tgz"

LICENSE="GPL-2"
SLOT="0"
S="${WORKDIR}/selinux"

KEYWORDS="~x86 ~amd64 ~ppc ~alpha ~sparc"
IUSE="selinux static"
DEPEND="sys-devel/flex
	sys-libs/pam
        || (
                >=sys-kernel/selinux-sources-2.4.20-r1
                >=sys-kernel/hardened-sources-2.4.20-r1
           )"

RDEPEND="${DEPEND}
	>=dev-python/pexpect-0.97
	>=sec-policy/selinux-base-policy-20030522"

use static && LDFLAGS="-static"

pkg_setup() {
	if [ -z "`use selinux`" ]; then
		eerror "selinux is missing from your USE.  You seem to be using the"
		eerror "incorrect profile.  SELinux has a different profile than"
		eerror "mainline Gentoo.  Make sure the /etc/make.profile symbolic"
		eend 1 "link is pointing to /usr/portage/profiles/selinux-x86-1.4/"
	fi

	if [ ! -f /usr/src/linux/security/selinux/ss/ebitmap.c ]; then
		eerror "The /usr/src/linux symbolic link appears to be incorrect.  It"
		eerror "must be pointing to a selinux-sources or hardened-sources kernel"
		eerror "for selinux-small to compile.  If the link is correct, the"
		eerror "kernel sources may be damaged or incomplete, and will need to"
		eend 1 "be remerged.  Please fix and retry."
	fi

	if [ -z "`use pam`" ]; then
		eerror "pam is missing from your USE.  Currently selinux requires pam."
		eerror "Please add pam, so all programs work correctly.  A pam-less"
		eend 1 "install will probably be supported in the future."
	fi
}

src_unpack() {
	unpack ${A}
	cd ${S}

	epatch ${FILESDIR}/${P}-gentoo.diff
	has_version '>=sys-libs/glibc-2.3.2' && epatch ${FILESDIR}/${P}-newstat.diff
	epatch ${FILESDIR}/${P}-newrole.diff

	ln -s /usr/src/linux ${WORKDIR}/lsm-2.4
}

src_compile() {

	einfo "Compiling checkpolicy"
	cd ${S}/module
		make LSMVER=-2.4 LDFLAGS=${LDFLAGS} all \
			|| die "Checkpolicy compilation failed"

	einfo "Compiling libsecure"
	cd ${S}/libsecure
		make SE_INC=/usr/include/linux/flask EXTRA_CFLAGS="${CFLAGS}" \
			EXTRA_LDFLAGS="${LDFLAGS}" \
			|| die "libsecure compile failed."

	# now set up paths, since the next compiles need libsecure
	LDFLAGS="-L${S}/libsecure/src ${LDFLAGS}"
	LIBSECURE="-I${S}/libsecure/include ${LDFLAGS} -DUSE_PAM"

	einfo "Compiling devfsd module"
	cd ${S}/devfsd
		mv devfsd-conflet selinux-small
		make CFLAGS="${CFLAGS}" LDFLAGS="${LIBSECURE/-static}" \
			|| die "devfsd compile failed."

	einfo "Compiling setfiles"
	cd ${S}/setfiles
		make CFLAGS="${CFLAGS} ${LIBSECURE}" LDFLAGS="${LDFLAGS}" setfiles \
			|| die "setfiles compile failed."

	einfo "Compiling newrole"
	cd ${S}/utils/newrole
		make CFLAGS="${CFLAGS} ${LIBSECURE/-static} -lcrypt" \
			|| die "newrole compile failed."

	einfo "Compiling run_init"
	cd ${S}/utils/run_init
		make CFLAGS="${CFLAGS} ${LIBSECURE/-static} -lcrypt" \
			|| die "run_init compile failed."

	einfo "Compiling s-wrappers"
	cd ${S}/utils/spasswd
		make CFLAGS="${CFLAGS} ${LIBSECURE}" LDFLAGS="${LDFLAGS} -lcrypt -static" \
			|| die "s-wrappers compile failed."

	einfo "Compiling selopt"
	cd ${S}/selopt
		make COPT_FLAGS="${CFLAGS} ${LIBSECURE}" LDFLAGS="${LDFLAGS}" \
			|| die "selopt compile failed."
}

src_install() {
	# install policy stuff
	dosbin ${S}/module/checkpolicy/checkpolicy
	dosbin ${S}/setfiles/setfiles

	insinto /usr/include
	doins ${S}/libsecure/include/*.h

	insinto /etc/devfs.d
	doins ${S}/devfsd/selinux-small

	dolib.a ${S}/libsecure/src/libsecure.a
	dobin ${S}/libsecure/test/{avc_enforcing,avc_toggle,context_to_sid,sid_to_context,list_sids,chsid,lchsid,chsidfs,get_user_sids}
	dosbin ${S}/libsecure/test/load_policy
	dobin ${S}/utils/spasswd/{sadminpasswd,schfn,schsh,spasswd,suseradd,suserdel,svipw}
	dobin ${S}/utils/run_init/run_init
	dobin ${S}/utils/newrole/newrole
	dosbin ${FILESDIR}/{rlpkg,open_init_pty}

	doman ${S}/setfiles/setfiles.8
	doman ${S}/libsecure/man/man[12]/*
	doman ${S}/utils/newrole/newrole.1
	doman ${S}/utils/run_init/run_init.8

	dobin ${S}/selopt/utils/flmon
	dosbin ${S}/selopt/utils/{ct,pt,qt}
	dosbin ${S}/selopt/scmpd/scmpd
	dodoc ${S}/selopt/doc/*

	exeinto /etc/init.d
	doexe ${FILESDIR}/scmpd

	exeinto /lib/devfsd
	doexe ${S}/devfsd/devfsd-se.so

	# install pam stuff
	insinto /etc/pam.d
	doins ${FILESDIR}/{newrole,run_init}
}

pkg_postinst() {
	einfo
	einfo "To recompile the policy and relabel the filesystem simply run:"
	einfo "ebuild /var/db/pkg/${CATEGORY}/${PF}/${PF}.ebuild config"
	einfo

	# Stop devfsd from restoring /dev/log, it causes denials.
	# The syslog will create it when it starts.  Recent stock
	# gentoo devfsd.conf's stopped saving /dev/log into dev-state.
	[ -f /lib/dev-state/log ] && rm -f /lib/dev-state/log
}

pkg_config() {
	cd /etc/security/selinux/src/policy

	einfo "Compiling policy"
	make policy || die "Policy compile failed (see above error messages)"

	einfo "Installing policy"
	make install || die "Policy install failed (see above error messages)"

	einfo "Loading policy"
	make load || die "Policy loading failed (see above error messages)"

	einfo "Relabeling filesystems -- This will take a very long time!"
	make relabel || die "Relabeling failed (see above error messages)"
}