Provided by: manpages-fr-dev_4.23.1-1_all bug

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  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 est positionné pour indiquer l'erreur.

       En  cas  de  succès,  setgroups()  renvoie 0. En cas d'erreur, -1 est renvoyé 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  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).

VERSIONS

   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).

STANDARDS

       getgroups()
              POSIX.1-2008.

       setgroups()
              Aucun.

HISTORIQUE

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

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

       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.

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.

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