procstat_cred.c (249673) | procstat_cred.c (287486) |
---|---|
1/*- 2 * Copyright (c) 2007-2008 Robert N. M. Watson | 1/*- 2 * Copyright (c) 2007-2008 Robert N. M. Watson |
3 * Copyright (c) 2015 Allan Jude <allanjude@freebsd.org> |
|
3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright --- 7 unchanged lines hidden (view full) --- 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * | 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright --- 7 unchanged lines hidden (view full) --- 19 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 * SUCH DAMAGE. 26 * |
26 * $FreeBSD: head/usr.bin/procstat/procstat_cred.c 249673 2013-04-20 07:58:20Z trociny $ | 27 * $FreeBSD: head/usr.bin/procstat/procstat_cred.c 287486 2015-09-05 17:02:01Z allanjude $ |
27 */ 28 29#include <sys/param.h> 30#include <sys/sysctl.h> 31#include <sys/user.h> 32 33#include <err.h> 34#include <libprocstat.h> --- 8 unchanged lines hidden (view full) --- 43 44void 45procstat_cred(struct procstat *procstat, struct kinfo_proc *kipp) 46{ 47 unsigned int i, ngroups; 48 gid_t *groups; 49 50 if (!hflag) | 28 */ 29 30#include <sys/param.h> 31#include <sys/sysctl.h> 32#include <sys/user.h> 33 34#include <err.h> 35#include <libprocstat.h> --- 8 unchanged lines hidden (view full) --- 44 45void 46procstat_cred(struct procstat *procstat, struct kinfo_proc *kipp) 47{ 48 unsigned int i, ngroups; 49 gid_t *groups; 50 51 if (!hflag) |
51 printf("%5s %-16s %5s %5s %5s %5s %5s %5s %5s %5s %-15s\n", | 52 xo_emit("{T:/%5s %-16s %5s %5s %5s %5s %5s %5s %5s %5s %-15s}\n", |
52 "PID", "COMM", "EUID", "RUID", "SVUID", "EGID", "RGID", 53 "SVGID", "UMASK", "FLAGS", "GROUPS"); 54 | 53 "PID", "COMM", "EUID", "RUID", "SVUID", "EGID", "RGID", 54 "SVGID", "UMASK", "FLAGS", "GROUPS"); 55 |
55 printf("%5d ", kipp->ki_pid); 56 printf("%-16s ", kipp->ki_comm); 57 printf("%5d ", kipp->ki_uid); 58 printf("%5d ", kipp->ki_ruid); 59 printf("%5d ", kipp->ki_svuid); 60 printf("%5d ", kipp->ki_groups[0]); 61 printf("%5d ", kipp->ki_rgid); 62 printf("%5d ", kipp->ki_svgid); 63 printf("%5s ", get_umask(procstat, kipp)); 64 printf("%s", kipp->ki_cr_flags & CRED_FLAG_CAPMODE ? "C" : "-"); 65 printf(" "); | 56 xo_emit("{k:process_id/%5d/%d} ", kipp->ki_pid); 57 xo_emit("{:command/%-16s/%s} ", kipp->ki_comm); 58 xo_emit("{:uid/%5d} ", kipp->ki_uid); 59 xo_emit("{:ruid/%5d} ", kipp->ki_ruid); 60 xo_emit("{:svuid/%5d} ", kipp->ki_svuid); 61 xo_emit("{:group/%5d} ", kipp->ki_groups[0]); 62 xo_emit("{:rgid/%5d} ", kipp->ki_rgid); 63 xo_emit("{:svgid/%5d} ", kipp->ki_svgid); 64 xo_emit("{:umask/%5s} ", get_umask(procstat, kipp)); 65 xo_emit("{:cr_flags/%s}", kipp->ki_cr_flags & CRED_FLAG_CAPMODE ? 66 "C" : "-"); 67 xo_emit("{P: }"); |
66 67 groups = NULL; 68 /* 69 * We may have too many groups to fit in kinfo_proc's statically 70 * sized storage. If that occurs, attempt to retrieve them using 71 * libprocstat. 72 */ 73 if (kipp->ki_cr_flags & KI_CRF_GRP_OVERFLOW) 74 groups = procstat_getgroups(procstat, kipp, &ngroups); 75 if (groups == NULL) { 76 ngroups = kipp->ki_ngroups; 77 groups = kipp->ki_groups; 78 } | 68 69 groups = NULL; 70 /* 71 * We may have too many groups to fit in kinfo_proc's statically 72 * sized storage. If that occurs, attempt to retrieve them using 73 * libprocstat. 74 */ 75 if (kipp->ki_cr_flags & KI_CRF_GRP_OVERFLOW) 76 groups = procstat_getgroups(procstat, kipp, &ngroups); 77 if (groups == NULL) { 78 ngroups = kipp->ki_ngroups; 79 groups = kipp->ki_groups; 80 } |
81 xo_open_list("groups"); |
|
79 for (i = 0; i < ngroups; i++) | 82 for (i = 0; i < ngroups; i++) |
80 printf("%s%d", (i > 0) ? "," : "", groups[i]); | 83 xo_emit("{D:/%s}{l:groups/%d}", (i > 0) ? "," : "", groups[i]); |
81 if (groups != kipp->ki_groups) 82 procstat_freegroups(procstat, groups); 83 | 84 if (groups != kipp->ki_groups) 85 procstat_freegroups(procstat, groups); 86 |
84 printf("\n"); | 87 xo_close_list("groups"); 88 xo_emit("\n"); |
85} 86 87static const char * 88get_umask(struct procstat *procstat, struct kinfo_proc *kipp) 89{ 90 u_short fd_cmask; 91 static char umask[4]; 92 93 if (procstat_getumask(procstat, kipp, &fd_cmask) == 0) { 94 snprintf(umask, 4, "%03o", fd_cmask); 95 return (umask); 96 } else { 97 return ("-"); 98 } 99} | 89} 90 91static const char * 92get_umask(struct procstat *procstat, struct kinfo_proc *kipp) 93{ 94 u_short fd_cmask; 95 static char umask[4]; 96 97 if (procstat_getumask(procstat, kipp, &fd_cmask) == 0) { 98 snprintf(umask, 4, "%03o", fd_cmask); 99 return (umask); 100 } else { 101 return ("-"); 102 } 103} |