Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/w Use new sysctl/kvm interfaces and remove sgid bit.



details:   https://anonhg.NetBSD.org/src/rev/08bdc7798db2
branches:  trunk
changeset: 486586:08bdc7798db2
user:      simonb <simonb%NetBSD.org@localhost>
date:      Fri May 26 03:10:31 2000 +0000

description:
Use new sysctl/kvm interfaces and remove sgid bit.

diffstat:

 usr.bin/w/Makefile       |   4 +--
 usr.bin/w/extern.h       |   6 ++--
 usr.bin/w/proc_compare.c |   8 +++---
 usr.bin/w/w.c            |  52 +++++++++++++++--------------------------------
 4 files changed, 25 insertions(+), 45 deletions(-)

diffs (201 lines):

diff -r 825f62378bc6 -r 08bdc7798db2 usr.bin/w/Makefile
--- a/usr.bin/w/Makefile        Fri May 26 03:04:28 2000 +0000
+++ b/usr.bin/w/Makefile        Fri May 26 03:10:31 2000 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: Makefile,v 1.14 1999/09/12 01:19:26 chs Exp $
+#      $NetBSD: Makefile,v 1.15 2000/05/26 03:10:31 simonb Exp $
 #      @(#)Makefile    8.1 (Berkeley) 6/6/93
 
 PROG=  w
@@ -6,8 +6,6 @@
 MAN=   w.1 uptime.1
 DPADD= ${LIBKVM}
 LDADD= -lkvm
-BINGRP=        kmem
-BINMODE=2555
 LINKS= ${BINDIR}/w ${BINDIR}/uptime
 
 .PATH: ${.CURDIR}/../../bin/ps
diff -r 825f62378bc6 -r 08bdc7798db2 usr.bin/w/extern.h
--- a/usr.bin/w/extern.h        Fri May 26 03:04:28 2000 +0000
+++ b/usr.bin/w/extern.h        Fri May 26 03:10:31 2000 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: extern.h,v 1.3 1996/06/07 01:39:16 thorpej Exp $       */
+/*     $NetBSD: extern.h,v 1.4 2000/05/26 03:10:31 simonb Exp $        */
 
 /*-
  * Copyright (c) 1993
@@ -35,9 +35,9 @@
  *     @(#)extern.h    8.1 (Berkeley) 6/6/93
  */
 
-struct proc;
+struct kinfo_proc2;
 void   fmt_puts __P((char *, int *));
 void   fmt_putc __P((int, int *));
 void   pr_attime __P((time_t *, time_t *));
 void   pr_idle __P((time_t));
-int    proc_compare __P((struct proc *, struct proc *));
+int    proc_compare __P((struct kinfo_proc2 *, struct kinfo_proc2 *));
diff -r 825f62378bc6 -r 08bdc7798db2 usr.bin/w/proc_compare.c
--- a/usr.bin/w/proc_compare.c  Fri May 26 03:04:28 2000 +0000
+++ b/usr.bin/w/proc_compare.c  Fri May 26 03:10:31 2000 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: proc_compare.c,v 1.8 2000/05/26 00:44:27 thorpej Exp $ */
+/*     $NetBSD: proc_compare.c,v 1.9 2000/05/26 03:10:31 simonb Exp $  */
 
 /*-
  * Copyright (c) 1990, 1993
@@ -38,13 +38,13 @@
 #if 0
 static char sccsid[] = "@(#)proc_compare.c     8.2 (Berkeley) 9/23/93";
 #else
-__RCSID("$NetBSD: proc_compare.c,v 1.8 2000/05/26 00:44:27 thorpej Exp $");
+__RCSID("$NetBSD: proc_compare.c,v 1.9 2000/05/26 03:10:31 simonb Exp $");
 #endif
 #endif /* not lint */
 
 #include <sys/param.h>
 #include <sys/time.h>
-#include <sys/proc.h>
+#include <sys/sysctl.h>
 
 #include "extern.h"
 
@@ -76,7 +76,7 @@
 
 int
 proc_compare(p1, p2)
