getgrouplist(3) Library Functions Manual getgrouplist(3) NOM getgrouplist - Obtenir la liste des groupes auxquels appartient un utilisateur BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include int getgrouplist(const char *user, gid_t group, gid_t *groups, int *ngroups); Exigences de macros de test de fonctionnalites pour la glibc (consulter feature_test_macros(7)) : getgrouplist() : Depuis la glibc 2.19 : _DEFAULT_SOURCE glibc 2.19 et anterieures : _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 RENVOYEE 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 ulterieur a getgrouplist(). ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +--------------------------+--------------------------+----------------+ |Interface | Attribut | Valeur | +--------------------------+--------------------------+----------------+ |getgrouplist() | Securite des threads | MT-Safe locale | +--------------------------+--------------------------+----------------+ STANDARDS Aucune. HISTORIQUE glibc 2.2.4. BOGUES Avant la glibc\[u00A0]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. EXEMPLES 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 #include #include #include int main(int argc, char *argv[]) { int ngroups; struct passwd *pw; struct group *gr; gid_t *groups; if (argc != 3) { fprintf(stderr, "Utilisation : %s \n", argv[0]); exit(EXIT_FAILURE); } ngroups = atoi(argv[2]); groups = malloc(sizeof(*groups) * ngroups); if (groups == NULL) { perror("malloc"); exit(EXIT_FAILURE); } /* Extraire la structure passwd (contient le premier identifiant de groupe de l'utilisateur). */ pw = getpwnam(argv[1]); if (pw == NULL) { perror("getpwnam"); exit(EXIT_SUCCESS); } /* Recuperer la liste de groupes. */ if (getgrouplist(argv[1], pw->pw_gid, groups, &ngroups) == -1) { fprintf(stderr, "getgrouplist() returned -1; ngroups = %d\n", ngroups); exit(EXIT_FAILURE); } /* Afficher la liste de groupes recuperes avec les noms de groupes. */ fprintf(stderr, "ngroups = %d\n", ngroups); for (size_t 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) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Pierre Giraud Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 getgrouplist(3)