Provided by: manpages-fr-dev_3.27fr1.4-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 fonctionnalites  pour  la  glibc  (consultez
   feature_test_macros(7)) :

       getgrouplist() : _BSD_SOURCE

DESCRIPTION

       La  fonction getgrouplist() balaie la base de donnees des groupes (voir
       group(5))  pour  obtenir  la  liste  des  groupes  auxquels  appartient
       l'utilisateur user. Jusqu'a *ngroups de ces groupes sont retournes dans
       le tableau groups.

       S'il n'etait pas parmi les groupes definis pour l'utilisateur user dans
       la  base  de  donnees  des  groupes, group est inclus dans la liste des
       groupes retournee par  getgrouplist ;  typiquement,  cet  argument  est
       specifie comme etant 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 resultat >> :  au  retour,
       il  contient  toujours  le nombre de groupes trouves pour l'utilisateur
       user, incluant group ; cette valeur peut etre superieure au  nombre  de
       groupes enregistres dans groups.

VALEUR RENVOY'EE

       Si  le  nombre  de  groupes  auquel  l'utilisateur  user appartient est
       inferieur ou egal a *ngroups, la valeur *ngroups est renvoyee.

       Si l'utilisateur appartient a plus de *ngroups groupes,  getgrouplist()
       renvoie  -1.  Dans  ce  cas, la valeur renvoyee dans *ngroups peut etre
       utilisee pour redimensionner le tampon passe a un appel  getgrouplist()
       ulterieur.

VERSIONS

       Cette fonction est presente depuis glibc 2.2.4.

CONFORMIT'E

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

BOGUES

       Dans les versions de la glibc anterieures a la 2.3.3,  l'implementation
       de  cette  fonction comportait un bogue de debordement de tampon : elle
       renvoyait la liste complete des groupes de l'utilisateur user  dans  le
       tableau  groups,  meme  si  le  nombre  de  groupes  etait  superieur a
       *ngroups.

EXEMPLE

       Le  programme  ci-dessous  affiche  la  liste  des   groupes   auxquels
       appartient  l'utilisateur indique comme premier argument de la ligne de
       commande. Le second argument indique  la  valeur  ngroups  a  passer  a
       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.27  du  projet  man-pages
       Linux.  Une description du projet et des instructions pour signaler des
       anomalies      peuvent      etre       trouvees       a       l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

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

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

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

       Vous  pouvez  toujours avoir acces a la version anglaise de ce document
       en utilisant la commande << man -L C <section> <page_de_man> >>.