summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris PeBenito <pebenito@gentoo.org>2004-07-02 19:33:08 +0000
committerChris PeBenito <pebenito@gentoo.org>2004-07-02 19:33:08 +0000
commitca1281a2af3908d51135a7cb85795e787b4ee007 (patch)
tree8df407f3e29def485dd552f80dbaee8f7e87f30d /sys-apps/sysvinit
parentInitial commit. See bug #42211. (Manifest recommit) (diff)
downloadgentoo-2-ca1281a2af3908d51135a7cb85795e787b4ee007.tar.gz
gentoo-2-ca1281a2af3908d51135a7cb85795e787b4ee007.tar.bz2
gentoo-2-ca1281a2af3908d51135a7cb85795e787b4ee007.zip
bump
Diffstat (limited to 'sys-apps/sysvinit')
-rw-r--r--sys-apps/sysvinit/ChangeLog8
-rw-r--r--sys-apps/sysvinit/files/digest-sysvinit-2.851
-rw-r--r--sys-apps/sysvinit/files/sysvinit-2.85-selinux.patch242
-rw-r--r--sys-apps/sysvinit/sysvinit-2.85.ebuild68
4 files changed, 318 insertions, 1 deletions
diff --git a/sys-apps/sysvinit/ChangeLog b/sys-apps/sysvinit/ChangeLog
index b685c446881c..7ef08b257a48 100644
--- a/sys-apps/sysvinit/ChangeLog
+++ b/sys-apps/sysvinit/ChangeLog
@@ -1,6 +1,12 @@
# ChangeLog for sys-apps/sysvinit
# Copyright 2002-2004 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/sys-apps/sysvinit/ChangeLog,v 1.9 2004/06/30 05:27:16 pebenito Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/sysvinit/ChangeLog,v 1.10 2004/07/02 19:33:08 pebenito Exp $
+
+*sysvinit-2.85 (02 Jul 2004)
+
+ 02 Jul 2004; Chris PeBenito <pebenito@gentoo.org>
+ +files/sysvinit-2.85-selinux.patch, +sysvinit-2.85.ebuild:
+ Bump, along with new SELinux patch, from #55701.
30 Jun 2004; Chris PeBenito <pebenito@gentoo.org> sysvinit-2.84.ebuild:
Inherit eutils and fix SELinux patch versioning.
diff --git a/sys-apps/sysvinit/files/digest-sysvinit-2.85 b/sys-apps/sysvinit/files/digest-sysvinit-2.85
new file mode 100644
index 000000000000..e60573a3c576
--- /dev/null
+++ b/sys-apps/sysvinit/files/digest-sysvinit-2.85
@@ -0,0 +1 @@
+MD5 8a2d8f1ed5a2909da04132fefa44905e sysvinit-2.85.tar.gz 92758
diff --git a/sys-apps/sysvinit/files/sysvinit-2.85-selinux.patch b/sys-apps/sysvinit/files/sysvinit-2.85-selinux.patch
new file mode 100644
index 000000000000..4ba08b635071
--- /dev/null
+++ b/sys-apps/sysvinit/files/sysvinit-2.85-selinux.patch
@@ -0,0 +1,242 @@
+--- sysvinit-2.85/src/Makefile.selinux 2004-06-09 15:28:47.439412648 -0400
++++ sysvinit-2.85/src/Makefile 2004-06-09 15:28:47.517400792 -0400
+@@ -35,7 +35,7 @@
+ all: $(PROGS)
+
+ init: init.o init_utmp.o
+- $(CC) $(LDFLAGS) $(STATIC) -o $@ init.o init_utmp.o
++ $(CC) $(LDFLAGS) $(STATIC) -o $@ init.o init_utmp.o -lselinux
+
+ halt: halt.o ifdown.o hddown.o utmp.o reboot.h
+ $(CC) $(LDFLAGS) -o $@ halt.o ifdown.o hddown.o utmp.o
+@@ -53,7 +53,7 @@
+ $(CC) $(LDFLAGS) -o $@ runlevel.o
+
+ sulogin: sulogin.o
+- $(CC) $(LDFLAGS) $(STATIC) -o $@ sulogin.o $(LCRYPT)
++ $(CC) $(LDFLAGS) $(STATIC) -DWITH_SELINUX -o $@ sulogin.o $(LCRYPT) -lselinux
+
+ wall: dowall.o wall.o
+ $(CC) $(LDFLAGS) -o $@ dowall.o wall.o
+@@ -64,7 +64,7 @@
+ bootlogd: bootlogd.o
+ $(CC) $(LDFLAGS) -o $@ bootlogd.o
+
+ init.o: init.c init.h set.h reboot.h
+- $(CC) -c $(CFLAGS) init.c
++ $(CC) -c $(CFLAGS) -DWITH_SELINUX init.c
+
+ utmp.o: utmp.c init.h
+ $(CC) -c $(CFLAGS) utmp.c
+--- sysvinit-2.85/src/init.c.selinux 2004-06-09 15:28:47.478406720 -0400
++++ sysvinit-2.85/src/init.c 2004-06-09 15:29:03.208015456 -0400
+@@ -48,6 +48,10 @@
+ #include <stdarg.h>
+ #include <sys/syslog.h>
+ #include <sys/time.h>
++#include <sys/mman.h>
++#include <selinux/selinux.h>
++#include <sys/mount.h>
++
+
+ #ifdef __i386__
+ # if (__GLIBC__ >= 2)
+@@ -103,6 +107,7 @@
+ int dfl_level = 0; /* Default runlevel */
+ sig_atomic_t got_cont = 0; /* Set if we received the SIGCONT signal */
+ sig_atomic_t got_signals; /* Set if we received a signal. */
++int enforcing = -1; /* SELinux enforcing mode */
+ int emerg_shell = 0; /* Start emergency shell? */
+ int wrote_wtmp_reboot = 1; /* Set when we wrote the reboot record */
+ int wrote_utmp_reboot = 1; /* Set when we wrote the reboot record */
+@@ -187,6 +192,130 @@
+ {NULL,0}
+ };
+
++/* Mount point for selinuxfs. */
++#define SELINUXMNT "/selinux/"
++
++static int load_policy(int *enforce)
++{
++ int fd=-1,ret=-1;
++ int rc=0;
++ struct stat sb;
++ void *map;
++ char policy_file[PATH_MAX];
++ int policy_version=0;
++ extern char *selinux_mnt;
++ FILE *cfg;
++ char buf[4096];
++ int seconfig = -2;
++
++ selinux_getenforcemode(&seconfig);
++
++ mount("none", "/proc", "proc", 0, 0);
++ cfg = fopen("/proc/cmdline","r");
++ if (cfg) {
++ char *tmp;
++ if (fgets(buf,4096,cfg) && (tmp = strstr(buf,"enforcing="))) {
++ if (tmp == buf || isspace(*(tmp-1))) {
++ enforcing=atoi(tmp+10);
++ }
++ }
++ fclose(cfg);
++ }
++#define MNT_DETACH 2
++ umount2("/proc",MNT_DETACH);
++
++ if (enforcing >=0)
++ *enforce = enforcing;
++ else if (seconfig == 1)
++ *enforce = 1;
++
++ if (mount("none", SELINUXMNT, "selinuxfs", 0, 0) < 0) {
++ if (errno == ENODEV) {
++ log(L_VB, "SELinux not supported by kernel: %s\n",SELINUXMNT,strerror(errno));
++ *enforce = 0;
++ } else {
++ log(L_VB, "Failed to mount %s: %s\n",SELINUXMNT,strerror(errno));
++ }
++ return ret;
++ }
++
++ selinux_mnt = SELINUXMNT; /* set manually since we mounted it */
++
++ policy_version=security_policyvers();
++ if (policy_version < 0) {
++ log(L_VB, "Can't get policy version: %s\n", strerror(errno));
++ goto UMOUNT;
++ }
++
++ rc = security_getenforce();
++ if (rc < 0) {
++ log(L_VB, "Can't get SELinux enforcement flag: %s\n", strerror(errno));
++ goto UMOUNT;
++ }
++ if (enforcing >= 0) {
++ *enforce = enforcing;
++ } else if (seconfig == -1) {
++ *enforce = 0;
++ rc = security_disable();
++ if (rc == 0) umount(SELINUXMNT);
++ if (rc < 0) {
++ rc = security_setenforce(0);
++ if (rc < 0) {
++ log(L_VB, "Can't disable SELinux: %s\n", strerror(errno));
++ goto UMOUNT;
++ }
++ }
++ ret = 0;
++ goto UMOUNT;
++ } else if (seconfig >= 0) {
++ *enforce = seconfig;
++ rc = security_setenforce(seconfig);
++ if (rc < 0) {
++ log(L_VB, "Can't set SELinux enforcement flag: %s\n", strerror(errno));
++ goto UMOUNT;
++ }
++ }
++
++ snprintf(policy_file,sizeof(policy_file),"%s.%d",selinux_binary_policy_path(),policy_version);
++ fd = open(policy_file, O_RDONLY);
++ if (fd < 0) {
++ /* Check previous version to see if old policy is available
++ */
++ snprintf(policy_file,sizeof(policy_file),"%s.%d",selinux_binary_policy_path(),policy_version-1);
++ fd = open(policy_file, O_RDONLY);
++ if (fd < 0) {
++ log(L_VB, "Can't open '%s.%d': %s\n",
++ selinux_binary_policy_path(),policy_version,strerror(errno));
++ goto UMOUNT;
++ }
++ }
++
++ if (fstat(fd, &sb) < 0) {
++ log(L_VB, "Can't stat '%s': %s\n",
++ policy_file, strerror(errno));
++ goto UMOUNT;
++ }
++
++ map = mmap(NULL, sb.st_size, PROT_READ, MAP_SHARED, fd, 0);
++ if (map == MAP_FAILED) {
++ log(L_VB, "Can't map '%s': %s\n",
++ policy_file, strerror(errno));
++ goto UMOUNT;
++ }
++ log(L_VB, "Loading security policy\n");
++ ret=security_load_policy(map, sb.st_size);
++ if (ret < 0) {
++ log(L_VB, "security_load_policy failed\n");
++ }
++
++UMOUNT:
++ /*umount(SELINUXMNT); */
++ if ( fd >= 0) {
++ close(fd);
++ }
++ return(ret);
++}
++
+ /*
+ * Sleep a number of seconds.
+ *
+@@ -2513,6 +2642,7 @@
+ char *p;
+ int f;
+ int isinit;
++ int enforce = 0;
+
+ /* Get my own name */
+ if ((p = strrchr(argv[0], '/')) != NULL)
+@@ -2576,6 +2706,20 @@
+ maxproclen += strlen(argv[f]) + 1;
+ }
+
++ if (getenv("SELINUX_INIT") == NULL) {
++ putenv("SELINUX_INIT=YES");
++ if (load_policy(&enforce) == 0 ) {
++ execv(myname, argv);
++ } else {
++ if (enforce > 0) {
++ /* SELinux in enforcing mode but load_policy failed */
++ /* At this point, we probably can't open /dev/console, so log() won't work */
++ printf("Enforcing mode requested but no policy loaded. Halting now.\n");
++ exit(1);
++ }
++ }
++ }
++
+ /* Start booting. */
+ argv0 = argv[0];
+ argv[1] = NULL;
+--- sysvinit-2.85/src/sulogin.c.selinux 2004-06-09 15:28:47.321430584 -0400
++++ sysvinit-2.85/src/sulogin.c 2004-06-09 15:28:47.523399880 -0400
+@@ -28,7 +28,10 @@
+ #if defined(__GLIBC__)
+ # include <crypt.h>
+ #endif
+-
++#ifdef WITH_SELINUX
++#include <selinux/selinux.h>
++#include <selinux/get_context_list.h>
++#endif
+ #define CHECK_DES 1
+ #define CHECK_MD5 1
+
+@@ -332,6 +335,16 @@
+ signal(SIGINT, SIG_DFL);
+ signal(SIGTSTP, SIG_DFL);
+ signal(SIGQUIT, SIG_DFL);
++#ifdef WITH_SELINUX
++ if (is_selinux_enabled > 0) {
++ security_context_t* contextlist=NULL;
++ if (get_ordered_context_list("root", 0, &contextlist) > 0) {
++ if (setexeccon(contextlist[0]) != 0)
++ fprintf(stderr, "setexeccon faile\n");
++ freeconary(contextlist);
++ }
++ }
++#endif
+ execl(sushell, shell, NULL);
+ perror(sushell);
+
diff --git a/sys-apps/sysvinit/sysvinit-2.85.ebuild b/sys-apps/sysvinit/sysvinit-2.85.ebuild
new file mode 100644
index 000000000000..dd593aa12574
--- /dev/null
+++ b/sys-apps/sysvinit/sysvinit-2.85.ebuild
@@ -0,0 +1,68 @@
+# Copyright 1999-2004 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/sys-apps/sysvinit/sysvinit-2.85.ebuild,v 1.1 2004/07/02 19:33:08 pebenito Exp $
+
+inherit eutils
+
+DESCRIPTION="/sbin/init - parent of all processes"
+HOMEPAGE="http://freshmeat.net/projects/sysvinit/"
+SRC_URI="ftp://ftp.cistron.nl/pub/people/miquels/software/${P}.tar.gz
+ ftp://sunsite.unc.edu/pub/Linux/system/daemons/init/${P}.tar.gz"
+SLOT="0"
+LICENSE="GPL-2"
+KEYWORDS="~x86 ~ppc ~sparc ~mips ~alpha ~arm ~hppa ~amd64 ~ia64 ~ppc64 ~s390"
+IUSE="selinux"
+
+DEPEND="virtual/os-headers
+ selinux? ( >=sys-libs/libselinux-1.14 )"
+
+src_unpack() {
+ unpack ${A}
+ cd ${S}/src || die
+
+ # Note that if sysvinit is ever built with USE=build, need to
+ # refrain from building sulogin as it needs libcrypt which is
+ # not in the build image:
+ # sed -i -e '/^PROGS/s/ sulogin//' Makefile || die
+
+ # SELinux patch
+ use selinux && epatch ${FILESDIR}/sysvinit-${PV}-selinux.patch
+}
+
+src_compile() {
+ cd ${S}/src
+ emake CC="${CC:-gcc}" LD="${CC:-gcc}" \
+ LDFLAGS="${LDFLAGS}" CFLAGS="${CFLAGS} -D_GNU_SOURCE" || die
+}
+
+src_install() {
+ cd ${S}/src
+ into /
+ dosbin init halt killall5 runlevel shutdown sulogin
+ dosym init /sbin/telinit
+ dobin last mesg utmpdump wall
+ dosym killall5 /sbin/pidof
+ dosym halt /sbin/reboot
+ dosym halt /sbin/poweroff
+ dosym last /bin/lastb
+ insinto /usr/include
+ doins initreq.h
+
+ # sysvinit docs
+ cd ${S}
+ doman man/*.[1-9]
+ dodoc COPYRIGHT README doc/*
+
+ # install our inittab
+ insinto /etc
+ doins ${FILESDIR}/inittab || die
+
+ # Add serial console for arches that typically have it
+ case ${ARCH} in
+ sparc|mips|hppa|alpha|ia64)
+ sed -i -e \
+ 's"# TERMINALS"# SERIAL CONSOLE\nc0:12345:respawn:/sbin/agetty 9600 ttyS0 vt100\n\n&"' \
+ ${D}/etc/inittab || die
+ ;;
+ esac
+}