Provided by: manpages-fr-dev_4.15.0-9_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   (consulter
   feature_test_macros(7)) :

       getgrouplist():
           Depuis la version 2.19 de la glibc :
               _DEFAULT_SOURCE
           Versions 2.19 et antérieures de la glibc :
               _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.

ATTRIBUTS

       Pour une explication des termes utilisés dans cette section, consulter attributes(7).

       ┌─────────────────────────────────────────────────┬──────────────────────┬────────────────┐
       │InterfaceAttributValeur         │
       ├─────────────────────────────────────────────────┼──────────────────────┼────────────────┤
       │getgrouplist()                                   │ Sécurité des threads │ MT-Safe locale │
       └─────────────────────────────────────────────────┴──────────────────────┴────────────────┘

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.

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 <stdio.h>
       #include <stdlib.h>
       #include <grp.h>
       #include <pwd.h>

       int
       main(int argc, char *argv[])
       {
           int ngroups;
           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]);

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

COLOPHON

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

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> et David Prévot <david@tilapin.org>

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