On Sat, 21 Apr 2012, Cristian Ionescu-Idbohrn wrote:
>
> The 'Program name' part is fetched from /proc/<pid>/cmdline, then mangled
> before presentation.  Mangling is done in netstat.c, function 'dir_act'.
> The function assumes cmdline is a file path and extracts the basename.
> Obviously that assumption is not always correct.  It's not unusual a
> cmdline looks like this:
>
>       sshd: foo@pts/48
>
> or like this:
>
>       sshd: foo [priv]
>
> Function 'bb_basename' uses strrchr everything up to and including the
> last occurrence och character '/'.  The result is (see first example
> above):
>
>       PID/Program name
>       12345/48
>
> or (second example):
>
>       PID/Program name
>       12345/sshd: foo [priv]
>
> Neither is desirable.
> I'd like to propose a different way to do that:
>
> 1. strip everything after and including the first whitespace character
> 2. maybe remove even odd ':' character at the end of the string
> 3. call bb_basename after that
>
> Output would then look like:
>
>       PID/Program name
>       12345/sshd
>
> which is what one would expect.
>
> Thoughts?

Would this fit in somewhere?

[PATCH] Mangle 'Program name' to show the right thing.

Signed-off-by: Cristian Ionescu-Idbohrn <[email protected]>
---
 networking/netstat.c |    8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/networking/netstat.c b/networking/netstat.c
index 9c23957..31131cd 100644
--- a/networking/netstat.c
+++ b/networking/netstat.c
@@ -288,6 +288,14 @@ static int FAST_FUNC dir_act(const char *fileName,
        if (n < 0)
                return FALSE;
        cmdline_buf[n] = '\0';
+       {
+               char *cp = strchr(cmdline_buf, ' ');
+               if (cp)
+                       *cp = '\0';
+               cp = strrchr(cmdline_buf, ':');
+               if (cp)
+                       *cp = '\0';
+       }

        /* go through all files in /proc/PID/fd and check whether they are 
sockets */
        strcpy(proc_pid_fname + len - (sizeof("cmdline")-1), "fd");
-- 
1.7.10


Cheers,

-- 
Cristian
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to