Provided by: manpages-de-dev_2.5-1_all 

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():
Seit Glibc 2.19:
_DEFAULT_SOURCE
Glibc 2.19 und älter:
_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 (siehe die Beschreibung des Fehlers EPERM unten). 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 Speicher aufgebraucht.
EPERM Der aufrufende Prozess hat unzureichende Rechte (dem Aufrufenden fehlt die CAP_SETGID-Capability
in dem Benutzernamensraum, in dem er sich befindet).
EPERM (seit Linux 3.19)
Die Verwendung von setgroups() wird in diesem User-Namensraum verweigert. Siehe die Beschreibung
von /proc/[pid]/setgroups in user_namespaces(7).
KONFORM ZU
getgroups(): SVr4, 4.3BSD, POSIX.1-2001, POSIX.1-2008.
setgroups(): SVr4, 4.3BSD. Da setgroups() Privilegien benötigt, ist es nicht durch POSIX.1 abgedeckt.
ANMERKUNGEN
Ein Prozess kann bis zu NGROUPS_MAX zusätzliche Gruppen-IDs ergänzend zur effektiven Gruppen-ID haben.
Die Konstante NGROUPS_MAX ist in <limits.h> definiert. 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 zur Laufzeit durch Benutzung von sysconf(3)
bestimmt werden:
long ngroups_max;
ngroups_max = sysconf(_SC_NGROUPS_MAX);
Der maximale Rückgabewert von getgroups() kann nicht um mehr als eins größer als dieser Wert sein. Seit
Linux 2.6.4 wird die maximale Anzahl zusätzlicher Gruppen-IDs außerdem über die nur lesbare
Linux-spezifische Datei /proc/sys/kernel/ngroups_max offengelegt.
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.
Unterschiede C-Bibliothek/Kernel
Auf der Kernelebene sind Benutzer- und Gruppenkennungen Attribute pro Thread. POSIX verlangt aber, dass
sich alle Threads in einem Prozess die gleichen Berechtigungsnachweise teilen. Die
NPTL-Threading-Implementierung behandelt die POSIX-Anforderungen durch Bereitstellung von
Wrapper-Funktionen für die verschiedenen Systemaufrufe, die die UIDs und GIDs der Prozesse ändern. Diese
Wrapper-Funktionen (darunter die für setgroups()) verwenden eine signalbasierte Technik, um
sicherzustellen, dass bei der Änderung der Berechtigungsnachweise eines Threads auch alle anderen Threads
des Prozesses ihre Berechtigungsnachweise ändern. Für Details siehe nptl(7).
SIEHE AUCH
getgid(2), setgid(2), getgrouplist(3), group_member(3), initgroups(3), capabilities(7), credentials(7)
KOLOPHON
Diese Seite ist Teil der Veröffentlichung 4.15 des Projekts Linux-man-pages. Eine Beschreibung des
Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden
sich unter https://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>, Chris Leick <c.leick@vollbio.de>, Mario Blättermann
<mario.blaettermann@gmail.com> und Dr. Tobias Quathamer <toddy@debian.org> 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>.
Linux 15. September 2017 GETGROUPS(2)