#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <pwd.h> #include <grp.h> #ifdef HAVE_SELINUX #include <selinux/selinux.h> #endif static void print_uid(uid_t uid) { struct passwd *pw = getpwuid(uid); if (pw) { printf("%d(%s)", uid, pw->pw_name); } else { printf("%d",uid); } } static void print_gid(gid_t gid) { struct group *gr = getgrgid(gid); if (gr) { printf("%d(%s)", gid, gr->gr_name); } else { printf("%d",gid); } } int id_main(int argc, char **argv) { gid_t list[64]; int n, max; #ifdef HAVE_SELINUX char *secctx; #endif max = getgroups(64, list); if (max < 0) max = 0; printf("uid="); print_uid(getuid()); printf(" gid="); print_gid(getgid()); if (max) { printf(" groups="); print_gid(list[0]); for(n = 1; n < max; n++) { printf(","); print_gid(list[n]); } } #ifdef HAVE_SELINUX if (getcon(&secctx) == 0) { printf(" context=%s", secctx); free(secctx); } #endif printf("\n"); return 0; }