From 67bc433c17e4041e495eeba10f58680758651e6d Mon Sep 17 00:00:00 2001 From: Jan Rybar Date: Fri, 9 Feb 2018 18:17:36 +0100 Subject: [PATCH] ps: LUID format option impelemented --- ps/output.c | 30 +++++++++++++++++++++++++++++- ps/ps.1 | 4 ++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/ps/output.c b/ps/output.c index 573666c6..21839389 100644 --- a/ps/output.c +++ b/ps/output.c @@ -1213,6 +1213,34 @@ static int pr_sgi_p(char *restrict const outbuf, const proc_t *restrict const pp return snprintf(outbuf, COLWID, "*"); } +/* LoginID implementation */ +static int pr_luid(char *restrict const outbuf, const proc_t *restrict const pp){ + char filename[48]; + ssize_t num_read; + int fd; + u_int32_t luid; + + snprintf(filename, sizeof filename, "/proc/%d/loginuid", pp->tgid); + + if ((fd = open(filename, O_RDONLY, 0)) != -1) { + num_read = read(fd, outbuf, OUTBUF_SIZE - 1); + close(fd); + if (num_read > 0) { + outbuf[num_read] = '\0'; + + // processes born before audit have no LoginID set + luid = (u_int32_t) atoi(outbuf); + if (luid != -1) + return num_read; + } + } + outbuf[0] = '-'; + outbuf[1] = '\0'; + num_read = 1; + return num_read; +} + + /************************* Systemd stuff ********************************/ static int pr_sd_unit(char *restrict const outbuf, const proc_t *restrict const pp){ return snprintf(outbuf, COLWID, "%s", pp->sd_unit); @@ -1526,7 +1554,7 @@ static const format_struct format_array[] = { {"longtname", "TTY", pr_tty8, sr_tty, 8, 0, DEC, PO|LEFT}, {"lsession", "SESSION", pr_sd_session, sr_nop, 11, SD, LNX, ET|LEFT}, {"lstart", "STARTED", pr_lstart, sr_nop, 24, 0, XXX, ET|RIGHT}, -{"luid", "LUID", pr_nop, sr_nop, 5, 0, LNX, ET|RIGHT}, /* login ID */ +{"luid", "LUID", pr_luid, sr_nop, 5, 0, LNX, ET|RIGHT}, /* login ID */ {"luser", "LUSER", pr_nop, sr_nop, 8, USR, LNX, ET|USER}, /* login USER */ {"lwp", "LWP", pr_tasks, sr_tasks, 5, 0, SUN, TO|PIDMAX|RIGHT}, {"lxc", "LXC", pr_lxcname, sr_lxcname, 8, LXC, LNX, ET|LEFT}, diff --git a/ps/ps.1 b/ps/ps.1 index c16d00db..e239f942 100644 --- a/ps/ps.1 +++ b/ps/ps.1 @@ -1329,6 +1329,10 @@ displays the login session identifier of a process, if systemd support has been included. T} +luid LUID T{ +displays Login ID associated with a process. +T} + lwp LWP T{ light weight process (thread) ID of the dispatchable entity (alias .BR spid , \ tid ).