From owner-freebsd-bugs Tue Apr 13 16:52:23 1999 Delivered-To: freebsd-bugs@freebsd.org Received: from freefall.freebsd.org (freefall.FreeBSD.ORG [204.216.27.21]) by hub.freebsd.org (Postfix) with ESMTP id A33E314D2C for ; Tue, 13 Apr 1999 16:52:20 -0700 (PDT) (envelope-from gnats@FreeBSD.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.9.2/8.9.2) id QAA40542; Tue, 13 Apr 1999 16:50:01 -0700 (PDT) (envelope-from gnats@FreeBSD.org) Received: from byzantine.student.umd.edu (byzantine.student.umd.edu [129.2.152.63]) by hub.freebsd.org (Postfix) with ESMTP id 5F53E14CE9 for ; Tue, 13 Apr 1999 16:47:28 -0700 (PDT) (envelope-from howardjp@byzantine.student.umd.edu) Received: (from howardjp@localhost) by byzantine.student.umd.edu (8.9.3/8.9.2) id TAA03155; Tue, 13 Apr 1999 19:54:17 GMT (envelope-from howardjp) Message-Id: <199904131954.TAA03155@byzantine.student.umd.edu> Date: Tue, 13 Apr 1999 19:54:17 GMT From: James Howard Reply-To: howardjp@byzantine.student.umd.edu To: FreeBSD-gnats-submit@freebsd.org X-Send-Pr-Version: 3.2 Subject: bin/11121: w(1) cannot handle more than one user on command line Sender: owner-freebsd-bugs@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org >Number: 11121 >Category: bin >Synopsis: w(1) cannot handle more than one user on command line >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Tue Apr 13 16:50:01 PDT 1999 >Closed-Date: >Last-Modified: >Originator: James Howard >Release: FreeBSD 3.1-RELEASE i386 >Organization: University of Maryland >Environment: FreeBSD byzantine.student.umd.edu 3.1-RELEASE FreeBSD 3.1-RELEASE #0: Mon Feb 15 11:08:08 GMT 1999 jkh@usw3.freebsd.org:/usr/src/sys/compile/GENERIC i386 >Description: For years, I have wanted w(1) to be able to handle a command line with multiple user names listed. When presented with multiple users, it will only present information on the first. >How-To-Repeat: % w user1 user2 >Fix: This isn't very pretty, but it does work. Apply this patch to /usr/src/usr.bin/w and it will update w.c and w.1. diff -c -r /usr/src/usr.bin/w/w.1 w/w.1 *** /usr/src/usr.bin/w/w.1 Sun Mar 22 17:39:08 1998 --- w/w.1 Tue Apr 13 17:34:05 1999 *************** *** 43,49 **** .Op Fl dhin .Op Fl M Ar core .Op Fl N Ar system ! .Op Ar user .Sh DESCRIPTION The .Nm --- 43,49 ---- .Op Fl dhin .Op Fl M Ar core .Op Fl N Ar system ! .Op Ar user ... .Sh DESCRIPTION The .Nm *************** *** 83,91 **** interprets addresses and attempts to display them symbolically). .El .Pp ! If a .Ar user ! name is specified, the output is restricted to that user. .Sh FILES .Bl -tag -width /var/run/utmp -compact .It Pa /var/run/utmp --- 83,91 ---- interprets addresses and attempts to display them symbolically). .El .Pp ! If .Ar user ! names are specified, the output is restricted to those users. .Sh FILES .Bl -tag -width /var/run/utmp -compact .It Pa /var/run/utmp diff -c -r /usr/src/usr.bin/w/w.c w/w.c *** /usr/src/usr.bin/w/w.c Sun Jan 10 15:28:37 1999 --- w/w.c Tue Apr 13 18:06:25 1999 *************** *** 98,104 **** int nflag; /* true if -n flag: don't convert addrs */ int dflag; /* true if -d flag: output debug info */ int sortidle; /* sort by idle time */ - char *sel_user; /* login of particular user selected */ char domain[MAXHOSTNAMELEN]; /* --- 98,103 ---- *************** *** 135,141 **** FILE *ut; u_long l; size_t arglen; ! int ch, i, nentries, nusers, wcmd, longidle; char *memf, *nlistf, *p, *x; char buf[MAXHOSTNAMELEN], errbuf[256]; --- 134,140 ---- FILE *ut; u_long l; size_t arglen; ! int ch, i, nentries, nusers, wcmd, longidle, uflag; char *memf, *nlistf, *p, *x; char buf[MAXHOSTNAMELEN], errbuf[256]; *************** *** 201,218 **** if ((ut = fopen(_PATH_UTMP, "r")) == NULL) err(1, "%s", _PATH_UTMP); - if (*argv) - sel_user = *argv; - for (nusers = 0; fread(&utmp, sizeof(utmp), 1, ut);) { if (utmp.ut_name[0] == '\0') continue; if (!(stp = ttystat(utmp.ut_line))) /* corrupted record */ continue; ++nusers; ! if (wcmd == 0 || (sel_user && ! strncmp(utmp.ut_name, sel_user, UT_NAMESIZE) != 0)) ! continue; if ((ep = calloc(1, sizeof(struct entry))) == NULL) errx(1, "calloc"); *nextp = ep; --- 200,222 ---- if ((ut = fopen(_PATH_UTMP, "r")) == NULL) err(1, "%s", _PATH_UTMP); for (nusers = 0; fread(&utmp, sizeof(utmp), 1, ut);) { if (utmp.ut_name[0] == '\0') continue; if (!(stp = ttystat(utmp.ut_line))) /* corrupted record */ continue; ++nusers; ! if(*argv) ! uflag = 0; ! else ! uflag = 1; ! for (i = 0; i < argc; i++) { ! if (wcmd == 0 || (argv[i] && ! strncmp(utmp.ut_name, argv[i], UT_NAMESIZE) == 0)) ! uflag = 1; ! } ! if(!uflag) ! continue; if ((ep = calloc(1, sizeof(struct entry))) == NULL) errx(1, "calloc"); *nextp = ep; >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message