.\" -*- coding: UTF-8 -*-
.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu)
.\" and Copyright (C) 2008, 2010, 2015, Michael Kerrisk <mtk.manpages@gmail.com>
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.\" Modified Thu Oct 31 12:04:29 1996 by Eric S. Raymond <esr@thyrsus.com>
.\" Modified, 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com>
.\"     Added notes on capability requirements
.\" 2008-05-03, mtk, expanded and rewrote parts of DESCRIPTION and RETURN
.\"     VALUE, made style of page more consistent with man-pages style.
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH getgroups 2 "5 lutego 2023 r." "Linux man\-pages 6.03" 
.SH NAZWA
getgroups, setgroups \- pobiera/ustawia listę identyfikatorów grup
dodatkowych
.SH BIBLIOTEKA
Standardowa biblioteka C (\fIlibc\fP, \fI\-lc\fP)
.SH SKŁADNIA
.nf
\fB#include <unistd.h>\fP
.PP
\fBint getgroups(int \fP\fIsize\fP\fB, gid_t \fP\fIlist\fP\fB[]);\fP
.PP
\fB#include <grp.h>\fP
.PP
\fBint setgroups(size_t \fP\fIsize\fP\fB, const gid_t *_Nullable \fP\fIlist\fP\fB);\fP
.fi
.PP
.RS -4
Wymagane ustawienia makr biblioteki glibc (patrz \fBfeature_test_macros\fP(7)):
.RE
.PP
\fBsetgroups\fP():
.nf
    Od glibc 2.19:
        _DEFAULT_SOURCE
    glibc 2.19 i wcześniejsze:
        _BSD_SOURCE
