0
내 임무는 시스템에있는 모든 사용자에 대해 사용자가 속한 모든 그룹을 나열하는 것입니다. 아이디어는 /etc/passwd
을 거치며 모든 사용자가 그룹을 인쇄합니다. 그러나setgid() : 작업이 허용되지 않습니다.
if(getgrouplist(passwd->pw_name, passwd->pw_gid,
groups, &ngroups) < 0)
error_fatal ("getgrouplist()");
나는 여전히 작동하지 않는 이유에 대해 궁금 해요 :
[편집]이 트릭을했다.
출력 :
User root is a member of: root
User daemon is a member of: root
setgid(): Operation not permitted
코드 :
while ((passwd = getpwent()) != NULL) {
uid = passwd->pw_uid;
gid = passwd->pw_gid;
if (setgid(gid) < 0)
error_fatal ("setgid()");
if (setuid(uid) < 0)
error_fatal ("setuid()");
if((ngroups = getgroups (0, NULL)) < 0)
error_fatal ("getgroups()");
if((groups = (gid_t *) malloc (sizeof (gid_t) * ngroups)) < 0)
error_fatal ("malloc()");
if (getgroups (ngroups, groups) < 0)
error_fatal ("getgroups()");
printf ("User %s is a member of: ", passwd->pw_name);
for (i = 0; i < ngroups; i++) {
gid = groups[i];
if((group = getgrgid (gid)) == NULL)
error_fatal ("getgrgid()");
printf ("%s ", group->gr_name);
}
putchar ('\n');
}
어떤 아이디어가?
가능한 복제본 [C를 사용하는 리눅스 사용자 그룹을 얻는 올바른 방법] (http://stackoverflow.com/questions/22104383/proper-way-to-get-groups-of-a-user-in -linux-using-c) –