Provided by: manpages-fr-dev_4.21.0-2_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().

VERSIONS

       Cette fonction est présente depuis la 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 │
       └────────────────────────────────────────────────────────────────┴──────────────────────┴────────────────┘

STANDARDS

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

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 <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, "Usage: %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). */

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

           /* 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 (size_t 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   ⟨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⟩.