Advertisement
Guest User

Untitled

a guest
May 22nd, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.56 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <utmp.h>
  4. #include <unistd.h>
  5. #include <pwd.h>
  6. #include <grp.h>
  7.  
  8. int main(int argc, char **argv)
  9. {
  10.     int fAOpt = 0, fBOpt = 0;
  11.     int optRes;
  12.     int numberOfGroups;
  13.     gid_t *groups;
  14.      
  15.     struct group *group;
  16.     struct passwd *pass;  
  17.     struct utmp *extr;
  18.     setutent();
  19.  
  20.     while ((optRes = getopt(argc, argv, "ab")) != -1)
  21.     {
  22.         switch(optRes)
  23.         {
  24.             case 'a':
  25.             fAOpt = 1;
  26.             break;
  27.  
  28.             case 'b':
  29.             fBOpt = 1;
  30.             break;
  31.    
  32.         }
  33.     }
  34.    
  35.    
  36.    
  37.     while ((extr = getutent()) != NULL)
  38.     {
  39.  
  40.         if(extr->ut_type == 7)
  41.         {
  42.             pass = getpwnam(extr->ut_user);
  43.             numberOfGroups = 0;
  44.             getgrouplist(extr->ut_user, pass->pw_gid, groups, &numberOfGroups);  
  45.             groups = malloc(numberOfGroups * sizeof(gid_t));
  46.             getgrouplist(extr->ut_user, pass->pw_gid, groups, &numberOfGroups);  
  47.  
  48.             if((fAOpt != 1) && (fBOpt != 1))
  49.             printf("%s \n", extr->ut_user);
  50.             if((fAOpt == 1) && (fBOpt != 1))
  51.             printf("%s (%s) \n", extr->ut_user, extr->ut_host);
  52.             if((fAOpt != 1) && (fBOpt == 1))
  53.             {
  54.                 printf("%s [ ", extr->ut_user);
  55.                 for(int i = 0; i < numberOfGroups; i++)
  56.                 {
  57.                     group = getgrgid(groups[i]);
  58.                     printf("%s ", group->gr_name);
  59.                 }
  60.                 printf("]\n");
  61.            
  62.             }
  63.             if((fAOpt == 1) && (fBOpt == 1))
  64.             {
  65.                 printf("%s (%s) [ ", extr->ut_user, extr->ut_host);
  66.                 for(int i = 0; i < numberOfGroups; i++)
  67.                 {
  68.                     group = getgrgid(groups[i]);   
  69.                     printf("%s ", group->gr_name);
  70.                 }
  71.                 printf("]\n");
  72.             }
  73.             free(groups);
  74.         }
  75.     }
  76.     endutent();
  77.     return 0;  
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement