jammy (2) getgroups.2.gz

Provided by: manpages-fr-dev_4.13-4_all bug

NOM

       getgroups, setgroups - Lire et écrire la liste des groupes additionnels d'un processus

SYNOPSIS

       #include <sys/types.h>
       #include <unistd.h>

       int getgroups(int size, gid_t list[]);

       #include <grp.h>

       int setgroups(size_t size, const gid_t *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 additionnels 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'appelant  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 processus 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 processus 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 contient le code d'erreur.

       En  cas  de  succès,  setgroups()  renvoie  0.  En cas d'erreur, -1 est renvoyé et errno contient le code
       d'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 additionnel, 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'appelant n'a pas la capacité  CAP_SETGID
              dans l'espace de noms utilisateur 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).

CONFORMITÉ

       getgroups() : SVr4, 4.3BSD, POSIX.1-2001, POSIX.1-2008.

       setgroups() : SVr4, 4.3BSD. Depuis que setgroups()  exige  des  privilèges,  il  n'est  pas  traité  dans
       POSIX.1.

NOTES

       Un processus peut avoir jusqu'à NGROUPS_MAX identifiants de groupe additionnel 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 fichier
       /proc/sys/kernel/ngroups_max en lecture seule et spécifique à Linux.

       L'appel système getgroups() originel de Linux ne gérait que des identifiants de groupe  sur  16 bits.  En
       conséquence,  Linux 2.4  a ajouté getgroups32() 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 modifie les droits, tous les  autres
       threads du processus modifient également 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)

COLOPHON

       Cette page fait partie de la publication 5.10 du projet man-pages Linux. Une description du projet et des
       instructions pour signaler des anomalies et la dernière version de cette page  peuvent  être  trouvées  à
       l'adresse https://www.kernel.org/doc/man-pages/.

TRADUCTION

       La   traduction   française   de   cette   page   de   manuel   a   été   créée   par  Christophe  Blaess
       <https://www.blaess.fr/christophe/>,   Stéphan   Rafin   <stephan.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.coulon@wanadoo.fr>,   Julien   Cristau
       <jcristau@debian.org>,      Thomas      Huriaux      <thomas.huriaux@gmail.com>,     Nicolas     François
       <nicolas.francois@centraliens.net>,    Florentin    Duneau    <fduneau@gmail.com>,     Simon     Paillard
       <simon.paillard@resel.enst-bretagne.fr>,     Denis    Barbier    <barbier@debian.org>,    David    Prévot
       <david@tilapin.org>,    Cédric    Boutillier     <cedric.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 ⟨⟩.