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