BEZEICHNUNG¶
getgroups, setgroups - abfragen/setzen von zusätzlichen Gruppen-IDs
ÜBERSICHT¶
#include <sys/types.h>
#include <unistd.h>
int getgroups(int groesse, gid_t liste[]);
#include <grp.h>
int setgroups(size_t groesse, const gid_t
*liste);
Mit Glibc erforderliche Makros (siehe
feature_test_macros(7)):
setgroups(): _BSD_SOURCE
BESCHREIBUNG¶
getgroups() gibt die zusätzlichen Gruppen-IDs des aufrufenden
Prozesses in
liste zurück. Das Argument
groesse sollte auf
die maximale Anzahl der Elemente gesetzt werden, die in dem Puffer gespeichert
werden können, auf den
liste zeigt. Falls der aufrufende Prozess
Mitglied von mehr als
groesse Gruppen ist, dann führt dies zu
einem Fehler. Es ist nicht beschrieben, ob die effektive Gruppen-ID des
aufrufenden Prozesses in der zurückgegebenen Liste enthalten ist. (Daher
sollte eine Anwendung auch
getegid(2) aufrufen und den resultierenden
Wert hinzufügen oder entfernen.)
Wenn
groesse Null ist, wird
liste nicht verändert, es wird
aber die Gesamtzahl der zusätzlichen Gruppen-IDs für den Prozess
zurückgegeben. Dies erlaubt es dem Aufrufenden, die Größe einer
dynamisch reservierten
liste festzulegen, die in einem weiteren Aufruf
von
getgroups() benutzt wird.
setgroups() setzt die zusätzlichen Gruppen-IDs für den
aufrufenden Prozess. Es werden geeignete Privilegien benötigt (Linux; die
Fähigkeit
CAP_SETGID). Das Argument
groesse gibt die Anzahl
der zusätzlichen Gruppen-IDs im Puffer an, auf den
liste zeigt.
RÜCKGABEWERT¶
Bei Erfolg gibt
getgroups() die Anzahl der zusätzlichen Gruppen-IDs
zurück. Bei aufgetretenem Fehler wird -1 geliefert und
errno wird
entsprechend gesetzt.
Bei Erfolg gibt
setgroups() 0 zurück. Bei aufgetretenem Fehler wird
-1 geliefert und
errno wird entsprechend gesetzt.
FEHLER¶
- EFAULT
- liste hat eine ungültige Adresse.
getgroups() kann außerdem mit dem folgenden Fehler fehlschlagen:
- EINVAL
- groesse ist kleiner als die Anzahl der
zusätzlichen Gruppen-IDs, aber nicht Null.
setgroups() kann überdies mit den folgenden Fehlern fehlschlagen:
- EINVAL
- groesse ist größer als NGROUPS_MAX
(32 vor Linux 2.6.4; 65536 seit Linux 2.6.4).
- ENOMEM
- Platz im Hauptspeicher reicht nicht aus
- EPERM
- Der aufrufende Prozess hat unzureichende Privilegien.
SVr4, 4.3BSD. Die Funktion
getgroups() ist in POSIX.1-2001 enthalten.
Seit
setgroups() Privilegien benötigt, ist es nicht durch
POSIX.1-2001 abgedeckt.
ANMERKUNGEN¶
Ein Prozess kann bis zu
NGROUPS_MAX zusätzliche Gruppen-IDs
ergänzend zur effektiven Gruppen-ID haben. Die Zusammenstellung
zusätzlicher Gruppen-IDs wird vom Elternprozess geerbt und über ein
execve(2) aufbewahrt.
Die maximale Anzahl von zusätzlichen Gruppen-IDs kann durch Benutzung von
sysconf(3) bestimmt werden:
long ngroups_max;
ngroups_max = sysconf(_SC_NGROUPS_MAX);
Der maximale Rückgabewert von
getgroups() kann nicht
größer als dieser Wert plus eins sein.
Der Original-Linux-Systemaufruf
getgroups() unterstützte nur
16-Bit-Gruppen-IDs. Nachfolgend fügte Linux 2.4
getgroups32()
hinzu, das 32-Bit-IDs unterstützte. Die Glibc-Wrapper-Funktion
getgroups() stellt die Änderungen transparent über
Kernel-Versionen hinweg bereit.
SIEHE AUCH¶
getgid(2),
setgid(2),
getgrouplist(3),
initgroups(3),
capabilities(7),
credentials(7)
KOLOPHON¶
Diese Seite ist Teil der Veröffentlichung 3.42 des Projekts Linux-
man-pages. Eine Beschreibung des Projekts und Informationen, wie Fehler
gemeldet werden können, finden sich unter
http://www.kernel.org/doc/man-pages/.
ÜBERSETZUNG¶
Die deutsche Übersetzung dieser Handbuchseite wurde von René Tschirley
<gremlin@cs.tu-berlin.de>, Martin Schulze <joey@infodrom.org> und
Chris Leick <c.leick@vollbio.de> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public
License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird
KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken
Sie bitte eine E-Mail an <debian-l10n-german@lists.debian.org>.