getgroups(2) System Calls Manual getgroups(2) NOM getgroups, setgroups - Lire et ecrire la liste des groupes additionnels d'un processus BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include int getgroups(int size, gid_t list[]); #include int setgroups(size_t size, const gid_t *_Nullable list); Exigences de macros de test de fonctionnalites pour la glibc (consulter feature_test_macros(7)) : setgroups() : Depuis la glibc 2.19 : _DEFAULT_SOURCE glibc 2.19 et anterieures : _BSD_SOURCE DESCRIPTION getgroups() renvoie dans la liste list les identifiants des groupes additionnels du processus appelant. Le parametre size doit indiquer le nombre maximal d'elements qui peuvent etre stockes dans le tampon pointe par list. Si le processus appelant est membre de plus de size groupes additionnels, cela genere une erreur. Il n'est pas precise si l'ID du groupe effectif du processus appelant est inclus dans la liste renvoyee (ainsi, une application doit aussi appeler getegid(2) et ajouter ou supprimer la valeur qui en resulte). Si size vaut zero, list n'est pas modifiee, mais le nombre total de groupes additionnels pour le processus est renvoye. Cela permet a l'appelant de determiner la taille d'une liste list allouee dynamiquement a utiliser dans un appel a getgroups() ulterieur. setgroups() definit des identifiants de groupe additionnel pour le processus appelant. Les privileges appropries sont necessaires (voir la description de EPERM ci-dessous). Le parametre size indique le nombre d'identifiants de groupe additionnel du tampon pointe par list. Un processus peut supprimer tous ses groupes additionnels : setgroups(0, NULL); VALEUR RENVOYEE En cas de succes, getgroups() renvoie le nombre d'identifiants de groupe additionnel. En cas d'erreur, -1 est renvoye et errno est positionne pour indiquer l'erreur. En cas de succes, setgroups() renvoie 0. En cas d'erreur, -1 est renvoye et errno est positionne pour indiquer l'erreur. ERREURS EFAULT list contient une adresse non autorisee. getgroups() peut egalement echouer avec les erreurs suivantes : EINVAL size est inferieur au nombre d'identifiants de groupe additionnel, et n'est pas nul. setgroups() peut egalement echouer avec les erreurs suivantes : EINVAL size est plus grand que NGROUPS_MAX (32 avant Linux 2.6.4 ; 65536 depuis Linux 2.6.4). ENOMEM Plus assez de memoire. EPERM Le processus appelant n'a pas de privileges suffisants (l'appelant n'a pas la capacite CAP_SETGID dans l'espace de noms utilisateur ou il reside). EPERM (depuis Linux 3.19) L'utilisation de setgroups() est interdite dans cet espace de noms utilisateur. Voir la description de /proc/pid/setgroups dans user_namespaces(7). VERSIONS Differences entre bibliotheque C et noyau Au niveau du noyau, les ID d'utilisateur et de groupe representent un attribut par thread. Cependant, POSIX exige que tous les threads d'un processus partagent les memes droits. L'implementation des threads NPTL gere les exigences de POSIX en fournissant des fonctions enveloppes pour les appels systeme qui modifient les UID et les GID du processus. Ces fonctions enveloppes (dont celle de setgroups()) utilisent une technique basee sur le signal pour s'assurer que quand un thread modifie les droits, tous les autres threads du processus modifient egalement leurs droits. Pour des details, voir nptl(7). STANDARDS getgroups() POSIX.1-2008. setgroups() Aucun. HISTORIQUE getgroups() SVr4, 4.3BSD, POSIX.1-2001. setgroups() SVr4, 4.3BSD. Depuis que setgroups() exige des privileges, il n'est pas traite dans POSIX.1. L'appel systeme getgroups() originel de Linux ne gerait que des identifiants de groupe sur 16 bits. En consequence, Linux 2.4 a ajoute getgroups32() qui prend en charge des identifiants 32 bits. La fonction getgroups() de la glibc qui l'encapsule gere de maniere transparente ces differences entre noyaux. NOTES Un processus peut avoir jusqu'a NGROUPS_MAX identifiants de groupe additionnel en plus de son identifiant de groupe effectif. La constante NGROUPS_MAX est definie dans . Le jeu d'identifiants de groupe additionnel est herite du processus parent, et est preserve au travers des appels a execve(2). Le nombre maximal d'identifiants de groupe additionnel peut etre obtenu pendant l'execution au moyen de sysconf(3) : long ngroups_max; ngroups_max = sysconf(_SC_NGROUPS_MAX); La valeur de retour maximale de getgroups() ne peut pas etre plus grande que 1 plus cette valeur. Depuis Linux 2.6.4, le nombre maximal d'identifiants de groupe additionnel est aussi expose a l'aide du fichier /proc/sys/kernel/ngroups_max en lecture seule et specifique a Linux. VOIR AUSSI getgid(2), setgid(2), getgrouplist(3), group_member(3), initgroups(3), capabilities(7), credentials(7) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot , Cedric Boutillier , Frederic Hantrais et Jean-Philippe MENGUAL Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 getgroups(2)