Provided by: manpages-fr-dev_4.15.0-9_all bug

NOM

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

SYNOPSIS

       #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 version 2.19 de la glibc :
               _DEFAULT_SOURCE
           Versions 2.19 et antérieures de la glibc :
               _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

       On success, getgroups()  returns the number of supplementary group IDs. On  error,  -1  is
       returned, and errno is set to indicate the error.

       On success, setgroups()  returns 0. On error, -1 is returned, and errno is set to indicate
       the error.

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.13 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⟩.