Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- #include <utmp.h>
- #include <unistd.h>
- #include <pwd.h>
- #include <grp.h>
- int main(int argc, char **argv)
- {
- int fAOpt = 0, fBOpt = 0;
- int optRes;
- int numberOfGroups;
- gid_t *groups;
- struct group *group;
- struct passwd *pass;
- struct utmp *extr;
- setutent();
- while ((optRes = getopt(argc, argv, "ab")) != -1)
- {
- switch(optRes)
- {
- case 'a':
- fAOpt = 1;
- break;
- case 'b':
- fBOpt = 1;
- break;
- }
- }
- while ((extr = getutent()) != NULL)
- {
- if(extr->ut_type == 7)
- {
- pass = getpwnam(extr->ut_user);
- numberOfGroups = 0;
- getgrouplist(extr->ut_user, pass->pw_gid, groups, &numberOfGroups);
- groups = malloc(numberOfGroups * sizeof(gid_t));
- getgrouplist(extr->ut_user, pass->pw_gid, groups, &numberOfGroups);
- if((fAOpt != 1) && (fBOpt != 1))
- printf("%s \n", extr->ut_user);
- if((fAOpt == 1) && (fBOpt != 1))
- printf("%s (%s) \n", extr->ut_user, extr->ut_host);
- if((fAOpt != 1) && (fBOpt == 1))
- {
- printf("%s [ ", extr->ut_user);
- for(int i = 0; i < numberOfGroups; i++)
- {
- group = getgrgid(groups[i]);
- printf("%s ", group->gr_name);
- }
- printf("]\n");
- }
- if((fAOpt == 1) && (fBOpt == 1))
- {
- printf("%s (%s) [ ", extr->ut_user, extr->ut_host);
- for(int i = 0; i < numberOfGroups; i++)
- {
- group = getgrgid(groups[i]);
- printf("%s ", group->gr_name);
- }
- printf("]\n");
- }
- free(groups);
- }
- }
- endutent();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement