Scroll to navigation

GETGROUPS(2) Linux Programmeurs Handleiding GETGROUPS(2)

NAAM

getgroups, setgroups - krijg/zet een lijst van aanvullende groep ID's

SAMENVATTING

#include <unistd.h>
int getgroups(int grootte, gid_t lijst[]);
#include <grp.h>
int setgroups(size_t grootte, const gid_t *lijst);

Feature Test Macro´s eisen in glibc (zie feature_test_macros(7)):

setgroups(2):


Vanaf glibc 2.19:
_DEFAULT_SOURCE
Glibc 2.19 en eerder:
_BSD_SOURCE

BESCHRIJVING

getgroups() geeft de aanvullende groep ID´s van het aanroepende proces terug in lijst. Het argument grootte dient gezet te worden op het maximum aantal elementen dat kan worden opgeslagen in de buffer aangewezen door lijst. Als het aanroepende proces lid is van meer dan grootte aanvullende groepen, dat treedt een fout op.

Het is niet gespecificeerd of het effectieve groep ID van het aanroepende proces is bevat in de geretourneerde lijst. (Dus, aan applicatie moet ook getegid(2) aanroepen en de resulterende waarde verwijderen of toevoegen.

Als grootte nul is dan wordt lijst niet veranderd, maar het gehele aantal van aanvullende groepen voor hetproces wordt teruggegeven.

setgroups() zet de aanvullende groepen voor een proces. Alleen de super-gebruiker mag deze functie gebruiken.


setgroups(0, NULL);

EIND WAARDE

Bij success geeft getgroups() het aantal aanvullende groep ID's terug. Bij falen wordt -1 teruggegeven, en errno wordt overeenkomstig gezet.

Bij success geeft setgroups() nul terug. Bij falen wordt -1 teruggegeven, en wordt errno overeenkomstig gezet.

FOUTEN

lijst heeft een ongeldig adres.

getgroups() kan ook nog falen met de volgende fout:

grootte is kleiner dan het aantal aanvullende groep ID's, maar is niet nul.

getgroups() kan ook nog falen met de volgende fout:

grootte is groter dan NGROUPS_MAX (32 voor Linux 2.6.4; 65536 sinds Linux 2.6.4).
Geen geheugen meer.
Het aanroepende proces heeft onvoldoende rechten (De aanroeper heeft niet de CAP_SETGID capaciteit in de gebruiker naamruimte waarin het zich bevind.
Het gebruik van setgroups() wordt gewijgerd in deze gebruiker naamruimte. Zie de beschrijving van /proc/[pid]/setgroups in user_namespaces(7).

VOLDOET AAN

getgroups(): SVr4, 4.3BSD, POSIX.1-2001, POSIX.1-2008.

setgroups(): SVr4, 4.3BSD. Omdat setgroups() een privilege vereist, is deze niet beschreven in POSIX.1.

OPMERKINGEN

Een proces kan tot NGROUPS_MAX aanvullende groep ID´s hebben boven op het effectieve groep ID. De constante NGROUPS_MAX is gedefinieerd in <limits.h>. De verzameling van aanvullende groep ID´s wordt geërfd van het ouder proces en blijft bewaard langs een execve(2).

Het maximum aantal aanvullende groep ID´s kan worden gevonden tijdens het uitvoeren door gebruik te maken van sysconf(3):


long ngroups_max;
ngroups_max = sysconf(_SC_NGROUPS_MAX);

De maximale uitvoer waarde van getgroups() kan niet groter zijn dan een meer dan deze waarde. Vanaf Linux 2.6.4, is het maximum aantal aanvullende groep ID´s ook zichtbaar via het Linux specifieke alleen-lezen bestand /proc/sys/kernel/ngroups_max.

De originele Linux getgroups() systeem aanroep ondersteunde alleen 16-bit groep ID´s. Vervolgens voegde Linux 2.4 getgroups32() toe, die 32-bit groep ID´s ondersteunde. De glibc getgroups() omwikkel functie handelt de verschillen tussen kernel variaties transparant af.

C library/kernel verschillen

Op kernel niveau, zijn gebruiker ID´s en groep ID´s een per-thread attribute. Hoewel POSIX vereist dat alle threads in een proces dezelfde identificatie hebben. De NPTL threading implementaties voldoen aan de POSIX eis door omwikkel functies voor de verschillende systeem aanroepen die de UID´s en GID´s veranderen te implementeren. Deze omwikkel functies (inclusief die voor setgroups()) gebruiken een op een signaal gebaseerde techniek om te verzekeren dat wanneer in een thread de identificatie verandert, alle andere threads in het proces ook hun identificatie veranderen. Voor details zie nptl(7).

ZIE OOK

getgid(2), setgid(2), getgrouplist(3), group_member(3), initgroups(3), capabilities(7), credentials(7)

COLOFON

Deze pagina is onderdeel van release 5.13 van het Linux man-pages-project. Een beschrijving van het project, informatie over het melden van bugs en de nieuwste versie van deze pagina zijn op https://www.kernel.org/doc/man-pages/ te vinden.

VERTALING

De Nederlandse vertaling van deze handleiding is geschreven door Jos Boersema <joshb@xs4all.nl>, Mario Blättermann <mario.blaettermann@gmail.com> en Luc Castermans <luc.castermans@gmail.com>

Deze vertaling is vrije documentatie; lees de GNU General Public License Version 3 of later over de Copyright-voorwaarden. Er is geen AANSPRAKELIJKHEID.

Indien U fouten in de vertaling van deze handleiding zou vinden, stuur een e-mail naar debian-l10n-dutch@lists.debian.org.

22 maart 2021 Linux