/bin/ps: Implement reporting of supplemental groups
authorchrisz <chrisz@openbsd.org>
Sat, 28 Aug 2021 20:54:54 +0000 (20:54 +0000)
committerchrisz <chrisz@openbsd.org>
Sat, 28 Aug 2021 20:54:54 +0000 (20:54 +0000)
with help from sthen@ and tim@. OK tim@

bin/ps/extern.h
bin/ps/keyword.c
bin/ps/print.c
bin/ps/ps.1

index 74fffc1..2b27c81 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: extern.h,v 1.21 2019/06/23 17:18:50 deraadt Exp $     */
+/*     $OpenBSD: extern.h,v 1.22 2021/08/28 20:54:54 chrisz Exp $      */
 /*     $NetBSD: extern.h,v 1.10 1995/05/21 13:38:27 mycroft Exp $      */
 
 /*-
@@ -52,6 +52,8 @@ void   elapsed(const struct kinfo_proc *, VARENT *);
 double  getpcpu(const struct kinfo_proc *);
 double  getpmem(const struct kinfo_proc *);
 void    gname(const struct kinfo_proc *, VARENT *);
+void    supgid(const struct kinfo_proc *, VARENT *);
+void    supgrp(const struct kinfo_proc *, VARENT *);
 void    logname(const struct kinfo_proc *, VARENT *);
 void    longtname(const struct kinfo_proc *, VARENT *);
 void    lstarted(const struct kinfo_proc *, VARENT *);
index 60d7a87..2600dd0 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: keyword.c,v 1.47 2019/06/23 17:18:50 deraadt Exp $    */
+/*     $OpenBSD: keyword.c,v 1.48 2021/08/28 20:54:54 chrisz Exp $     */
 /*     $NetBSD: keyword.c,v 1.12.6.1 1996/05/30 21:25:13 cgd Exp $     */
 
 /*-
@@ -168,6 +168,8 @@ VAR var[] = {
        {"start", "STARTED", NULL, LJUST|USER, started, 8},
        {"stat", "", "state"},
        {"state", "STAT", NULL, LJUST|NLIST, printstate, 6},
+       {"supgid", "SUPGID", NULL, LJUST, supgid, 64},
+       {"supgrp", "SUPGRP", NULL, LJUST, supgrp, 64},
        GID("svgid", "SVGID", pvar, POFF(p_svgid)),
        UID("svuid", "SVUID", pvar, POFF(p_svuid)),
        {"tdev", "TDEV", NULL, 0, tdev, 4},
index b92fb80..d929d98 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: print.c,v 1.76 2021/04/05 00:51:14 kn Exp $   */
+/*     $OpenBSD: print.c,v 1.77 2021/08/28 20:54:54 chrisz Exp $       */
 /*     $NetBSD: print.c,v 1.27 1995/09/29 21:58:12 cgd Exp $   */
 
 /*-
@@ -368,6 +368,48 @@ rgname(const struct kinfo_proc *kp, VARENT *ve)
            ve->next != NULL);
 }
 
+void
+supgid(const struct kinfo_proc *kp, VARENT *ve)
+{
+       char buf[1024];
+       char *p = buf;
+       ssize_t size = sizeof(buf);
+       int i, len;
+
+       for (i = 0; i < kp->p_ngroups; i++) {
+               len = snprintf(p, size, "%s%u",
+                   p == buf ? "" : ",",
+                   kp->p_groups[i]);
+               if (len < 0 || len >= size)
+                       break;
+               p += len;
+               size -= len;
+       }
+
+       (void)printf("%-*s", ve->var->width, buf);
+}
+
+void
+supgrp(const struct kinfo_proc *kp, VARENT *ve)
+{
+       char buf[1024];
+       char *p = buf;
+       ssize_t size = sizeof(buf);
+       int i, len;
+
+       for (i = 0; i < kp->p_ngroups; i++) {
+               len = snprintf(p, size, "%s%s",
+                   p == buf ? "" : ",",
+                   group_from_gid(kp->p_groups[i], 0));
+               if (len < 0 || len >= size)
+                       break;
+               p += len;
+               size -= len;
+       }
+
+       (void)printf("%-*s", ve->var->width, buf);
+}
+
 void
 tdev(const struct kinfo_proc *kp, VARENT *ve)
 {
index 7593eaf..4415a34 100644 (file)
@@ -1,4 +1,4 @@
-.\"    $OpenBSD: ps.1,v 1.117 2020/02/08 16:41:25 schwarze Exp $
+.\"    $OpenBSD: ps.1,v 1.118 2021/08/28 20:54:54 chrisz Exp $
 .\"    $NetBSD: ps.1,v 1.16 1996/03/21 01:36:28 jtc Exp $
 .\"
 .\" Copyright (c) 1980, 1990, 1991, 1993, 1994
@@ -30,7 +30,7 @@
 .\"
 .\"     @(#)ps.1       8.3 (Berkeley) 4/18/94
 .\"
-.Dd $Mdocdate: February 8 2020 $
+.Dd $Mdocdate: August 28 2021 $
 .Dt PS 1
 .Os
 .Sh NAME
@@ -487,6 +487,10 @@ The process is being traced or debugged.
 On multiprocessor machines, specifies processor number
 .Ar n .
 .El
+.It Cm supgid
+Group IDs of supplementary groups.
+.It Cm supgrp
+Group names of supplementary groups.
 .It Cm svgid
 Saved GID from a setgid executable.
 .It Cm svuid