Deleted Added
full compact
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}