Ma tâche consiste à répertorier tous les groupes dont un utilisateur est membre, pour tous les utilisateurs du système. L’idée est de passer par /etc/passwd
et pour chaque utilisateur d’imprimer ses groupes.
[EDIT] Ceci a fait l’affaire:
if( getgrouplist(passwd->pw_name, passwd->pw_gid, groups, &ngroups) < 0) error_fatal ("getgrouplist ()");
Pourtant, je suis toujours curieux de savoir pourquoi il ne fonctionne pas.
Sortie:
User root is a member of: root User daemon is a member of: root setgid(): Operation not permitted
Code:
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) pw_name); for (i = 0; i gr_name); } putchar ('\n'); }
Des idées?
Une fois que votre programme appelle setuid()
pour basculer vers un autre utilisateur que root
, votre programme a abandonné son autorisation de changer d’utilisateur pour que les appels suivants échouent.