• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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