-       struct proc *p1, *p2;
+       struct kinfo_proc2 *p1, *p2;
 {
 
        if (p1 == NULL)
diff -r 825f62378bc6 -r 08bdc7798db2 usr.bin/w/w.c
--- a/usr.bin/w/w.c     Fri May 26 03:04:28 2000 +0000
+++ b/usr.bin/w/w.c     Fri May 26 03:10:31 2000 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: w.c,v 1.34 1999/11/29 11:15:13 pk Exp $        */
+/*     $NetBSD: w.c,v 1.35 2000/05/26 03:10:31 simonb Exp $    */
 
 /*-
  * Copyright (c) 1980, 1991, 1993, 1994
@@ -43,7 +43,7 @@
 #if 0
 static char sccsid[] = "@(#)w.c        8.6 (Berkeley) 6/30/94";
 #else
-__RCSID("$NetBSD: w.c,v 1.34 1999/11/29 11:15:13 pk Exp $");
+__RCSID("$NetBSD: w.c,v 1.35 2000/05/26 03:10:31 simonb Exp $");
 #endif
 #endif /* not lint */
 
@@ -105,12 +105,12 @@
 struct entry {
        struct  entry *next;
        struct  utmp utmp;
-       dev_t   tdev;           /* dev_t of terminal */
-       time_t  idle;           /* idle time of terminal in seconds */
-       struct  kinfo_proc *kp; /* `most interesting' proc */
+       dev_t   tdev;                   /* dev_t of terminal */
+       time_t  idle;                   /* idle time of terminal in seconds */
+       struct  kinfo_proc2 *kp;        /* `most interesting' proc */
 } *ep, *ehead = NULL, **nextp = &ehead;
 
-static void     pr_args __P((struct kinfo_proc *));
+static void     pr_args __P((struct kinfo_proc2 *));
 static void     pr_header __P((time_t *, int));
 static struct stat
                *ttystat __P((char *));
@@ -123,18 +123,15 @@
        char **argv;
 {
        extern char *__progname;
-       struct kinfo_proc *kp;
+       struct kinfo_proc2 *kp;
        struct hostent *hp;
        struct stat *stp;
        FILE *ut;
        struct in_addr l;
        int ch, i, nentries, nusers, wcmd;
-       gid_t egid = getegid();
        char *memf, *nlistf, *p, *x;
        char buf[MAXHOSTNAMELEN], errbuf[_POSIX2_LINE_MAX];
 
-       (void)setegid(getgid());
-
        /* Are we w(1) or uptime(1)? */
        p = __progname;
        if (*p == '-')
@@ -176,24 +173,10 @@
        argc -= optind;
        argv += optind;
 
-       /*
-        * Discard setgid privileges.  If not the running kernel, we toss
-        * them away totally so that bad guys can't print interesting stuff
-        * from kernel memory, otherwise switch back to kmem for the
-        * duration of the kvm_openfiles() call.
-        */
-       if (nlistf != NULL || memf != NULL)
-               (void)setgid(getgid());
-       else
-               (void)setegid(egid);
-
-       if ((kd = kvm_openfiles(nlistf, memf, NULL, O_RDONLY, errbuf)) == NULL)
+       if ((kd = kvm_openfiles(nlistf, memf, NULL,
+           memf == NULL ? KVM_NO_FILES : O_RDONLY, errbuf)) == NULL)
                errx(1, "%s", errbuf);
 
-       /* get rid of it now anyway */
-       if (nlistf == NULL && memf == NULL)
-               (void)setgid(getgid());
-
        (void)time(&now);
        if ((ut = fopen(_PATH_UTMP, "r")) == NULL)
                err(1, "%s", _PATH_UTMP);
@@ -246,21 +229,20 @@
 #define WUSED  (sizeof (HEADER) - sizeof ("WHAT\n"))
        (void)printf(HEADER);
 
-       if ((kp = kvm_getprocs(kd, KERN_PROC_ALL, 0, &nentries)) == NULL)
+       if ((kp = kvm_getproc2(kd, KERN_PROC_ALL, 0, sizeof(struct kinfo_proc),
+           &nentries)) == NULL)
                errx(1, "%s", kvm_geterr(kd));
        for (i = 0; i < nentries; i++, kp++) {
-               struct proc *p = &kp->kp_proc;
-               struct eproc *e;
 
-               if (p->p_stat == SIDL || p->p_stat == SZOMB)
+               if (kp->p_stat == SIDL || kp->p_stat == SZOMB)
                        continue;
-               e = &kp->kp_eproc;
                for (ep = ehead; ep != NULL; ep = ep->next) {
-                       if (ep->tdev == e->e_tdev && e->e_pgid == e->e_tpgid) {
+                       if (ep->tdev == kp->p_tdev &&
+                           kp->p__pgid == kp->p_tpgid) {
                                /*
                                 * Proc is in foreground of this terminal
                                 */
-                               if (proc_compare(&ep->kp->kp_proc, p))
+                               if (proc_compare(ep->kp, kp))
                                        ep->kp = kp;
                                break;
                        }
@@ -345,7 +327,7 @@
 
 static void
 pr_args(kp)
-       struct kinfo_proc *kp;
+       struct kinfo_proc2 *kp;
 {
        char **argv;
        int left;
@@ -353,7 +335,7 @@
        if (kp == 0)
                goto nothing;
        left = argwidth;
-       argv = kvm_getargv(kd, kp, argwidth);
+       argv = kvm_getargv2(kd, kp, argwidth);
        if (argv == 0)
                goto nothing;
        while (*argv) {



Home | Main Index | Thread Index | Old Index