PERFORCE change 156387 for review
Robert Watson
rwatson at FreeBSD.org
Mon Jan 19 06:56:36 PST 2009
http://perforce.freebsd.org/chv.cgi?CH=156387
Change 156387 by rwatson at 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 <sys/param.h>
+#include <sys/capability.h>
#include <sys/socket.h>
#include <sys/sysctl.h>
#include <sys/un.h>
@@ -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;
More information about the p4-projects
mailing list