Provided by: manpages-fr-dev_4.23.1-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\[u00A0]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  ⟨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⟩.