From owner-freebsd-bugs@FreeBSD.ORG Fri Feb 27 10:03:36 2004 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id A551416A4CE for ; Fri, 27 Feb 2004 10:03:36 -0800 (PST) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 858DC43D39 for ; Fri, 27 Feb 2004 10:03:01 -0800 (PST) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) i1RI1obv017373 for ; Fri, 27 Feb 2004 10:01:50 -0800 (PST) (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.12.10/8.12.10/Submit) id i1RI1oWU017372; Fri, 27 Feb 2004 10:01:50 -0800 (PST) (envelope-from gnats) Resent-Date: Fri, 27 Feb 2004 10:01:50 -0800 (PST) Resent-Message-Id: <200402271801.i1RI1oWU017372@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, "Christian S.J.Peron" Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 46A9C16A4CE for ; Fri, 27 Feb 2004 09:53:06 -0800 (PST) Received: from staff.seccuris.com (staff.seccuris.com [204.112.0.40]) by mx1.FreeBSD.org (Postfix) with SMTP id C835D43D2D for ; Fri, 27 Feb 2004 09:53:05 -0800 (PST) (envelope-from maneo@staff.seccuris.com) Received: (qmail 56999 invoked by uid 1006); 27 Feb 2004 17:53:03 -0000 Message-Id: <20040227175303.56998.qmail@staff.seccuris.com> Date: 27 Feb 2004 17:53:03 -0000 From: "Christian S.J.Peron" To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 Subject: bin/63463: [patch] list IPC mechanisms based on username/UID X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: "Christian S.J.Peron" List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 27 Feb 2004 18:03:36 -0000 >Number: 63463 >Category: bin >Synopsis: [patch] list IPC mechanisms based on username/UID >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Fri Feb 27 10:00:40 PST 2004 >Closed-Date: >Last-Modified: >Originator: Christian S.J. Peron >Release: FreeBSD 5.2-CURRENT i386 >Organization: >Environment: FreeBSD movl 5.2-CURRENT FreeBSD 5.2-CURRENT #8: Mon Feb 2 22:04:49 GMT 2004 modulus@movl:/usr/src/sys/i386/compile/ROUTER i386 >Description: Currently there is no way to list IPC mechanisms owned by a specific user. I think it would be usefull to have this option. I have enclosed a patch which implements this functionality. >How-To-Repeat: N/A >Fix: --- usr.bin/ipcs/ipcs.c.bak Fri Feb 27 04:04:15 2004 +++ usr.bin/ipcs/ipcs.c Fri Feb 27 16:57:04 2004 @@ -74,6 +74,7 @@ void sysctlgatherstruct(void *addr, size_t size, struct scgs_vector *vec); void kget(int idx, void *addr, size_t size); void usage(void); +uid_t user2uid(char *username); static struct nlist symbols[] = { {"sema"}, @@ -188,11 +189,12 @@ { int display = SHMINFO | MSGINFO | SEMINFO; int option = 0; - char *core = NULL, *namelist = NULL; + char *core = NULL, *user = NULL, *namelist = NULL; char kvmoferr[_POSIX2_LINE_MAX]; /* Error buf for kvm_openfiles. */ int i; + uid_t uid; - while ((i = getopt(argc, argv, "MmQqSsabC:cN:optTy")) != -1) + while ((i = getopt(argc, argv, "MmQqSsabC:cN:optTu:y")) != -1) switch (i) { case 'M': display = SHMTOTAL; @@ -242,6 +244,10 @@ case 'y': use_sysctl = 0; break; + case 'u': + user = optarg; + uid = user2uid(user); + break; default: usage(); } @@ -320,6 +326,9 @@ ctime_buf[100]; struct msqid_ds *msqptr = &xmsqids[i]; + if (user) + if (uid != msqptr->msg_perm.uid) + continue; cvt_time(msqptr->msg_stime, stime_buf); cvt_time(msqptr->msg_rtime, rtime_buf); cvt_time(msqptr->msg_ctime, ctime_buf); @@ -409,6 +418,9 @@ ctime_buf[100]; struct shmid_ds *shmptr = &xshmids[i]; + if (user) + if (uid != shmptr->shm_perm.uid) + continue; cvt_time(shmptr->shm_atime, atime_buf); cvt_time(shmptr->shm_dtime, dtime_buf); cvt_time(shmptr->shm_ctime, ctime_buf); @@ -502,6 +514,9 @@ char ctime_buf[100], otime_buf[100]; struct semid_ds *semaptr = &xsema[i]; + if (user) + if (uid != semaptr->sem_perm.uid) + continue; cvt_time(semaptr->sem_otime, otime_buf); cvt_time(semaptr->sem_ctime, ctime_buf); @@ -649,11 +664,27 @@ } } +uid_t +user2uid(char *username) +{ + struct passwd *pwd; + uid_t uid; + char *r; + + uid = strtoul(username, &r, 0); + if (!*r && r != username) + return (uid); + if ((pwd = getpwnam(username)) == NULL) + errx(1, "getpwnam failed: No such user"); + endpwent(); + return (pwd->pw_uid); +} + void usage() { fprintf(stderr, - "usage: ipcs [-abcmopqstyMQST] [-C corefile] [-N namelist]\n"); + "usage: ipcs [-abcmopqstyMQST] [-C corefile] [-N namelist] [-u user]\n"); exit(1); } >Release-Note: >Audit-Trail: >Unformatted: