getgroups
Section: System Calls (2)
Updated: 5 février 2023
Index
Return to Main Contents
NOM
getgroups, setgroups - Lire et écrire la liste des groupes additionnels d'un
processus
BIBLIOTHÈQUE
Bibliothèque C standard (libc, -lc)
SYNOPSIS
#include <unistd.h>
int getgroups(int size, gid_t list[]);
#include <grp.h>
int setgroups(size_t size, const gid_t *_Nullable list);
Exigences de macros de test de fonctionnalités pour la glibc (consulter
feature_test_macros(7)) :
setgroups() :
Depuis la glibc 2.19 :
_DEFAULT_SOURCE
glibc 2.19 et antérieures :
_BSD_SOURCE
DESCRIPTION
getgroups() renvoie dans la liste list les identifiants des groupes
additionnels du processus appelant. Le paramètre size doit indiquer le
nombre maximal d'éléments qui peuvent être stockés dans le tampon pointé par
list. Si le processus appelant est membre de plus de size groupes
additionnels, cela génère une erreur.
Il n'est pas précisé si l'ID du groupe effectif du processus appelant est
inclus dans la liste renvoyée (ainsi, une application doit aussi appeler
getegid(2) et ajouter ou supprimer la valeur qui en résulte).
Si size vaut zéro, list n'est pas modifiée, mais le nombre total de
groupes additionnels pour le processus est renvoyé. Cela permet à l'appelant
de déterminer la taille d'une liste list allouée dynamiquement à utiliser
dans un appel à getgroups() ultérieur.
setgroups() définit des identifiants de groupe additionnel pour le
processus appelant. Les privilèges appropriés sont nécessaires (voir la
description de EPERM ci-dessous). Le paramètre size indique le nombre
d'identifiants de groupe additionnel du tampon pointé par list. Un
processus peut supprimer tous ses groupes additionnels :
setgroups(0, NULL);
VALEUR RENVOYÉE
En cas de succès, getgroups() renvoie le nombre d'identifiants de groupe
additionnel. En cas d'erreur, -1 est renvoyé et errno est positionné
pour indiquer l'erreur.
En cas de succès, setgroups() renvoie 0. En cas d'erreur, -1 est
renvoyé et errno est positionné pour indiquer l'erreur.
ERREURS
- EFAULT
-
list contient une adresse non autorisée.
getgroups() peut également échouer avec les erreurs suivantes :
- EINVAL
-
size est inférieur au nombre d'identifiants de groupe additionnel, et
n'est pas nul.
setgroups() peut également échouer avec les erreurs suivantes :
- EINVAL
-
size est plus grand que NGROUPS_MAX (32 avant Linux 2.6.4 ; 65536
depuis Linux 2.6.4).
- ENOMEM
-
Plus assez de mémoire.
- EPERM
-
Le processus appelant n'a pas de privilèges suffisants (l'appelant n'a pas
la capacité CAP_SETGID dans l'espace de noms utilisateur où il réside).
- EPERM (depuis Linux 3.19)
-
L'utilisation de setgroups() est interdite dans cet espace de noms
utilisateur. Voir la description de /proc/pid/setgroups dans
user_namespaces(7).
STANDARDS
getgroups() : SVr4, 4.3BSD, POSIX.1-2001, POSIX.1-2008.
setgroups() : SVr4, 4.3BSD. Depuis que setgroups() exige des
privilèges, il n'est pas traité dans POSIX.1.
NOTES
Un processus peut avoir jusqu'à NGROUPS_MAX identifiants de groupe
additionnel en plus de son identifiant de groupe effectif. La constante
NGROUPS_MAX est définie dans <limits.h>. Le jeu d'identifiants
de groupe additionnel est hérité du processus parent, et est préservé au
travers des appels à execve(2).
Le nombre maximal d'identifiants de groupe additionnel peut être obtenu
pendant l'exécution au moyen de sysconf(3) :
long ngroups_max;
ngroups_max = sysconf(_SC_NGROUPS_MAX);
La valeur de retour maximale de getgroups() ne peut pas être plus grande
que 1 plus cette valeur. Depuis Linux 2.6.4, le nombre maximal
d’identifiants de groupe additionnel est aussi exposé à l’aide du fichier
/proc/sys/kernel/ngroups_max en lecture seule et spécifique à Linux.
L'appel système getgroups() originel de Linux ne gérait que des
identifiants de groupe sur 16 bits. En conséquence, Linux 2.4 a ajouté
getgroups32() qui prend en charge des identifiants 32 bits. La fonction
getgroups() de la glibc qui l'encapsule gère de manière transparente ces
différences entre noyaux.
différences entre bibliothèque C et noyau
Au niveau du noyau, les ID d'utilisateur et de groupe représentent un
attribut par thread. Cependant, POSIX exige que tous les threads d'un
processus partagent les mêmes droits. L'implémentation des threads NPTL gère
les exigences de POSIX en fournissant des fonctions enveloppes pour les
appels système qui modifient les UID et les GID du processus. Ces fonctions
enveloppes (dont celle de setgroups()) utilisent une technique basée sur
le signal pour s'assurer que quand un thread modifie les droits, tous les
autres threads du processus modifient également leurs droits. Pour des
détails, voir nptl(7).
VOIR AUSSI
getgid(2), setgid(2), getgrouplist(3), group_member(3),
initgroups(3), capabilities(7), credentials(7)
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>,
David Prévot <david@tilapin.org>,
Cédric Boutillier <cedric.boutillier@gmail.com>,
Frédéric Hantrais <fhantrais@gmail.com>
et
Jean-Philippe MENGUAL <jpmengual@debian.org>
Cette traduction est une documentation libre ; veuillez vous reporter à la
GNU General Public License version 3
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 à
Index
- NOM
-
- BIBLIOTHÈQUE
-
- SYNOPSIS
-
- DESCRIPTION
-
- VALEUR RENVOYÉE
-
- ERREURS
-
- STANDARDS
-
- NOTES
-
- différences entre bibliothèque C et noyau
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 04:12:07 GMT, May 18, 2024