setgid (): opération non autorisée

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.