Provided by:
manpages-fr-dev_3.27fr1.4-1_all 
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> >>.