id.c revision 4f6e8d7a00cbeda1e70cc15be9c4af1018bdad53
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 8static 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 19static 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 29int 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