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 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 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 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