diff options
author | Mike Frysinger <vapier@gentoo.org> | 2012-10-09 04:30:31 +0000 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2012-10-09 04:30:31 +0000 |
commit | df48cd4bffab09da3087d53d4f9e9a70976206a2 (patch) | |
tree | 76467ee1bc66a70921a6adf9aaa5801b94b50061 /sys-process/psmisc | |
parent | Bump to 3.01 per bug 343211. Thanks to all contributors. (diff) | |
download | gentoo-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/ChangeLog | 7 | ||||
-rw-r--r-- | sys-process/psmisc/files/psmisc-22.20-selinux.patch | 263 | ||||
-rw-r--r-- | sys-process/psmisc/psmisc-22.20.ebuild | 10 |
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) \ |