focal (3) getgrouplist.3.gz

Provided by: manpages-fr-dev_3.65d1p1-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.65 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> ».