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

NOM

       getgrouplist - Obtenir la liste des groupes auxquels appartient un utilisateur

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

SYNOPSIS

       #include <grp.h>

       int getgrouplist(const char *user, gid_t group,
                        gid_t *groups, int *ngroups);

   Exigences de macros de test de fonctionnalités pour la glibc (consulter feature_test_macros(7)) :

       getgrouplist() :
           Depuis la glibc 2.19 :
               _DEFAULT_SOURCE
           glibc 2.19 et antérieures :
               _BSD_SOURCE

DESCRIPTION

       La  fonction  getgrouplist()  balaie la base de données des groupes (voir group(5)) pour obtenir la liste
       des groupes auxquels appartient l'utilisateur user. Jusqu'à *ngroups de ces groupes sont  retournés  dans
       le tableau groups.

       S'il  n'était  pas parmi les groupes définis pour l'utilisateur user dans la base de données des groupes,
       group est inclus dans la liste des groupes retournée par getgrouplist ;  typiquement,  cet  argument  est
       spécifié   comme  étant  l'identifiant  du  groupe  de  l'utilisateur  user  pris  dans  l'enregistrement
       correspondant dans le fichier des mots de passe.

       L'argument ngroups est un argument « valeur résultat » : au retour, il contient  toujours  le  nombre  de
       groupes  trouvés pour l'utilisateur user, incluant group ; cette valeur peut être supérieure au nombre de
       groupes enregistrés dans groups.

VALEUR RENVOYÉE

       Si le nombre de groupes auquel l'utilisateur user appartient est inférieur ou égal à *ngroups, la  valeur
       *ngroups est renvoyée.

       Si l'utilisateur appartient à plus de *ngroups groupes, getgrouplist() renvoie -1. Dans ce cas, la valeur
       renvoyée  dans  *ngroups  peut  être  utilisée pour redimensionner le tampon passé à un appel ultérieur à
       getgrouplist().

ATTRIBUTS

       Pour une explication des termes utilisés dans cette section, consulter attributes(7).
       ┌───────────────────────────────────────────────────────────────┬──────────────────────┬────────────────┐
       │ InterfaceAttributValeur         │
       ├───────────────────────────────────────────────────────────────┼──────────────────────┼────────────────┤
       │ getgrouplist()                                                │ Sécurité des threads │ MT-Safe locale │
       └───────────────────────────────────────────────────────────────┴──────────────────────┴────────────────┘

STANDARDS

       Aucune.

HISTORIQUE

       glibc 2.2.4.

BOGUES

       Avant la glibc\~2.3.3, l'implémentation de cette fonction comportait un bogue de débordement de tampon  :
       elle  renvoyait  la  liste  complète des groupes de l'utilisateur user dans le tableau groups, même si le
       nombre de groupes était supérieur à *ngroups.

EXEMPLES

       Le programme ci-dessous affiche la liste des groupes  auxquels  appartient  l'utilisateur  indiqué  comme
       premier  argument  de  la  ligne  de  commande.  Le  second argument indique la valeur ngroups à passer à
       getgrouplist(). La session shell suivante montre des exemples d'utilisation de ce programme :

           $ ./a.out cecilia 0
           getgrouplist() returned -1; ngroups = 3
           $ ./a.out cecilia 3
           ngroups = 3
           16 (dialout)
           33 (video)
           100 (users)

   Source du programme

       #include <errno.h>
       #include <grp.h>
       #include <pwd.h>
       #include <stdio.h>
       #include <stdlib.h>

       int
       main(int argc, char *argv[])
       {
           int ngroups;
           struct passwd *pw;
           struct group *gr;
           gid_t *groups;

           if (argc != 3) {
               fprintf(stderr, "Utilisation : %s <user> <ngroups>\n", argv[0]);
               exit(EXIT_FAILURE);
           }

           ngroups = atoi(argv[2]);

           groups = malloc(sizeof(*groups) * ngroups);
           if (groups == NULL) {
               perror("malloc");
               exit(EXIT_FAILURE);
           }

           /* Extraire la structure passwd (contient le premier identifiant
              de groupe de l'utilisateur). */

           errno = 0;
           pw = getpwnam(argv[1]);
           if (pw == NULL) {
               if (errno)
                   perror("getpwnam");
               else
                   fprintf(stderr, "utilisateur inconnu\n");
               exit(EXIT_FAILURE);
           }

           /* Récupérer la liste de groupes. */

           if (getgrouplist(argv[1], pw->pw_gid, groups, &ngroups) == -1) {
               fprintf(stderr, "getgrouplist() returned -1; ngroups = %d\n",
                       ngroups);
               exit(EXIT_FAILURE);
           }

           /* Afficher la liste de groupes récupérés avec les noms de groupes. */

           fprintf(stderr, "ngroups = %d\n", ngroups);
           for (int j = 0; j < ngroups; j++) {
               printf("%d", groups[j]);
               gr = getgrgid(groups[j]);
               if (gr != NULL)
                   printf(" (%s)", gr->gr_name);
               printf("\n");
           }

           exit(EXIT_SUCCESS);
       }

VOIR AUSSI

       getgroups(2), setgroups(2), getgrent(3), group_member(3), group(5), passwd(5)

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> et Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>

       Cette  traduction  est  une  documentation libre ; veuillez vous reporter à la GNU General Public License
       version 3 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.9.1                    15 juin 2024                                   getgrouplist(3)