summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2012-10-09 04:30:31 +0000
committerMike Frysinger <vapier@gentoo.org>2012-10-09 04:30:31 +0000
commitdf48cd4bffab09da3087d53d4f9e9a70976206a2 (patch)
tree76467ee1bc66a70921a6adf9aaa5801b94b50061 /sys-process/psmisc
parentBump to 3.01 per bug 343211. Thanks to all contributors. (diff)
downloadgentoo-2-df48cd4bffab09da3087d53d4f9e9a70976206a2.tar.gz
gentoo-2-df48cd4bffab09da3087d53d4f9e9a70976206a2.tar.bz2
gentoo-2-df48cd4bffab09da3087d53d4f9e9a70976206a2.zip
Add fix from upstream for building on selinux systems #437332 by Amadeusz Sławiński.
(Portage version: 2.2.0_alpha131/cvs/Linux x86_64)
Diffstat (limited to 'sys-process/psmisc')
-rw-r--r--sys-process/psmisc/ChangeLog7
-rw-r--r--sys-process/psmisc/files/psmisc-22.20-selinux.patch263
-rw-r--r--sys-process/psmisc/psmisc-22.20.ebuild10
3 files changed, 277 insertions, 3 deletions
diff --git a/sys-process/psmisc/ChangeLog b/sys-process/psmisc/ChangeLog
index 372125fb23fc..e4fedab29a43 100644
--- a/sys-process/psmisc/ChangeLog
+++ b/sys-process/psmisc/ChangeLog
@@ -1,6 +1,11 @@
# ChangeLog for sys-process/psmisc
# Copyright 1999-2012 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/sys-process/psmisc/ChangeLog,v 1.139 2012/10/03 09:42:47 radhermit Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-process/psmisc/ChangeLog,v 1.140 2012/10/09 04:30:31 vapier Exp $
+
+ 09 Oct 2012; Mike Frysinger <vapier@gentoo.org>
+ +files/psmisc-22.20-selinux.patch, psmisc-22.20.ebuild:
+ Add fix from upstream for building on selinux systems #437332 by Amadeusz
+ Sławiński.
*psmisc-22.20 (03 Oct 2012)
diff --git a/sys-process/psmisc/files/psmisc-22.20-selinux.patch b/sys-process/psmisc/files/psmisc-22.20-selinux.patch
new file mode 100644
index 000000000000..b4ac010ac8dc
--- /dev/null
+++ b/sys-process/psmisc/files/psmisc-22.20-selinux.patch
@@ -0,0 +1,263 @@
+From 89fa40f0a55096a62809e852244d7db3f445b0cd Mon Sep 17 00:00:00 2001
+From: Craig Small <csmall@enc.com.au>
+Date: Sun, 7 Oct 2012 10:52:46 +1100
+Subject: [PATCH] pstree compiles with SE Linux
+
+pstree failed to compile with SE Linux enabled because one of the
+scontext was missed and without it enabled the bug doesn't appear.
+
+pstree is now re-worked so scontext is defined as a dummy meaning
+most of the code except the reall SE Linux specific stuff is compilied
+meaning this sort of thing shouldn't happen too much again.
+
+Bug-Gentoo: https://bugs.gentoo.org/show_bug.cgi?id=437332
+Bug-Sourceforge: https://sourceforge.net/p/psmisc/bugs/54/
+---
+ src/pstree.c | 69 ++++++------------------------------------------------------
+ 1 file changed, 6 insertions(+), 63 deletions(-)
+
+diff --git a/src/pstree.c b/src/pstree.c
+index db57244..b9a01cf 100644
+--- a/src/pstree.c
++++ b/src/pstree.c
+@@ -47,6 +47,8 @@
+
+ #ifdef WITH_SELINUX
+ #include <selinux/selinux.h>
++#else
++typedef void* security_context_t; /* DUMMY to remove most ifdefs */
+ #endif /*WITH_SELINUX */
+
+ extern const char *__progname;
+@@ -81,9 +83,7 @@ typedef struct _proc {
+ pid_t pid;
+ pid_t pgid;
+ uid_t uid;
+-#ifdef WITH_SELINUX
+ security_context_t scontext;
+-#endif /*WITH_SELINUX */
+ char flags;
+ struct _child *children;
+ struct _proc *parent;
+@@ -131,16 +131,14 @@ static int *more = NULL;
+
+ static int print_args = 0, compact = 1, user_change = 0, pids = 0, pgids = 0,
+ show_parents = 0, by_pid = 0, trunc = 1, wait_end = 0;
+-#ifdef WITH_SELINUX
+ static int show_scontext = 0;
+-#endif /*WITH_SELINUX */
+ static int output_width = 132;
+ static int cur_x = 1;
+ static char last_char = 0;
+ static int dumped = 0; /* used by dump_by_user */
+ static int charlen = 0; /* length of character */
+
+-static void fix_orphans(void);
++static void fix_orphans(security_context_t scontext);
+ /*
+ * Allocates additional buffer space for width and more as needed.
+ * The first call will allocate the first buffer.
+@@ -229,15 +227,12 @@ static int out_int(int x)
+ return digits;
+ }
+
+-#ifdef WITH_SELINUX
+ static void out_scontext(security_context_t scontext)
+ {
+ out_string("`");
+ out_string(scontext);
+ out_string("'");
+ }
+-#endif /*WITH_SELINUX */
+-
+
+ static void out_newline(void)
+ {
+@@ -259,12 +254,8 @@ static PROC *find_proc(pid_t pid)
+ return NULL;
+ }
+
+-#ifdef WITH_SELINUX
+ static PROC *new_proc(const char *comm, pid_t pid, uid_t uid,
+ security_context_t scontext)
+-#else /*WITH_SELINUX */
+-static PROC *new_proc(const char *comm, pid_t pid, uid_t uid)
+-#endif /*WITH_SELINUX */
+ {
+ PROC *new;
+
+@@ -279,9 +270,7 @@ static PROC *new_proc(const char *comm, pid_t pid, uid_t uid)
+ new->flags = 0;
+ new->argc = 0;
+ new->argv = NULL;
+-#ifdef WITH_SELINUX
+ new->scontext = scontext;
+-#endif /*WITH_SELINUX */
+ new->children = NULL;
+ new->parent = NULL;
+ new->next = list;
+@@ -364,24 +353,14 @@ rename_proc(PROC *this, const char *comm, uid_t uid)
+ }
+ }
+ }
+-#ifdef WITH_SELINUX
+ static void
+ add_proc(const char *comm, pid_t pid, pid_t ppid, pid_t pgid, uid_t uid,
+ const char *args, int size, char isthread, security_context_t scontext)
+-#else /*WITH_SELINUX */
+-static void
+-add_proc(const char *comm, pid_t pid, pid_t ppid, pid_t pgid, uid_t uid,
+- const char *args, int size, char isthread)
+-#endif /*WITH_SELINUX */
+ {
+ PROC *this, *parent;
+
+ if (!(this = find_proc(pid)))
+-#ifdef WITH_SELINUX
+ this = new_proc(comm, pid, uid, scontext);
+-#else /*WITH_SELINUX */
+- this = new_proc(comm, pid, uid);
+-#endif /*WITH_SELINUX */
+ else {
+ rename_proc(this, comm, uid);
+ }
+@@ -393,11 +372,7 @@ add_proc(const char *comm, pid_t pid, pid_t ppid, pid_t pgid, uid_t uid,
+ if (isthread)
+ this->flags |= PFLAG_THREAD;
+ if (!(parent = find_proc(ppid))) {
+-#ifdef WITH_SELINUX
+ parent = new_proc("?", ppid, 0, scontext);
+-#else /*WITH_SELINUX */
+- parent = new_proc("?", ppid, 0);
+-#endif
+ }
+ if (pid != 0) {
+ add_child(parent, this);
+@@ -494,12 +469,10 @@ dump_tree(PROC * current, int level, int rep, int leaf, int last,
+ else
+ (void) out_int(current->uid);
+ }
+-#ifdef WITH_SELINUX
+ if (show_scontext) {
+ out_char(info++ ? ',' : '(');
+ out_scontext(current->scontext);
+ }
+-#endif /*WITH_SELINUX */
+ if ((swapped && print_args && current->argc < 0) || (!swapped && info))
+ out_char(')');
+ if ((current->flags & PFLAG_HILIGHT) && (tmp = tgetstr("me", NULL)))
+@@ -520,11 +493,7 @@ dump_tree(PROC * current, int level, int rep, int leaf, int last,
+ }
+ }
+ }
+-#ifdef WITH_SELINUX
+ if (show_scontext || print_args || !current->children)
+-#else /*WITH_SELINUX */
+- if (print_args || !current->children)
+-#endif /*WITH_SELINUX */
+ {
+ while (closing--)
+ out_char(']');
+@@ -533,11 +502,7 @@ dump_tree(PROC * current, int level, int rep, int leaf, int last,
+ ensure_buffer_capacity(level);
+ more[level] = !last;
+
+-#ifdef WITH_SELINUX
+ if (show_scontext || print_args)
+-#else /*WITH_SELINUX */
+- if (print_args)
+-#endif /*WITH_SELINUX */
+ {
+ width[level] = swapped + (comm_len > 1 ? 0 : -1);
+ count=0;
+@@ -653,8 +618,8 @@ static void read_proc(void)
+ pid_t pid, ppid, pgid;
+ int fd, size;
+ int empty;
+-#ifdef WITH_SELINUX
+ security_context_t scontext = NULL;
++#ifdef WITH_SELINUX
+ int selinux_enabled = is_selinux_enabled() > 0;
+ #endif /*WITH_SELINUX */
+
+@@ -726,21 +691,12 @@ static void read_proc(void)
+ while ((dt = readdir(taskdir)) != NULL) {
+ if ((thread = atoi(dt->d_name)) != 0) {
+ if (thread != pid) {
+-#ifdef WITH_SELINUX
+ if (print_args)
+ add_proc(threadname, thread, pid, pgid, st.st_uid,
+ threadname, strlen (threadname) + 1, 1,scontext);
+ else
+ add_proc(threadname, thread, pid, pgid, st.st_uid,
+ NULL, 0, 1, scontext);
+-#else /*WITH_SELINUX */
+- if (print_args)
+- add_proc(threadname, thread, pid, pgid, st.st_uid,
+- threadname, strlen (threadname) + 1, 1);
+- else
+- add_proc(threadname, thread, pid, pgid, st.st_uid,
+- NULL, 0, 1);
+-#endif /*WITH_SELINUX */
+ }
+ }
+ }
+@@ -749,11 +705,7 @@ static void read_proc(void)
+ }
+ free(taskpath);
+ if (!print_args)
+-#ifdef WITH_SELINUX
+ add_proc(comm, pid, ppid, pgid, st.st_uid, NULL, 0, 0, scontext);
+-#else /*WITH_SELINUX */
+- add_proc(comm, pid, ppid, pgid, st.st_uid, NULL, 0, 0);
+-#endif /*WITH_SELINUX */
+ else {
+ sprintf(path, "%s/%d/cmdline", PROC_BASE, pid);
+ if ((fd = open(path, O_RDONLY)) < 0) {
+@@ -770,13 +722,8 @@ static void read_proc(void)
+ size--;
+ if (size)
+ buffer[size++] = 0;
+-#ifdef WITH_SELINUX
+ add_proc(comm, pid, ppid, pgid, st.st_uid,
+ buffer, size, 0, scontext);
+-#else /*WITH_SELINUX */
+- add_proc(comm, pid, ppid, pgid, st.st_uid,
+- buffer, size, 0);
+-#endif /*WITH_SELINUX */
+ }
+ }
+ }
+@@ -787,7 +734,7 @@ static void read_proc(void)
+ }
+ }
+ (void) closedir(dir);
+- fix_orphans();
++ fix_orphans(scontext);
+ if (print_args)
+ free(buffer);
+ if (empty) {
+@@ -796,7 +743,7 @@ static void read_proc(void)
+ }
+ }
+
+-static void fix_orphans(void)
++static void fix_orphans(security_context_t scontext)
+ {
+ /* When using kernel 3.3 with hidepid feature enabled on /proc
+ * then we need fake root pid and gather all the orphan processes
+@@ -807,11 +754,7 @@ static void fix_orphans(void)
+ PROC *root, *walk;
+
+ if (!(root = find_proc(ROOT_PID))) {
+-#ifdef WITH_SELINUX
+ root = new_proc("?", ROOT_PID, 0, scontext);
+-#else /*WITH_SELINUX */
+- root = new_proc("?", ROOT_PID, 0);
+-#endif
+ }
+ for (walk = list; walk; walk = walk->next) {
+ if (walk->pid == 1 || walk->pid == 0)
+--
+1.7.12
+
diff --git a/sys-process/psmisc/psmisc-22.20.ebuild b/sys-process/psmisc/psmisc-22.20.ebuild
index 42c16e10edb3..e41b789ac2a7 100644
--- a/sys-process/psmisc/psmisc-22.20.ebuild
+++ b/sys-process/psmisc/psmisc-22.20.ebuild
@@ -1,8 +1,10 @@
# Copyright 1999-2012 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/sys-process/psmisc/psmisc-22.20.ebuild,v 1.1 2012/10/03 09:42:47 radhermit Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-process/psmisc/psmisc-22.20.ebuild,v 1.2 2012/10/09 04:30:31 vapier Exp $
-EAPI=4
+EAPI="4"
+
+inherit eutils
DESCRIPTION="A set of tools that use the proc filesystem"
HOMEPAGE="http://psmisc.sourceforge.net/"
@@ -22,6 +24,10 @@ DEPEND="${RDEPEND}
DOCS="AUTHORS ChangeLog NEWS README"
+src_prepare() {
+ epatch "${FILESDIR}"/${P}-selinux.patch #437332
+}
+
src_configure() {
econf \
$(use_enable selinux) \