Provided by: manpages-de-dev_2.14-1_all bug

BEZEICHNUNG

       getpwnam, getpwnam_r, getpwuid, getpwuid_r - Eintrag in Passwortdatei abfragen

ÜBERSICHT

       #include <sys/types.h>
       #include <pwd.h>

       struct passwd *getpwnam(const char *name);

       struct passwd *getpwuid(uid_t uid);

       int getpwnam_r(const char *Name, struct passwd *pwd,
                      char *Puffer, size_t Pufferlänge, struct passwd **Ergebnis);

       int getpwuid_r(uid_t uid, struct passwd *pwd,
                      char *Puffer, size_t Pufferlänge, struct passwd **Ergebnis);

   Mit Glibc erforderliche Makros (siehe feature_test_macros(7)):

       getpwnam_r(), getpwuid_r():
           _POSIX_C_SOURCE
               || /* Glibc-Versionen <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

BESCHREIBUNG

       Die  Funktion  getpwnam()  gibt  einen  Zeiger  auf  eine  Struktur  zurück, die aus einem
       Datensatz herausgelöste  Felder  aus  der  Passwort-Datenbank  enthält  (z.B.  die  lokale
       Passwortdatei, NIS und LDAP), die zum Benutzername name passen.

       Die  Funktion  getpwnam()  gibt  einen  Zeiger  auf  eine  Struktur  zurück, die aus einem
       Datensatz herausgelöste Felder aus der Passwort-Datenbank enthält, die zur Benutzerkennung
       uid passen.

       Die Struktur passwd ist in <pwd.h> wie folgt definiert:

           struct passwd {
               char   *pw_name;       /* Benutzername */
               char   *pw_passwd;     /* Passwort des Benutzers */
               uid_t   pw_uid;        /* Benutzerkennung */
               gid_t   pw_gid;        /* Gruppenkennung */
               char   *pw_gecos;      /* Benutzerinformationen */
               char   *pw_dir;        /* Home-Verzeichnis */
               char   *pw_shell;      /* Anmelde-Shell */
           };

       Weitere Informationen über die Felder dieser Struktur finden Sie unter passwd(5).

       Die  Funktionen  getpwnam_r()  und  getpwuid_r()  erhalten  die gleichen Informationen wie
       getpwnam()  und getpwuid(), speichern aber die empfangene passwd-Struktur  an  dem  Platz,
       auf  den  pwd  zeigt.  Die Zeichenkettenfelder, auf die die Mitglieder der passwd-Struktur
       zeigen, werden im Puffer puffer der Länge pufferlaenge gespeichert.  Ein  Zeiger  auf  das
       Ergebnis  (im  Erfolgsfall)  oder NULL (im Fall, dass kein Eintrag gefunden wurde oder ein
       Fehler auftrat) wird in *ergebnis gespeichert.

       Der Aufruf

           sysconf(_SC_GETPW_R_SIZE_MAX)

       liefert entweder -1 ohne Änderung von errno oder die anfänglich vorgeschlagene  Größe  für
       buf zurück. (Falls diese Größe zu klein ist, schlägt der Aufruf mit ERANGE fehl. In diesem
       Fall kann der Aufrufende es mit einem größeren Puffer erneut versuchen.)

RÜCKGABEWERT

       Die Funktionen getpwnam() und getpwuid() geben einen Zeiger auf eine passwd-Struktur  oder
       NULL zurück, falls kein passender Eintrag gefunden wird oder ein Fehler auftritt. Wenn ein
       Fehler auftritt wird errno entsprechende gesetzt. Falls  errno  nach  dem  Aufruf  geprüft
       werden soll, sollte es vor dem Aufruf auf Null gesetzt werden.

       Der Rückgabewert könnte auf einen statischen Bereich zeigen und von nachfolgenden Aufrufen
       von getpwent(3), getpwnam() oder getpwuid(3)  überschrieben  werden.  (Übergeben  Sie  den
       zurückgegebenen Zeiger nicht an free(3).)

       Bei  Erfolg  geben getpwnam_r() und getpwuid_r() Null zurück und setzen *ergebnis auf pwd.
       Falls kein passender Passwort-Datensatz gefunden wurde, geben diese  Funktionen  0  zurück
       und   speichern   NULL  in  *ergebnis.  Im  Fall  eines  Fehlers  wird  eine  Fehlernummer
       zurückgegeben und NULL in *ergebnis gespeichert.

FEHLER

       0 oder ENOENT oder ESRCH oder EBADF oder EPERM oder …
              Der angegebene name oder die uid wurde nicht gefunden

       EINTR  Ein Signal wurde abgefangen; siehe signal(7).

       EIO    E/A-Fehler (engl. I/O).

       EMFILE Die Beschränkung pro Prozess der Anzahl offener Datei-Deskriptoren wurde erreicht.

       ENFILE Die systemweite Beschränkung für die Gesamtzahl offener Dateien wurde erreicht.

       ENOMEM Der Speicher reicht nicht aus, um ihn für die Struktur passwd zu reservieren.

       ERANGE Zu wenig Pufferspeicher bereitgestellt.

