getgroups(2) System Calls Manual getgroups(2) NOM getgroups, setgroups - Lire et écrire la liste des groupes additionnels d'un processus BIBLIOTHÈQUE Bibliothèque C standard (libc, -lc) SYNOPSIS #include <unistd.h> int getgroups(int size, gid_t list[]); #include <grp.h> int setgroups(size_t size, const gid_t *_Nullable list); Exigences de macros de test de fonctionnalités pour la glibc (consulter feature_test_macros(7)) : setgroups() : Depuis la glibc 2.19 : _DEFAULT_SOURCE glibc 2.19 et antérieures : _BSD_SOURCE DESCRIPTION getgroups() renvoie dans la liste list les identifiants des groupes ad- ditionnels du processus appelant. Le paramètre size doit indiquer le nombre maximal d'éléments qui peuvent être stockés dans le tampon pointé par list. Si le processus appelant est membre de plus de size groupes additionnels, cela génère une erreur. Il n'est pas précisé si l'ID du groupe effectif du processus appelant est inclus dans la liste renvoyée (ainsi, une application doit aussi appeler getegid(2) et ajouter ou supprimer la valeur qui en résulte). Si size vaut zéro, list n'est pas modifiée, mais le nombre total de groupes additionnels pour le processus est renvoyé. Cela permet à l'ap- pelant de déterminer la taille d'une liste list allouée dynamiquement à utiliser dans un appel à getgroups() ultérieur. setgroups() définit des identifiants de groupe additionnel pour le pro- cessus appelant. Les privilèges appropriés sont nécessaires (voir la description de EPERM ci-dessous). Le paramètre size indique le nombre d'identifiants de groupe additionnel du tampon pointé par list. Un pro- cessus peut supprimer tous ses groupes additionnels : setgroups(0, NULL); VALEUR RENVOYÉE En cas de succès, getgroups() renvoie le nombre d'identifiants de groupe additionnel. En cas d'erreur, -1 est renvoyé et errno est posi- tionné pour indiquer l'erreur. En cas de succès, setgroups() renvoie 0. En cas d'erreur, -1 est ren- voyé et errno est positionné pour indiquer l'erreur. ERREURS EFAULT list contient une adresse non autorisée. getgroups() peut également échouer avec les erreurs suivantes : EINVAL size est inférieur au nombre d'identifiants de groupe addition- nel, et n'est pas nul. setgroups() peut également échouer 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 mémoire. EPERM Le processus appelant n'a pas de privilèges suffisants (l'appe- lant n'a pas la capacité CAP_SETGID dans l'espace de noms utili- sateur où il réside). 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). STANDARDS getgroups() : SVr4, 4.3BSD, POSIX.1-2001, POSIX.1-2008. setgroups() : SVr4, 4.3BSD. Depuis que setgroups() exige des privi- lèges, il n'est pas traité dans POSIX.1. NOTES Un processus peut avoir jusqu'à NGROUPS_MAX identifiants de groupe ad- ditionnel en plus de son identifiant de groupe effectif. La constante NGROUPS_MAX est définie dans <limits.h>. Le jeu d'identifiants de groupe additionnel est hérité du processus parent, et est préservé au travers des appels à execve(2). Le nombre maximal d'identifiants de groupe additionnel peut être obtenu pendant l'exécution au moyen de sysconf(3) : long ngroups_max; ngroups_max = sysconf(_SC_NGROUPS_MAX); La valeur de retour maximale de getgroups() ne peut pas être plus grande que 1 plus cette valeur. Depuis Linux 2.6.4, le nombre maximal d’identifiants de groupe additionnel est aussi exposé à l’aide du fi- chier /proc/sys/kernel/ngroups_max en lecture seule et spécifique à Li- nux. L'appel système getgroups() originel de Linux ne gérait que des identi- fiants de groupe sur 16 bits. En conséquence, Linux 2.4 a ajouté get- groups32() qui prend en charge des identifiants 32 bits. La fonction getgroups() de la glibc qui l'encapsule gère de manière transparente ces différences entre noyaux. différences entre bibliothèque C et noyau Au niveau du noyau, les ID d'utilisateur et de groupe représentent un attribut par thread. Cependant, POSIX exige que tous les threads d'un processus partagent les mêmes droits. L'implémentation des threads NPTL gère les exigences de POSIX en fournissant des fonctions enveloppes pour les appels système qui modifient les UID et les GID du processus. Ces fonctions enveloppes (dont celle de setgroups()) utilisent une technique basée sur le signal pour s'assurer que quand un thread modi- fie les droits, tous les autres threads du processus modifient égale- ment leurs droits. Pour des détails, voir nptl(7). VOIR AUSSI getgid(2), setgid(2), getgrouplist(3), group_member(3), initgroups(3), capabilities(7), credentials(7) TRADUCTION La traduction française de cette page de manuel a été créée par Chris- tophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <ste- phan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, Fran- çois Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Gué- rard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.cou- lon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centra- liens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <si- mon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@de- bian.org>, David Prévot <david@tilapin.org>, Cédric Boutillier <ce- dric.boutillier@gmail.com>, Frédéric Hantrais <fhantrais@gmail.com> et Jean-Philippe MENGUAL <jpmengual@debian.org> Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE. Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à ⟨debian-l10n-french@lists.debian.org⟩. Pages du manuel de Linux 6.03 5 février 2023 getgroups(2)
Generated by dwww version 1.15 on Sat Jun 29 01:43:18 CEST 2024.