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

NOM

       getgrouplist - Obtenir la liste des groupes auxquels appartient un utilisateur

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():
           Since glibc 2.19:
               _DEFAULT_SOURCE
           Glibc 2.19 and earlier:
               _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 getgrouplist()
       ultérieur.

VERSIONS

       Cette fonction est présente depuis glibc 2.2.4.

ATTRIBUTS

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

CONFORMITÉ

       Cette fonction n'est pas standard, elle est apparue sur la plupart des BSD.

BOGUES

       Dans les versions de la glibc antérieures à la 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 <stdio.h>
       #include <stdlib.h>
       #include <grp.h>
       #include <pwd.h>

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

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

           ngroups = atoi(argv[2]);

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

           /* Fetch passwd structure (contains first group ID for user) */

           pw = getpwnam(argv[1]);
           if (pw == NULL) {
               perror("getpwnam");
               exit(EXIT_SUCCESS);
           }

           /* Retrieve group list */

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

           /* Display list of retrieved groups, along with group names */

           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)

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>   et   David   Prévot
       <david@tilapin.org>

       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.

GNU                                              1 novembre 2020                                 GETGROUPLIST(3)