Provided by: manpages-fr-dev_3.57d1p1-1_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   (consultez
   feature_test_macros(7)) :

       getgrouplist() : _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.

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.

EXEMPLE

       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 j, ngroups;
           gid_t *groups;
           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]);

           groups = malloc(ngroups * sizeof (gid_t));
           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 (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(5), passwd(5)

COLOPHON

       Cette  page  fait partie de la publication 3.57 du projet man-pages Linux. Une description
       du projet et des  instructions  pour  signaler  des  anomalies  peuvent  être  trouvées  à
       l'adresse http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Depuis    2010,    cette   traduction   est   maintenue   à   l'aide   de   l'outil   po4a
       <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du  projet
       perkamon <http://perkamon.alioth.debian.org/>.

       Alain   Portal  <http://manpagesfr.free.fr/> (2004-2006).  Florentin  Duneau  et  l'équipe
       francophone de traduction de Debian (2006-2009).

       Veuillez     signaler     toute     erreur     de     traduction     en     écrivant     à
       <debian-l10n-french@lists.debian.org>   ou   par   un  rapport  de  bogue  sur  le  paquet
       manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de  ce  document  en  utilisant  la
       commande « man -L C <section> <page_de_man> ».