2015-03-09 1 views
0

J'ai essayé de résoudre l'affichage de tous les utilisateurs qui appartiennent au groupe spécifié comme paramètre (optarg).C - Utilisateurs appartenant au groupe - Linux

J'ai écrit le premier cas qui montre tous les utilisateurs et en dessous de leurs groupes, et maintenant je veux créer un cas avec le paramètre optarg contenant le nom du groupe.

Je ne peux pas utiliser gr_mem car je ne suis pas root.

struct passwd *p; 
gid_t *groups = NULL; 
int ng = 0; 
struct group *gr; 


int i, opt; 

while((opt = getopt (argc, argv, "a")) != -1){ 
    switch(opt){ 
     case 'a': 
      setpwent(); 
       while ((p=getpwent()) != NULL){ 
        printf("%s\n", p->pw_name); 

        if(getgrouplist(p->pw_name, p->pw_gid, groups, &ng) < 0){ 
         groups = (gid_t*) malloc(ng * sizeof (gid_t)); 
         getgrouplist(p->pw_name, p->pw_gid, groups, &ng); 
        } 

        for(i = 0; i<ng; i++){    
         gr = getgrgid(groups[i]); 
         printf("%s\n", gr->gr_name); 
        } 
       } 
      endpwent(); 
     return 0; 
    } 
} 

setpwent(); 
while ((p=getpwent()) != NULL) 
    printf("%s\n", p->pw_name); 
endpwent(); 

Répondre

0

Je ne peux pas utiliser gr_mem parce que je ne suis pas une racine.

Vous n'avez pas besoin d'être un utilisateur root pour utiliser le champ gr_mem de struct group.