Changeset View
Changeset View
Standalone View
Standalone View
usr.bin/procstat/procstat_cred.c
Show All 37 Lines | |||||
#include <stdlib.h> | #include <stdlib.h> | ||||
#include <stdio.h> | #include <stdio.h> | ||||
#include <unistd.h> | #include <unistd.h> | ||||
#include "procstat.h" | #include "procstat.h" | ||||
static const char *get_umask(struct procstat *procstat, | static const char *get_umask(struct procstat *procstat, | ||||
struct kinfo_proc *kipp); | struct kinfo_proc *kipp); | ||||
static void procstat_emit(struct procstat *procstat, | |||||
struct kinfo_proc *kipp); | |||||
void | void | ||||
procstat_cred(struct procstat *procstat, struct kinfo_proc *kipp) | procstat_cred(struct procstat *procstat, struct kinfo_proc *kipp) | ||||
{ | { | ||||
unsigned int i, ngroups; | struct kinfo_proc *kip; | ||||
gid_t *groups; | unsigned int i, count; | ||||
if ((procstat_opts & PS_OPT_NOHEADER) == 0) | if ((procstat_opts & PS_OPT_NOHEADER) == 0) | ||||
xo_emit("{T:/%5s %-16s %5s %5s %5s %5s %5s %5s %5s %5s %-15s}\n", | xo_emit("{T:/%5s %6s %-16s %5s %5s %5s %5s %5s %5s %5s %5s %-15s}\n", | ||||
"PID", "COMM", "EUID", "RUID", "SVUID", "EGID", "RGID", | "PID", "TID", "COMM", "EUID", "RUID", "SVUID", "EGID", "RGID", | ||||
"SVGID", "UMASK", "FLAGS", "GROUPS"); | "SVGID", "UMASK", "FLAGS", "GROUPS"); | ||||
xo_emit("{k:process_id/%5d/%d} ", kipp->ki_pid); | kip = procstat_getprocs(procstat, KERN_PROC_PID | KERN_PROC_INC_THREAD, | ||||
kipp->ki_pid, &count); | |||||
if (kip == NULL) | |||||
return; | |||||
kinfo_proc_sort(kip, count); | |||||
for (i = 0; i < count; i++) { | |||||
kipp = &kip[i]; | |||||
procstat_emit(procstat, kipp); | |||||
} | |||||
} | |||||
static const char * | |||||
get_umask(struct procstat *procstat, struct kinfo_proc *kipp) | |||||
{ | |||||
u_short fd_cmask; | |||||
static char umask[4]; | |||||
if (procstat_getumask(procstat, kipp, &fd_cmask) == 0) { | |||||
snprintf(umask, 4, "%03o", fd_cmask); | |||||
return (umask); | |||||
} else { | |||||
return ("-"); | |||||
} | |||||
} | |||||
static void procstat_emit(struct procstat *procstat, struct kinfo_proc *kipp) | |||||
{ | |||||
unsigned int i, ngroups; | |||||
gid_t *groups; | |||||
xo_emit("{d:process_id/%5d/%d} ", kipp->ki_pid); | |||||
xo_emit("{dk:thread_id/%6d/%d} ", kipp->ki_tid); | |||||
xo_emit("{:command/%-16s/%s} ", kipp->ki_comm); | xo_emit("{:command/%-16s/%s} ", kipp->ki_comm); | ||||
xo_emit("{:uid/%5d} ", kipp->ki_uid); | xo_emit("{:uid/%5d} ", kipp->ki_uid); | ||||
xo_emit("{:ruid/%5d} ", kipp->ki_ruid); | xo_emit("{:ruid/%5d} ", kipp->ki_ruid); | ||||
xo_emit("{:svuid/%5d} ", kipp->ki_svuid); | xo_emit("{:svuid/%5d} ", kipp->ki_svuid); | ||||
xo_emit("{:group/%5d} ", kipp->ki_groups[0]); | xo_emit("{:group/%5d} ", kipp->ki_groups[0]); | ||||
xo_emit("{:rgid/%5d} ", kipp->ki_rgid); | xo_emit("{:rgid/%5d} ", kipp->ki_rgid); | ||||
xo_emit("{:svgid/%5d} ", kipp->ki_svgid); | xo_emit("{:svgid/%5d} ", kipp->ki_svgid); | ||||
xo_emit("{:umask/%5s} ", get_umask(procstat, kipp)); | xo_emit("{:umask/%5s} ", get_umask(procstat, kipp)); | ||||
Show All 16 Lines | static void procstat_emit(struct procstat *procstat, struct kinfo_proc *kipp) | ||||
xo_open_list("groups"); | xo_open_list("groups"); | ||||
for (i = 0; i < ngroups; i++) | for (i = 0; i < ngroups; i++) | ||||
xo_emit("{D:/%s}{l:groups/%d}", (i > 0) ? "," : "", groups[i]); | xo_emit("{D:/%s}{l:groups/%d}", (i > 0) ? "," : "", groups[i]); | ||||
if (groups != kipp->ki_groups) | if (groups != kipp->ki_groups) | ||||
procstat_freegroups(procstat, groups); | procstat_freegroups(procstat, groups); | ||||
xo_close_list("groups"); | xo_close_list("groups"); | ||||
xo_emit("\n"); | xo_emit("\n"); | ||||
} | |||||
static const char * | |||||
get_umask(struct procstat *procstat, struct kinfo_proc *kipp) | |||||
{ | |||||
u_short fd_cmask; | |||||
static char umask[4]; | |||||
if (procstat_getumask(procstat, kipp, &fd_cmask) == 0) { | |||||
snprintf(umask, 4, "%03o", fd_cmask); | |||||
return (umask); | |||||
} else { | |||||
return ("-"); | |||||
} | |||||
} | } |