diff --git a/.gitignore b/.gitignore index bb38783..f5d54ed 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ psmisc-22.10.tar.gz /psmisc-22.16.tar.gz /psmisc-22.19.tar.gz /psmisc-22.20.tar.gz +/psmisc-22.21.tar.gz diff --git a/psmisc-22.20-RH-man-page-scan.patch b/psmisc-22.20-RH-man-page-scan.patch deleted file mode 100644 index 9345739..0000000 --- a/psmisc-22.20-RH-man-page-scan.patch +++ /dev/null @@ -1,39 +0,0 @@ -diff -Naur psmisc-22.20.orig/doc/fuser.1 psmisc-22.20/doc/fuser.1 ---- psmisc-22.20.orig/doc/fuser.1 2012-09-19 12:54:03.000000000 +0200 -+++ psmisc-22.20/doc/fuser.1 2013-07-30 18:59:38.975335764 +0200 -@@ -170,8 +170,8 @@ - \fB\-\fISIGNAL\fR - Use the specified signal instead of SIGKILL when killing processes. - Signals can be specified either by name (e.g. --.BR \-HUP ) or by --number (e.g. -+.BR \-HUP ) -+or by number (e.g. - .BR \-1 ). - This option is silently ignored if the - .B \-k -diff -Naur psmisc-22.20.orig/doc/peekfd.1 psmisc-22.20/doc/peekfd.1 ---- psmisc-22.20.orig/doc/peekfd.1 2012-09-19 12:54:03.000000000 +0200 -+++ psmisc-22.20/doc/peekfd.1 2013-07-30 19:10:32.582099617 +0200 -@@ -37,7 +37,7 @@ - .IP -d - Remove duplicate read/writes from the output. If you're looking at a - tty with echo, you might want this. --.IP -v -+.IP -V - Display a version string. - .IP -h - Display a help message. -diff -Naur psmisc-22.20.orig/src/pstree.c psmisc-22.20/src/pstree.c ---- psmisc-22.20.orig/src/pstree.c 2013-07-30 18:53:21.000000000 +0200 -+++ psmisc-22.20/src/pstree.c 2013-07-30 19:17:14.057288441 +0200 -@@ -860,7 +860,8 @@ - " -V, --version display version information\n")); - #ifdef WITH_SELINUX - fprintf(stderr, -- _(" -Z show SELinux security contexts\n")); -+ _(" -Z,\n" -+ " --security-context show SELinux security contexts\n")); - #endif /*WITH_SELINUX */ - fprintf(stderr, _(" PID start at this PID; default is 1 (init)\n" - " USER show only trees rooted at processes of this user\n\n")); diff --git a/psmisc-22.20-fix-selinux-in-pstree.patch b/psmisc-22.20-fix-selinux-in-pstree.patch deleted file mode 100644 index d89d6c1..0000000 --- a/psmisc-22.20-fix-selinux-in-pstree.patch +++ /dev/null @@ -1,39 +0,0 @@ ---- psmisc-22.20/src/pstree.c 2012-09-19 14:05:43.000000000 +0100 -+++ psmisc-22.20-selinux/src/pstree.c 2012-10-08 19:18:13.992951873 +0100 -@@ -140,7 +140,12 @@ - static int dumped = 0; /* used by dump_by_user */ - static int charlen = 0; /* length of character */ - -+#ifdef WITH_SELINUX -+static void fix_orphans(security_context_t scontext); -+#else - static void fix_orphans(void); -+#endif -+ - /* - * Allocates additional buffer space for width and more as needed. - * The first call will allocate the first buffer. -@@ -787,7 +792,11 @@ - } - } - (void) closedir(dir); -+#ifdef WITH_SELINUX -+ fix_orphans(scontext); -+#else - fix_orphans(); -+#endif - if (print_args) - free(buffer); - if (empty) { -@@ -796,7 +805,11 @@ - } - } - -+#ifdef WITH_SELINUX -+static void fix_orphans(security_context_t scontext) -+#else - static void fix_orphans(void) -+#endif - { - /* When using kernel 3.3 with hidepid feature enabled on /proc - * then we need fake root pid and gather all the orphan processes diff --git a/psmisc.spec b/psmisc.spec index 47e7929..f7cbc97 100644 --- a/psmisc.spec +++ b/psmisc.spec @@ -1,7 +1,8 @@ + Summary: Utilities for managing processes on your system Name: psmisc -Version: 22.20 -Release: 4%{?dist} +Version: 22.21 +Release: 1%{?dist} License: GPLv2+ Group: Applications/System URL: http://sourceforge.net/projects/psmisc @@ -11,14 +12,6 @@ Source: http://downloads.sourceforge.net/%{name}/%{name}-%{version}.tar.gz #The following has been reworked by upstream in a different way ... we'll see #Patch1: psmisc-22.13-fuser-silent.patch -# Patch sent upstream 2012-10-08. -Patch2: psmisc-22.20-fix-selinux-in-pstree.patch - -Patch3: psmisc-22.20-RH-man-page-scan.patch - -Patch4: pstree-introduce-support-for-namespaces.patch -Patch5: pstree-introduce-namespace-transition-information.patch - BuildRequires: libselinux-devel BuildRequires: gettext BuildRequires: ncurses-devel @@ -36,15 +29,12 @@ of processes that are using specified files or filesystems. %prep %setup -q -%patch2 -p1 -%patch3 -p1 -%patch4 -p1 -%patch5 -p1 %build %configure --prefix=%{_prefix} --enable-selinux make %{?_smp_mflags} + %install make install DESTDIR="$RPM_BUILD_ROOT" @@ -53,6 +43,7 @@ mv $RPM_BUILD_ROOT%{_bindir}/fuser $RPM_BUILD_ROOT/sbin %find_lang %name + %files -f %{name}.lang /sbin/fuser %{_bindir}/killall @@ -69,7 +60,13 @@ mv $RPM_BUILD_ROOT%{_bindir}/fuser $RPM_BUILD_ROOT/sbin %{_mandir}/man1/peekfd.1* %doc AUTHORS ChangeLog COPYING README + %changelog +* Thu Oct 10 2013 Jaromir Capik - 22.21-1 +- Update to 22.21 +- Spec cleaning +- Fixing bogus dates in the changelog + * Tue Sep 17 2013 Aristeu Rozanski - 22.20-4 - Introducing namespaces support (#1016259) @@ -129,7 +126,7 @@ mv $RPM_BUILD_ROOT%{_bindir}/fuser $RPM_BUILD_ROOT/sbin - peekfd should work on all architectures now - spec cleanups -* Mon May 25 2010 Jan Görig 22.10-1 +* Tue May 25 2010 Jan Görig 22.10-1 - update to new upstream version - remove unused patches - docs are now in package @@ -259,11 +256,11 @@ mv $RPM_BUILD_ROOT%{_bindir}/fuser $RPM_BUILD_ROOT/sbin * Tue Jun 15 2004 Elliot Lee 21.4-3 - rebuilt -* Sun Mar 15 2004 Mike A. Harris 21.4-2 +* Mon Mar 15 2004 Mike A. Harris 21.4-2 - Re-enabled SELINUX support - Removed gcc33 patch, no longer needed it seems. -* Sun Mar 15 2004 Mike A. Harris 21.4-1 +* Mon Mar 15 2004 Mike A. Harris 21.4-1 - Updated to new upstream version 21.4 - Ported SELinux patch forward as psmisc-21.4-redhat-selinux-psmisc.patch, but disabled SELINUX support temporarily until other build problems are @@ -290,10 +287,10 @@ mv $RPM_BUILD_ROOT%{_bindir}/fuser $RPM_BUILD_ROOT/sbin * Thu Aug 28 2003 Dan Walsh 21.3-5.sel - change flags to -Z and build for selinux -* Tue Jul 28 2003 Dan Walsh 21.3-4 +* Mon Jul 28 2003 Dan Walsh 21.3-4 - Remove -lsecure check from configure. -* Tue Jul 28 2003 Dan Walsh 21.3-2 +* Mon Jul 28 2003 Dan Walsh 21.3-2 - Added SELinux patches * Wed Jun 04 2003 Elliot Lee diff --git a/pstree-introduce-namespace-transition-information.patch b/pstree-introduce-namespace-transition-information.patch deleted file mode 100644 index 773985d..0000000 --- a/pstree-introduce-namespace-transition-information.patch +++ /dev/null @@ -1,121 +0,0 @@ -From 29ac10530c97631d76aa34b2d2ed018ded60d6bf Mon Sep 17 00:00:00 2001 -From: Aristeu Rozanski -Date: Thu, 25 Apr 2013 11:35:15 -0400 -Subject: [PATCH 2/3] pstree: introduce namespace transition information - -This patch adds a new option (-S, --ns-change) that will show -when a namespace was changed compared to parent's. - -Signed-off-by: Aristeu Rozanski -Signed-off-by: Craig Small ---- - doc/pstree.1 | 4 ++++ - src/pstree.c | 27 ++++++++++++++++++++++++--- - 2 files changed, 28 insertions(+), 3 deletions(-) - ---- psmisc-22.20.orig/doc/pstree.1 2013-09-17 16:26:00.000000000 -0400 -+++ psmisc-22.20/doc/pstree.1 2013-09-17 16:27:22.510167111 -0400 -@@ -21,6 +21,7 @@ pstree \- display a tree of processes - .RB [ \-N , \ \-\-ns\-sort \fIns\fB - .RB [ \-p , \ \-\-show\-pids ] - .RB [ \-s , \ \-\-show\-parents ] -+.RB [ \-S , \ \-\-ns-changes ] - .RB [ \-u , \ \-\-uid\-changes ] - .RB [ \-Z , \ \-\-security\-context ] - .RB [ \-A , \ \-\-ascii , \ \-G , \ \-\-vt100 , \ \-U , \ \-\-unicode ] -@@ -134,6 +135,9 @@ process name. - implicitly disables compaction. - .IP \fB\-s\fP - Show parent processes of the specified process. -+.IP \fB\-S\fP -+Show namespaces transitions. Like \-N, the output is limited when running -+as a regular user. - .IP \fB\-u\fP - Show uid transitions. Whenever the uid of a process differs from the - uid of its parent, the new uid is shown in parentheses after the ---- psmisc-22.20.orig/src/pstree.c 2013-09-17 16:27:12.000000000 -0400 -+++ psmisc-22.20/src/pstree.c 2013-09-17 16:28:04.156698164 -0400 -@@ -133,7 +133,7 @@ static int *width = NULL; - 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; -+ show_parents = 0, by_pid = 0, trunc = 1, wait_end = 0, ns_change = 0; - #ifdef WITH_SELINUX - static int show_scontext = 0; - #endif /*WITH_SELINUX */ -@@ -545,11 +545,17 @@ if (pid != 0) { - static int tree_equal(const PROC * a, const PROC * b) - { - const CHILD *walk_a, *walk_b; -+ int i; - - if (strcmp(a->comm, b->comm)) - return 0; - if (user_change && a->uid != b->uid) - return 0; -+ if (ns_change) { -+ for (i = 0; i < NUM_NS; i++) -+ if (a->ns[i] != b->ns[i]) -+ return 0; -+ } - for (walk_a = a->children, walk_b = b->children; walk_a && walk_b; - walk_a = walk_a->next, walk_b = walk_b->next) - if (!tree_equal(walk_a->child, walk_b->child)) -@@ -630,6 +636,16 @@ if (swapped && current->argc < 0) - else - (void) out_int(current->uid); - } -+ if (ns_change && current->parent) { -+ for (i = 0; i < NUM_NS; i++) { -+ if (current->ns[i] == 0 || current->parent->ns[i] == 0) -+ continue; -+ if (current->ns[i] != current->parent->ns[i]) { -+ out_char(info++ ? ',' : '('); -+ out_string(get_ns_name(i)); -+ } -+ } -+ } - #ifdef WITH_SELINUX - if (show_scontext) { - out_char(info++ ? ',' : '('); -@@ -1002,6 +1018,7 @@ " -G, --vt100 use - " --ns-sort=type sort by namespace type (ipc, mnt, net, pid, user, uts)\n" - " -p, --show-pids show PIDs; implies -c\n" - " -s, --show-parents show parents of the selected process\n" -+ " -S, --ns-changes show namespace transitions\n" - " -u, --uid-changes show uid transitions\n" - " -U, --unicode use UTF-8 (Unicode) line drawing characters\n" - " -V, --version display version information\n")); -@@ -1054,6 +1071,7 @@ {"numeric-sort", 0, NULL, 'n'}, - {"show-pids", 0, NULL, 'p'}, - {"show-pgids", 0, NULL, 'g'}, - {"show-parents", 0, NULL, 's'}, -+ {"ns-changes", 0, NULL, 'S' }, - {"uid-changes", 0, NULL, 'u'}, - {"unicode", 0, NULL, 'U'}, - {"version", 0, NULL, 'V'}, -@@ -1106,11 +1124,11 @@ /* problems with VT100 on some t - - #ifdef WITH_SELINUX - while ((c = -- getopt_long(argc, argv, "aAcGhH:nN:pglsuUVZ", options, -+ getopt_long(argc, argv, "aAcGhH:nN:pglsSuUVZ", options, - NULL)) != -1) - #else /*WITH_SELINUX */ - while ((c = -- getopt_long(argc, argv, "aAcGhH:nN:pglsuUV", options, NULL)) != -1) -+ getopt_long(argc, argv, "aAcGhH:nN:pglsSuUV", options, NULL)) != -1) - #endif /*WITH_SELINUX */ - switch (c) { - case 'a': -@@ -1174,6 +1192,9 @@ compact = 0; - case 's': - show_parents = 1; - break; -+ case 'S': -+ ns_change = 1; -+ break; - case 'u': - user_change = 1; - break; diff --git a/pstree-introduce-support-for-namespaces.patch b/pstree-introduce-support-for-namespaces.patch deleted file mode 100644 index f327ac7..0000000 --- a/pstree-introduce-support-for-namespaces.patch +++ /dev/null @@ -1,295 +0,0 @@ -From c9f6f3e60d1770a95eb491dd503fdbe881ee8740 Mon Sep 17 00:00:00 2001 -From: Aristeu Rozanski -Date: Wed, 24 Apr 2013 15:32:35 -0400 -Subject: [PATCH 1/3] pstree: introduce support for namespaces - -Options -N and --ns-sort were added which require one of the namespaces: -ipc, mnt, net, pid, user, uts -and will show separated trees per namespace - -Signed-off-by: Aristeu Rozanski -Signed-off-by: Craig Small ---- - doc/pstree.1 | 6 ++ - src/pstree.c | 170 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- - 2 files changed, 173 insertions(+), 3 deletions(-) - ---- psmisc-22.20.orig/doc/pstree.1 2012-09-19 06:54:03.000000000 -0400 -+++ psmisc-22.20/doc/pstree.1 2013-09-17 16:26:00.210118465 -0400 -@@ -18,6 +18,7 @@ pstree \- display a tree of processes - .RB [ \-g ] \ \-\-show\-pgids ] - .RB [ \-l , \ \-\-long ] - .RB [ \-n , \ \-\-numeric\-sort ] -+.RB [ \-N , \ \-\-ns\-sort \fIns\fB - .RB [ \-p , \ \-\-show\-pids ] - .RB [ \-s , \ \-\-show\-parents ] - .RB [ \-u , \ \-\-uid\-changes ] -@@ -121,6 +122,11 @@ unknown. - .IP \fB\-n\fP - Sort processes with the same ancestor by PID instead of by name. - (Numeric sort.) -+.IP \fB\-N\fP -+Show individual trees for each namespace of the type specified. The -+available types are: ipc, mnt, net, pid, user, uts. Regular users don't -+have access to other users' processes information, so the output will be -+limited. - .IP \fB\-p\fP - Show PIDs. PIDs are shown as decimal numbers in parentheses after each - process name. ---- psmisc-22.20.orig/src/pstree.c 2013-09-17 16:25:01.000000000 -0400 -+++ psmisc-22.20/src/pstree.c 2013-09-17 16:27:12.356037690 -0400 -@@ -74,6 +74,8 @@ #define VT_END "\033(B" /* - #define VT_UR "m" - #define VT_HD "w" - -+#define NUM_NS 6 -+ - typedef struct _proc { - char comm[COMM_LEN + 2 + 1]; /* add another 2 for thread brackets */ - char **argv; /* only used : argv[0] is 1st arg; undef if argc < 1 */ -@@ -84,6 +86,7 @@ char **argv; /* only - #ifdef WITH_SELINUX - security_context_t scontext; - #endif /*WITH_SELINUX */ -+ ino_t ns[NUM_NS]; - char flags; - struct _child *children; - struct _proc *parent; -@@ -140,6 +143,133 @@ static char last_char = 0; - static int dumped = 0; /* used by dump_by_user */ - static int charlen = 0; /* length of character */ - -+enum ns_type { -+ IPCNS = 0, -+ MNTNS, -+ NETNS, -+ PIDNS, -+ USERNS, -+ UTSNS -+}; -+struct ns_entry; -+struct ns_entry { -+ ino_t number; -+ CHILD *children; -+ struct ns_entry *next; -+}; -+ -+static const char *ns_names[] = { -+ [IPCNS] = "ipc", -+ [MNTNS] = "mnt", -+ [NETNS] = "net", -+ [PIDNS] = "pid", -+ [USERNS] = "user", -+ [UTSNS] = "uts", -+}; -+ -+const char *get_ns_name(int id) { -+ if (id >= NUM_NS) -+ return NULL; -+ return ns_names[id]; -+} -+ -+static int get_ns_id(const char *name) { -+ int i; -+ -+ for (i = 0; i < NUM_NS; i++) -+ if (!strcmp(ns_names[i], name)) -+ return i; -+ return -1; -+} -+ -+static int verify_ns(int id) -+{ -+ char filename[50]; -+ struct stat s; -+ -+ snprintf(filename, 50, "/proc/%i/ns/%s", getpid(), get_ns_name(id)); -+ -+ return stat(filename, &s); -+} -+ -+static inline void new_proc_ns(PROC *ns_task) -+{ -+ struct stat st; -+ char buff[50]; -+ pid_t pid = ns_task->pid; -+ int i; -+ -+ for (i = 0; i < NUM_NS; i++) { -+ snprintf(buff, sizeof(buff), "/proc/%i/ns/%s", pid, -+ get_ns_name(i)); -+ if (stat(buff, &st)) { -+ ns_task->ns[i] = 0; -+ continue; -+ } -+ ns_task->ns[i] = st.st_ino; -+ } -+} -+ -+static void find_ns_and_add(struct ns_entry **root, PROC *r, enum ns_type id) -+{ -+ struct ns_entry *ptr, *last = NULL; -+ CHILD **c; -+ -+ for (ptr = *root; ptr; ptr = ptr->next) { -+ if (ptr->number == r->ns[id]) -+ break; -+ last = ptr; -+ } -+ -+ if (!ptr) { -+ ptr = malloc(sizeof(*ptr)); -+ memset(ptr, 0, sizeof(*ptr)); -+ ptr->number = r->ns[id]; -+ if (*root == NULL) -+ *root = ptr; -+ else -+ last->next = ptr; -+ } -+ -+ /* move the child to under the namespace's umbrella */ -+ for (c = &ptr->children; *c; c = &(*c)->next) -+ ; -+ *c = malloc(sizeof(CHILD)); -+ (*c)->child = r; -+ (*c)->next = NULL; -+ -+ /* detaching from parent */ -+ if (r->parent) { -+ for (c = &r->parent->children; *c; c = &(*c)->next) { -+ if ((*c)->child == r) { -+ *c = (*c)->next; -+ break; -+ } -+ } -+ r->parent = NULL; -+ } -+ -+} -+ -+static PROC *find_proc(pid_t pid); -+static void sort_by_namespace(PROC *r, enum ns_type id, struct ns_entry **root) -+{ -+ CHILD *walk; -+ -+ /* first run, find the first process */ -+ if (!r) { -+ r = find_proc(1); -+ if (!r) -+ return; -+ } -+ -+ if (r->parent == NULL || r->parent->ns[id] != r->ns[id]) -+ find_ns_and_add(root, r, id); -+ -+ for (walk = r->children; walk; walk = walk->next) -+ sort_by_namespace(walk->child, id, root); -+} -+ - #ifdef WITH_SELINUX - static void fix_orphans(security_context_t scontext); - #else -@@ -290,6 +420,7 @@ new->argc = 0; - new->children = NULL; - new->parent = NULL; - new->next = list; -+ new_proc_ns(new); - return list = new; - } - -@@ -624,6 +755,20 @@ dump_tree(current, 0, 1, 1, 1, u - dump_by_user(walk->child, uid); - } - -+static void dump_by_namespace(struct ns_entry *root) -+{ -+ struct ns_entry *ptr = root; -+ CHILD *c; -+ char buff[14]; -+ -+ for ( ; ptr; ptr = ptr->next) { -+ snprintf(buff, sizeof(buff), "[%li]\n", ptr->number); -+ out_string(buff); -+ for (c = ptr->children; c; c = c->next) -+ dump_tree(c->child, 0, 1, 1, 1, 0, 0); -+ } -+} -+ - static void trim_tree_by_parent(PROC * current) - { - if (!current) -@@ -853,6 +998,8 @@ static void usage(void) - " -G, --vt100 use VT100 line drawing characters\n" - " -l, --long don't truncate long lines\n" - " -n, --numeric-sort sort output by PID\n" -+ " -N type,\n" -+ " --ns-sort=type sort by namespace type (ipc, mnt, net, pid, user, uts)\n" - " -p, --show-pids show PIDs; implies -c\n" - " -s, --show-parents show parents of the selected process\n" - " -u, --uid-changes show uid transitions\n" -@@ -886,11 +1033,13 @@ int main(int argc, char **argv) - { - PROC *current; - struct winsize winsz; -+ struct ns_entry *nsroot = NULL; - const struct passwd *pw; - pid_t pid, highlight; - char termcap_area[1024]; - char *termname, *endptr; - int c, pid_set; -+ enum ns_type nsid = -1; - - struct option options[] = { - {"arguments", 0, NULL, 'a'}, -@@ -901,6 +1050,7 @@ {"highlight-all", 0, NULL, 'h'}, - {"highlight-pid", 1, NULL, 'H'}, - {"long", 0, NULL, 'l'}, - {"numeric-sort", 0, NULL, 'n'}, -+ {"ns-sort", 1, NULL, 'N' }, - {"show-pids", 0, NULL, 'p'}, - {"show-pgids", 0, NULL, 'g'}, - {"show-parents", 0, NULL, 's'}, -@@ -956,11 +1106,11 @@ /* problems with VT100 on some t - - #ifdef WITH_SELINUX - while ((c = -- getopt_long(argc, argv, "aAcGhH:npglsuUVZ", options, -+ getopt_long(argc, argv, "aAcGhH:nN:pglsuUVZ", options, - NULL)) != -1) - #else /*WITH_SELINUX */ - while ((c = -- getopt_long(argc, argv, "aAcGhH:npglsuUV", options, NULL)) != -1) -+ getopt_long(argc, argv, "aAcGhH:nN:pglsuUV", options, NULL)) != -1) - #endif /*WITH_SELINUX */ - switch (c) { - case 'a': -@@ -1002,6 +1152,17 @@ trunc = 0; - case 'n': - by_pid = 1; - break; -+ case 'N': -+ nsid = get_ns_id(optarg); -+ if (nsid == -1) -+ usage(); -+ if (verify_ns(nsid)) { -+ fprintf(stderr, -+ _("procfs file for %s namespace not available\n"), -+ optarg); -+ return 1; -+ } -+ break; - case 'p': - pids = 1; - compact = 0; -@@ -1059,7 +1220,10 @@ if (endptr[0] != '\0') - pid = ROOT_PID; - } - -- if (!pw) -+ if (nsid != -1) { -+ sort_by_namespace(NULL, nsid, &nsroot); -+ dump_by_namespace(nsroot); -+ } else if (!pw) - dump_tree(find_proc(pid), 0, 1, 1, 1, 0, 0); - else { - dump_by_user(find_proc(ROOT_PID), pw->pw_uid); diff --git a/sources b/sources index 12be186..2f1e444 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -a25fc99a6dc7fa7ae6e4549be80b401f psmisc-22.20.tar.gz +f73645dd5dabea7125573a197a879164 psmisc-22.21.tar.gz