Provided by: manpages-de-dev_1.11-1_all bug

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 Speicher aufgebraucht.

       EPERM  Der aufrufende Prozess hat unzureichende Rechte (es fehlt die CAP_SETGID-Capability).

       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

       SVr4,  4.3BSD.  Die Funktion getgroups() ist in POSIX.1-2001 und POSIX.1-2008 enthalten. Seit 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 Kernelebene sind die Benutzer-ID und die Gruppen-ID ein threadweises Attribut. POSIX gibt  vor,  dass
       alle    Threads    in   einem   Prozess   gemeinsame   Legitimierungsdaten   (Credentials)   haben.   Die
       NPTL-Threading-Implementierung setzt die POSIX-Vorgaben durch Wrapper-Funktionen  für  die  verschiedenen
       Systemaufrufe um, welche die Benutzer- und Gruppen-IDs entsprechend ändern. Diese Wrapper-Funktionen (zum
       Beispiel  jene  für  setgroups())  nutzen  eine  signalbasierte Technik, um die Legitimierungsdaten aller
       Threads in einem Prozess zu ändern, wenn ein Prozess diese Daten ändert. Details  hierzu  finden  Sie  in
       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.04  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 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>,    Chris    Leick    <c.leick@vollbio.de>    und    Mario    Blättermann
       <mario.blaettermann@gmail.com> 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                                             23. Juli 2015                                     GETGROUPS(2)