1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4 #include <sys/types.h>
5 #include <pwd.h>
6 #include <grp.h>
7 #include <selinux/selinux.h>
8
print_uid(uid_t uid)9 static void print_uid(uid_t uid)
10 {
11 struct passwd *pw = getpwuid(uid);
12
13 if (pw) {
14 printf("%d(%s)", uid, pw->pw_name);
15 } else {
16 printf("%d",uid);
17 }
18 }
19
print_gid(gid_t gid)20 static void print_gid(gid_t gid)
21 {
22 struct group *gr = getgrgid(gid);
23 if (gr) {
24 printf("%d(%s)", gid, gr->gr_name);
25 } else {
26 printf("%d",gid);
27 }
28 }
29
id_main(int argc,char ** argv)30 int id_main(int argc, char **argv)
31 {
32 gid_t list[64];
33 int n, max;
34 char *secctx;
35
36 max = getgroups(64, list);
37 if (max < 0) max = 0;
38
39 printf("uid=");
40 print_uid(getuid());
41 printf(" gid=");
42 print_gid(getgid());
43 if (max) {
44 printf(" groups=");
45 print_gid(list[0]);
46 for(n = 1; n < max; n++) {
47 printf(",");
48 print_gid(list[n]);
49 }
50 }
51 if (getcon(&secctx) == 0) {
52 printf(" context=%s", secctx);
53 free(secctx);
54 }
55 printf("\n");
56 return 0;
57 }
58