2015-03-09 13 views
0

Я попытался разрешить отображение всех пользователей, принадлежащих к группе, указанной в качестве параметра (optarg).C - Пользователи, принадлежащие к группе - Linux

Я написал первый случай, который показывает всех пользователей и под ним их группы, и теперь я хочу создать b-код с параметром optarg, содержащим имя группы.

Я не могу использовать gr_mem, потому что я не корень.

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(); 

ответ

0

Я не могу использовать gr_mem, потому что я не корень.

Для использования поля gr_memstruct group. Вам не обязательно быть пользователем root.