ANMERKUNGEN

       Die Benutzer-Passwortdatenbank  bezieht  sich  meistens  auf  /etc/passwd.  Bei  aktuellen
       Systemen bezieht sie sich jedoch außerdem auf netzwerkweite Datenbanken, die NIS, LDAP und
       andere lokale Datenbanken benutzen. Dies ist in /etc/nsswitch.conf konfiguriert.

DATEIEN

       /etc/passwd
              lokale Passwortdatenbank

       /etc/nsswitch.conf
              Konfigurationsdatei  für  Systemdatenbanken  und  Namens-Dienst-Umschalter   (»Name
              Service Switch«)

ATTRIBUTE

       Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.

       ┌──────────────┬───────────────────────┬─────────────────────────────┐
       │SchnittstelleAttributWert                        │
       ├──────────────┼───────────────────────┼─────────────────────────────┤
       │getpwnam()    │ Multithread-Fähigkeit │ MT-Unsafe race:pwnam locale │
       ├──────────────┼───────────────────────┼─────────────────────────────┤
       │getpwuid()    │ Multithread-Fähigkeit │ MT-Unsafe race:pwuid locale │
       ├──────────────┼───────────────────────┼─────────────────────────────┤
       │getpwnam_r(), │ Multithread-Fähigkeit │ MT-Safe locale              │
       │getpwuid_r()  │                       │                             │
       └──────────────┴───────────────────────┴─────────────────────────────┘

KONFORM ZU

       POSIX.1-2001,   POSIX.1-2008,   SVr4,  4.3BSD.  Das  Feld  pw_gecos  ist  in  POSIX  nicht
       spezifiziert, aber in den meisten Implementierungen vorhanden.

ANMERKUNGEN

       Die unter »RÜCKGABEWERT« angegebene Formulierung stammt von POSIX.1-2001. Sie lautet nicht
       Fehler  »nicht  gefunden«  und gibt daher nicht an, welchen Wert errno in dieser Situation
       haben könnte. Dies macht es aber  unmöglich  Fehler  zu  erkennen.  Es  kann  argumentiert
       werden,  dass  errno von POSIX unverändert bleiben sollte, wenn ein Eintrag nicht gefunden
       wird. Experimente auf verschiedenen UNIX-Systemen  zeigen  aber,  dass  viele  verschieden
       Werte  in  dieser  Situation  auftreten:  0,  ENOENT, EBADF, ESRCH, EWOULDBLOCK, EPERM und
       wahrscheinlich andere.

       Das Feld pw_dir enthält den Namen des anfänglichen  Arbeitsverzeichnisses  des  Benutzers.
       Anmeldeprogramme benutzen diesen Wert, um die Umgebungsvariable HOME für die Anmelde-Shell
       zu initialisieren. Eine Anwendung, die  das  Home-Verzeichnis  des  Benutzers  feststellen
       möchte,   sollte  den  Wert  von  HOME  (anstatt  des  Wertes  getpwuid(getuid())->pw_dir)
       kontrollieren, da dies dem Benutzer erlaubt, seine Vorstellung von »das  Home-Verzeichnis«
       während  einer  Anmeldesitzung  zu  ändern.  Um  das  (anfängliche) Home-Verzeichnis eines
       anderen  Benutzers  festzustellen,  ist  es  nötig  getpwnam(»Benutzername«)->pw_dir  oder
       ähnliches zu benutzen.

BEISPIEL

       Das  folgende  Programm  demonstriert  den  Gebrauch von getpwnam_r(), um den volständigen
       Benutzernamen und  die  Benutzerkennung  für  den  als  Befehlszeilenargument  angegebenen
       Benutzernamen herauszufinden.

       #include <pwd.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <unistd.h>
       #include <errno.h>

       int
       main(int argc, char *argv[])
       {
           struct passwd pwd;
           struct passwd *ergebnis;
           char *puffer;
           size_t puffergroesse;
           int s;

           if (argc != 2) {
               fprintf(stderr, "Aufruf: %s Benutzername\n", argv[0]);
               exit(EXIT_FAILURE);
           }

           puffergroesse = sysconf(_SC_GETPW_R_SIZE_MAX);
           if (puffergroesse == -1)          /* Wert war unklar */
               puffergroesse = 16384;        /* Sollte mehr als genug sein */

           buf = malloc(puffergroesse);
           if (puffer == NULL) {
               perror("malloc");
               exit(EXIT_FAILURE);
           }

           s = getpwnam_r(argv[1], &pwd, puffer, puffergroesse, &ergebnis);
           if (ergebnis == NULL) {
               if (s == 0)
                   printf("Nicht gefunden\n");
               else {
                   errno = s;
                   perror("getpwnam_r");
               }
               exit(EXIT_FAILURE);
           }

           printf("Name: %s; UID: %ld\n", pwd.pw_gecos, (long) pwd.pw_uid);
           exit(EXIT_SUCCESS);
       }

SIEHE AUCH

       endpwent(3),  fgetpwent(3),  getgrnam(3), getpw(3), getpwent(3), getspnam(3), putpwent(3),
       setpwent(3), nsswitch.conf(5), passwd(5)

KOLOPHON

       Diese Seite  ist  Teil  der  Veröffentlichung  4.16  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    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>.