Blame SOURCES/pstree-introduce-namespace-transition-information.patch

6691f2
From 29ac10530c97631d76aa34b2d2ed018ded60d6bf Mon Sep 17 00:00:00 2001
6691f2
From: Aristeu Rozanski <arozansk@redhat.com>
6691f2
Date: Thu, 25 Apr 2013 11:35:15 -0400
6691f2
Subject: [PATCH 2/3] pstree: introduce namespace transition information
6691f2
6691f2
This patch adds a new option (-S, --ns-change) that will show
6691f2
when a namespace was changed compared to parent's.
6691f2
6691f2
Signed-off-by: Aristeu Rozanski <arozansk@redhat.com>
6691f2
Signed-off-by: Craig Small <csmall@enc.com.au>
6691f2
---
6691f2
 doc/pstree.1 |    4 ++++
6691f2
 src/pstree.c |   27 ++++++++++++++++++++++++---
6691f2
 2 files changed, 28 insertions(+), 3 deletions(-)
6691f2
6691f2
--- psmisc-22.20.orig/doc/pstree.1	2013-09-17 16:26:00.000000000 -0400
6691f2
+++ psmisc-22.20/doc/pstree.1	2013-09-17 16:27:22.510167111 -0400
6691f2
@@ -21,6 +21,7 @@ pstree \- display a tree of processes
6691f2
 .RB [ \-N  , \ \-\-ns\-sort \fIns\fB
6691f2
 .RB [ \-p  , \ \-\-show\-pids ]
6691f2
 .RB [ \-s  , \ \-\-show\-parents ]
6691f2
+.RB [ \-S  , \ \-\-ns-changes ]
6691f2
 .RB [ \-u  , \ \-\-uid\-changes ]
6691f2
 .RB [ \-Z  , \ \-\-security\-context ]
6691f2
 .RB [ \-A  , \ \-\-ascii  , \ \-G  , \ \-\-vt100  , \ \-U  , \ \-\-unicode ]
6691f2
@@ -134,6 +135,9 @@ process name.
6691f2
 implicitly disables compaction.
6691f2
 .IP \fB\-s\fP
6691f2
 Show parent processes of the specified process.
6691f2
+.IP \fB\-S\fP
6691f2
+Show namespaces transitions.  Like \-N, the output is limited when running
6691f2
+as a regular user.
6691f2
 .IP \fB\-u\fP
6691f2
 Show uid transitions.  Whenever the uid of a process differs from the
6691f2
 uid of its parent, the new uid is shown in parentheses after the
6691f2
--- psmisc-22.20.orig/src/pstree.c	2013-09-17 16:27:12.000000000 -0400
6691f2
+++ psmisc-22.20/src/pstree.c	2013-09-17 16:28:04.156698164 -0400
6691f2
@@ -133,7 +133,7 @@ static int *width = NULL;
6691f2
 static int *more = NULL;
6691f2
 
6691f2
 static int print_args = 0, compact = 1, user_change = 0, pids = 0, pgids = 0,
6691f2
-    show_parents = 0, by_pid = 0, trunc = 1, wait_end = 0;
6691f2
+    show_parents = 0, by_pid = 0, trunc = 1, wait_end = 0, ns_change = 0;
6691f2
 #ifdef WITH_SELINUX
6691f2
 static int show_scontext = 0;
6691f2
 #endif                                /*WITH_SELINUX */
6691f2
@@ -545,11 +545,17 @@     if (pid != 0) {
6691f2
 static int tree_equal(const PROC * a, const PROC * b)
6691f2
 {
6691f2
     const CHILD *walk_a, *walk_b;
6691f2
+    int i;
6691f2
 
6691f2
     if (strcmp(a->comm, b->comm))
6691f2
         return 0;
6691f2
     if (user_change && a->uid != b->uid)
6691f2
         return 0;
6691f2
+    if (ns_change) {
6691f2
+        for (i = 0; i < NUM_NS; i++)
6691f2
+            if (a->ns[i] != b->ns[i])
6691f2
+                return 0;
6691f2
+    }
6691f2
     for (walk_a = a->children, walk_b = b->children; walk_a && walk_b;
6691f2
          walk_a = walk_a->next, walk_b = walk_b->next)
6691f2
         if (!tree_equal(walk_a->child, walk_b->child))
6691f2
@@ -630,6 +636,16 @@     if (swapped && current->argc < 0)
6691f2
         else
6691f2
             (void) out_int(current->uid);
6691f2
     }
6691f2
+    if (ns_change && current->parent) {
6691f2
+        for (i = 0; i < NUM_NS; i++) {
6691f2
+            if (current->ns[i] == 0 || current->parent->ns[i] == 0)
6691f2
+                continue;
6691f2
+            if (current->ns[i] != current->parent->ns[i]) {
6691f2
+                out_char(info++ ? ',' : '(');
6691f2
+                out_string(get_ns_name(i));
6691f2
+            }
6691f2
+        }
6691f2
+    }
6691f2
 #ifdef WITH_SELINUX
6691f2
     if (show_scontext) {
6691f2
         out_char(info++ ? ',' : '(');
6691f2
@@ -1002,6 +1018,7 @@              "  -G, --vt100         use 
6691f2
              "  --ns-sort=type      sort by namespace type (ipc, mnt, net, pid, user, uts)\n"
6691f2
              "  -p, --show-pids     show PIDs; implies -c\n"
6691f2
              "  -s, --show-parents  show parents of the selected process\n"
6691f2
+             "  -S, --ns-changes    show namespace transitions\n"
6691f2
              "  -u, --uid-changes   show uid transitions\n"
6691f2
              "  -U, --unicode       use UTF-8 (Unicode) line drawing characters\n"
6691f2
              "  -V, --version       display version information\n"));
6691f2
@@ -1054,6 +1071,7 @@         {"numeric-sort", 0, NULL, 'n'},
6691f2
         {"show-pids", 0, NULL, 'p'},
6691f2
         {"show-pgids", 0, NULL, 'g'},
6691f2
         {"show-parents", 0, NULL, 's'},
6691f2
+        {"ns-changes", 0, NULL, 'S' },
6691f2
         {"uid-changes", 0, NULL, 'u'},
6691f2
         {"unicode", 0, NULL, 'U'},
6691f2
         {"version", 0, NULL, 'V'},
6691f2
@@ -1106,11 +1124,11 @@         /* problems with VT100 on some t
6691f2
 
6691f2
 #ifdef WITH_SELINUX
6691f2
     while ((c =
6691f2
-            getopt_long(argc, argv, "aAcGhH:nN:pglsuUVZ", options,
6691f2
+            getopt_long(argc, argv, "aAcGhH:nN:pglsSuUVZ", options,
6691f2
                         NULL)) != -1)
6691f2
 #else                                /*WITH_SELINUX */
6691f2
     while ((c =
6691f2
-            getopt_long(argc, argv, "aAcGhH:nN:pglsuUV", options, NULL)) != -1)
6691f2
+            getopt_long(argc, argv, "aAcGhH:nN:pglsSuUV", options, NULL)) != -1)
6691f2
 #endif                                /*WITH_SELINUX */
6691f2
         switch (c) {
6691f2
         case 'a':
6691f2
@@ -1174,6 +1192,9 @@             compact = 0;
6691f2
         case 's':
6691f2
             show_parents = 1;
6691f2
             break;
6691f2
+        case 'S':
6691f2
+            ns_change = 1;
6691f2
+            break;
6691f2
         case 'u':
6691f2
             user_change = 1;
6691f2
             break;