#include "../command.h" #include #include COMMAND_EMPTY(user_id) { uid_t uid; gid_t gid, *groups; int ngroups, i; struct passwd* pw; struct group* ugr; uid = getuid(); gid = getgid(); pw = getpwuid(uid); if(pw == NULL){ error("failed to fetch groups: %s", strerror(errno)); } ngroups = 0; getgrouplist(pw->pw_name, pw->pw_gid, NULL, &ngroups); groups = malloc(sizeof(gid_t) * ngroups); getgrouplist(pw->pw_name, pw->pw_gid, groups, &ngroups); ugr = getgrgid(gid); printf("uid=%d(%s) gid=%d(%s) ", uid, ugr->gr_name, gid, ugr->gr_name); if (ngroups > 0) { printf("groups="); } for (i = 0; i < ngroups; i++){ struct group* gr = getgrgid(groups[i]); if(gr == NULL) { free(groups); error("failed to fetch groups: %s", strerror(errno)); } printf("%d(%s)", gr->gr_gid, gr->gr_name); if (i + 1 < ngroups) putchar(','); } printf("\b\n"); free(groups); return EXIT_SUCCESS; }