.fi
.SH OPIS
\fBgetgroups\fP() zwraca w \fIlist\fP identyfikatory grup dodatkowych dla
wywołującego procesu. Argument \fIsize\fP powinien być ustawiony na maksymalną
liczbę elementów, jakie mogą być przechowywane w buforze, na który wskazuje
\fIlist\fP. Jeśli wywołujący proces jest członkiem więcej niż \fIsize\fP grup
dodatkowych, wystąpi błąd.
.PP
Nie jest określone, czy efektywny ID grupy procesu wywołującego będzie
znajdować się na zwróconej liście (zatem aplikacja powinna wywołać również
\fBgetegid\fP(2) i dodać lub usunąć otrzymaną wartość).
.PP
Jeśli \fIsize\fP jest równe zero, to \fIlist\fP nie jest modyfikowane, lecz
zwracana jest ogólna liczba dodatkowych grup procesu. Pozwala to
wywołującemu określić rozmiar dynamicznie przydzielanej \fIlist\fP, do użycia w
kolejnych wywołaniach do \fBgetgroups\fP(2).
.PP
\fBsetgroups\fP() ustawia identyfikatory grup dodatkowych procesu
wywołującego. Konieczne są odpowiednie przywileje (zob. opis błędu \fBEPERM\fP
poniżej). Argument \fIsize\fP określa liczbę identyfikatorów grup dodatkowych w
buforze, na który wskazuje \fIlist\fP. Proces może porzucić wszystkie swoje
grupy dodatkowe poniższym wywołaniem:
.PP
.in +4n
.EX
setgroups(0, NULL);
.EE
.in
.SH "WARTOŚĆ ZWRACANA"
Po pomyślnym zakończeniu \fBgetgroups\fP() zwraca liczbę grup dodatkowych. Po
błędzie zwracane jest \-1 i ustawiane \fIerrno\fP wskazując błąd.
.PP
Po pomyślnym zakończeniu \fBsetgroups\fP() zwraca zero. Po błędzie zwracane
jest \-1 i ustawiane \fIerrno\fP wskazując błąd.
.SH BŁĘDY
.TP 
\fBEFAULT\fP
\fIlist\fP ma nieprawidłowy adres.
.PP
\fBgetgroups\fP() może dodatkowo zawieść z następującym błędem:
.TP 
\fBEINVAL\fP
\fIsize\fP jest mniejsze niż liczba grup dodatkowych, ale niezerowe.
.PP
\fBsetgroups\fP() może dodatkowo zawieść z następującymi błędami:
.TP 
\fBEINVAL\fP
\fIsize\fP jest większe niż \fBNGROUPS_MAX\fP (32 przed Linuksem 2.6.4; 65536 od
Linuksa 2.6.4).
.TP 
\fBENOMEM\fP
Brak pamięci.
.TP 
\fBEPERM\fP
Proces wywołujący ma niewystarczające przywileje (wywołujący nie posiada
przywileju (ang. capability) \fBCAP_SETGID\fP w przestrzeni nazw użytkownika, w
której występuje).
.TP 
\fBEPERM\fP (od Linuksa 3.19)
Odmówiono użycia \fBsetgroups\fP() w tej przestrzeni nazw użytkownika. Więcej
informacji w opisie \fI/proc/\fPpid\fI/setgroups\fP w \fBuser_namespaces\fP(7).
.SH STANDARDY
\fBgetgroups\fP(): SVr4, 4.3BSD, POSIX.1\-2001, POSIX.1\-2008.
.PP
\fBsetgroups\fP(): SVr4, 4.3BSD. Ponieważ \fBsetgroups\fP() wymaga przywileju, nie
jest opisana w POSIX.1.
.SH UWAGI
Proces może posiadać maksymalnie \fBNGROUPS_MAX\fP grup dodatkowych oprócz
efektywnego ID grupy. Stała \fBNGROUPS_MAX\fP jest definiowana w
\fI<limits.h>\fP. Zbiór grup dodatkowych jest dziedziczony po procesie
rodzicielskim i jest zachowywany na przestrzeni \fBexecve\fP(2).
.PP
Maksymalna liczba grup dodatkowych może być odnaleziona w czasie
uruchomienia za pomocą \fBsysconf\fP(3):
.PP
.in +4n
.EX
long ngroups_max;
ngroups_max = sysconf(_SC_NGROUPS_MAX);
.EE
.in
.PP
Maksymalna zwracana wartość \fBgetgroups\fP() nie może być większa od
powyższej. Od Linuksa 2.6.4, maksymalna liczba grup dodatkowych jest również
ujawniana w typowo linuksowym pliku tylko do odczytu:
\fI/proc/sys/kernel/ngroups_max\fP.
.PP
.\"
Pierwotne linuksowe wywołania systemowe \fBgetgroups\fP() obsługiwały jedynie
16\-bitowe identyfikatory grup. Następnie, w Linuksie 2.4 dodano
\fBgetgroups32\fP(), obsługujące identyfikatora 32\-bitowe. Funkcja opakowująca
\fBgetgroups\fP() biblioteki glibc obsługuje te warianty pomiędzy wersjami
jądra w sposób przezroczysty.
.SS "Różnice biblioteki C/jądra"
Na poziomie jądra, identyfikatory użytkownika i grupy są atrybutami
przynależnymi wątkowi. Jednak POSIX wymaga, aby wszystkie wątki procesu
dzieliły te same poświadczenia. Implementacja wątkowania NPTL obsługuje
wymagania POSIX za pomocą funkcji opakowujących dla różnych wywołań
systemowych zmieniających UID\-y i GID\-y procesów. Te funkcje opakowujące (w
tym te dla \fBsetgroups\fP()) wykorzystują technikę opartą na sygnałach aby
zapewnić, że gdy jeden wątek zmieni swe poświadczenia, wszystkie inne wątki
procesu również to uczynią. Więcej szczegółów w podręczniku \fBnptl\fP(7).
.SH "ZOBACZ TAKŻE"
\fBgetgid\fP(2), \fBsetgid\fP(2), \fBgetgrouplist\fP(3), \fBgroup_member\fP(3),
\fBinitgroups\fP(3), \fBcapabilities\fP(7), \fBcredentials\fP(7)
.PP
.SH TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są:
Przemek Borys <pborys@dione.ids.pl>,
Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl>
i
Michał Kułach <michal.kulach@gmail.com>
.
.PP
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach
licencji można uzyskać zapoznając się z
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License w wersji 3
.UE
lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
.PP
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy
dyskusyjnej
.MT manpages-pl-list@lists.sourceforge.net
.ME .
