Loading

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  (voir
   feature_test_macros(7)) :

       getgrouplist() : _BSD_SOURCE

       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.23 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

       Cette page de manuel a été traduite et mise à  jour  par  Alain  Portal
       <aportal  AT  univ-montp2  DOT  fr>  entre  2004  et  2006,  et  mise à
       disposition sur http://manpagesfr.free.fr/.

       Les mises à jour et corrections de la version présente dans Debian sont
       directement gérées par Florentin Duneau <fduneau@gmail.com> et l’équipe
       francophone de traduction de Debian.

       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> ».