From 785776c10d38b3c6773b15ac7017327c4fa3a01b Mon Sep 17 00:00:00 2001 From: Lukas Nykryn Date: Wed, 17 Apr 2013 10:32:50 +0200 Subject: [PATCH] ps: possibility to display uid of session owner for a process Library systemd-login offers possibility to display the Unix user identifier of the owner of the session of a process. This information will also be displayed for user processes which are shared between multiple login sessions of the same user, where sd_session will be blank. This patch adds output option "sd_ouid" which will show user UID or "-", when there is no owner for a process. To maintain compatibility with non-systemd systems, procps must be configured with --with-systemd option to enable this option. --- ps/output.c | 16 ++++++++++++++++ ps/ps.1 | 4 ++++ 2 files changed, 20 insertions(+) diff --git a/ps/output.c b/ps/output.c index f1cf6bc0..012f5b69 100644 --- a/ps/output.c +++ b/ps/output.c @@ -1209,6 +1209,21 @@ fail: return 1; } +static int pr_sd_ouid(char *restrict const outbuf, const proc_t *restrict const pp){ + int r; + size_t len; + uid_t ouid; + + r = sd_pid_get_owner_uid(pp->tgid, &ouid); + if(r<0) goto fail; + return snprintf(outbuf, COLWID, "%d", ouid); + +fail: + outbuf[0] = '-'; + outbuf[1] = '\0'; + return 1; +} + #endif /****************** FLASK & seLinux security stuff **********************/ @@ -1538,6 +1553,7 @@ static const format_struct format_array[] = { {"scnt", "SCNT", pr_nop, sr_nop, 4, 0, DEC, AN|RIGHT}, /* man page misspelling of scount? */ {"scount", "SC", pr_nop, sr_nop, 4, 0, AIX, AN|RIGHT}, /* scnt==scount, DEC claims both */ #ifdef WITH_SYSTEMD +{"sd_ouid", "OWNER", pr_sd_ouid, sr_nop, 5, 0, LNX, ET|LEFT}, {"sd_session","SESSION", pr_sd_session, sr_nop, 11, 0, LNX, ET|LEFT}, {"sd_unit", "UNIT", pr_sd_unit, sr_nop, 31, 0, LNX, ET|LEFT}, #endif diff --git a/ps/ps.1 b/ps/ps.1 index f953e23a..7d2ce73f 100644 --- a/ps/ps.1 +++ b/ps/ps.1 @@ -1489,6 +1489,10 @@ SCHED_FIFO, SCHED_RR, SCHED_BATCH, SCHED_ISO, and SCHED_IDLE are respectively displayed as 0, 1, 2, 3, 4, and 5. T} +sd_ouid OWNER T{ +displays the Unix user identifier of the owner of the session of a process. +T} + sd_session SESSION T{ displays login session identifier of a process. T}