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
print_uid(uid_t uid)8 static void print_uid(uid_t uid)
9 {
10 struct passwd *pw = getpwuid(uid);
11
12 if (pw) {
13 printf("%d(%s)", uid, pw->pw_name);
14 } else {
15 printf("%d",uid);
16 }
17 }
18
print_gid(gid_t gid)19 static void print_gid(gid_t gid)
20 {
21 struct group *gr = getgrgid(gid);
22 if (gr) {
23 printf("%d(%s)", gid, gr->gr_name);
24 } else {
25 printf("%d",gid);
26 }
27 }
28
id_main(int argc,char ** argv)29 int id_main(int argc, char **argv)
30 {
31 gid_t list[64];
32 int n, max;
33
34 max = getgroups(64, list);
35 if (max < 0) max = 0;
36
37 printf("uid=");
38 print_uid(getuid());
39 printf(" gid=");
40 print_gid(getgid());
41 if (max) {
42 printf(" groups=");
43 print_gid(list[0]);
44 for(n = 1; n < max; n++) {
45 printf(",");
46 print_gid(list[n]);
47 }
48 }
49 printf("\n");
50 return 0;
51 }
52