From owner-p4-projects@FreeBSD.ORG Mon Jan 19 14:56:35 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id C7AC610657C3; Mon, 19 Jan 2009 14:56:32 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 440001065754 for ; Mon, 19 Jan 2009 14:56:32 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 16C678FC1A for ; Mon, 19 Jan 2009 14:56:32 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n0JEuVGc081224 for ; Mon, 19 Jan 2009 14:56:31 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n0JEuVEY081222 for perforce@freebsd.org; Mon, 19 Jan 2009 14:56:31 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Mon, 19 Jan 2009 14:56:31 GMT Message-Id: <200901191456.n0JEuVEY081222@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson To: Perforce Change Reviews Cc: Subject: PERFORCE change 156387 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 19 Jan 2009 14:56:36 -0000 http://perforce.freebsd.org/chv.cgi?CH=156387 Change 156387 by rwatson@rwatson_freebsd_capabilities on 2009/01/19 14:55:53 Teach procstat to print out the mask of rights on a capability in file descriptor mode. Affected files ... .. //depot/projects/trustedbsd/capabilities/src/usr.bin/procstat/procstat_files.c#10 edit Differences ... ==== //depot/projects/trustedbsd/capabilities/src/usr.bin/procstat/procstat_files.c#10 (text+ko) ==== @@ -27,6 +27,7 @@ */ #include +#include #include #include #include @@ -131,6 +132,74 @@ printf("%s", addr); } +static struct cap_desc { + cap_rights_t cd_right; + const char *cd_desc; +} cap_desc[] = { + { CAP_READ, "rd" }, + { CAP_WRITE, "wr" }, + { CAP_SEEK, "se" }, + { CAP_GETPEERNAME, "pn" }, + { CAP_GETSOCKNAME, "sn" }, + { CAP_FCHFLAGS, "cf" }, + { CAP_IOCTL, "io" }, + { CAP_FSTAT, "fs" }, + { CAP_MMAP, "mm" }, + { CAP_FCNTL, "fc" }, + { CAP_EVENT, "ev" }, + { CAP_FSYNC, "fy" }, + { CAP_FCHOWN, "cn" }, + { CAP_FCHMOD, "cm" }, + { CAP_FTRUNCATE, "ft" }, + { CAP_FLOCK, "fl" }, + { CAP_FSTATFS, "sf" }, + { CAP_REVOKE, "rv" }, + { CAP_FEXECVE, "fe" }, + { CAP_FPATHCONF, "fp" }, + { CAP_FUTIMES, "fu" }, + { CAP_ACL_GET, "ag" }, + { CAP_ACL_SET, "as" }, + { CAP_ACL_DELETE, "ad" }, + { CAP_ACL_CHECK, "ac" }, + { CAP_EXTATTR_GET, "eg" }, + { CAP_EXTATTR_SET, "es" }, + { CAP_EXTATTR_DELETE, "ed" }, + { CAP_EXTATTR_LIST, "el" }, + { CAP_MAC_GET, "mg" }, + { CAP_MAC_SET, "ms" }, + { CAP_ACCEPT, "at" }, + { CAP_BIND, "bd" }, + { CAP_GETSOCKOPT, "gs" }, + { CAP_SETSOCKOPT, "ss" }, + { CAP_LISTEN, "ln" }, + { CAP_SHUTDOWN, "sh" }, + { CAP_PEELOFF, "pf" }, + { CAP_LOOKUP, "lo" }, + { CAP_SEM_POST, "sp" }, + { CAP_SEM_WAIT, "sw" }, + { CAP_SEM_GETVALUE, "sg" }, + { CAP_KEVENT, "ke" }, + { CAP_PDGETPID, "pg" }, + { CAP_PDWAIT, "pw" }, + { CAP_PDKILL, "pk" }, +}; +static const int cap_desc_count = sizeof(cap_desc) / + sizeof(cap_desc[0]); + +static void +print_capability(cap_rights_t rights) +{ + int count, i; + + count = 0; + for (i = 0; i < cap_desc_count; i++) { + if (rights & cap_desc[i].cd_right) { + printf("%s%s", count ? "," : "", cap_desc[i].cd_desc); + count++; + } + } +} + void procstat_files(pid_t pid, struct kinfo_proc *kipp) { @@ -323,6 +392,11 @@ } break; + case KF_TYPE_CAPABILITY: + printf("%-4s ", "-"); + print_capability(kif->kf_cap_rights); + break; + case KF_TYPE_PROCDESC: printf("%-3s %d", "-", kif->kf_pid); break;