Provided by: manpages-de-dev_4.15.0-9_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 *restrict Name, struct passwd *restrict pwd,
                      char *restrict Puffer, size_t Puffergröße,
                      struct passwd **restrict Ergebnis);
       int getpwuid_r(uid_t uid, struct passwd *restrict pwd,
                      char *restrict Puffer, size_t Puffergröße,
                      struct passwd **restrict Ergebnis);

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

       getpwnam_r(), getpwuid_r():
       _POSIX_C_SOURCE
           || /* Glibc <= 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 Puffergröße  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
       Puffer  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 gesetzt, um den Fehler anzuzeigen. 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.

BEISPIELE

       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 <stdint.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 Puffergröße;
           int s;

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

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

           buf = malloc(Puffergröße);
           if (puffer == NULL) {
               perror("malloc");
               exit(EXIT_FAILURE);
           }

           s = getpwnam_r(argv[1], &pwd, Puffer, Puffergröße, &Ergebnis);
           if (Ergebnis == NULL) {
               if (s == 0)
                   printf("Nicht gefunden\n");
               else {
                   errno = s;
                   perror("getpwnam_r");
               }
               exit(EXIT_FAILURE);
           }

           printf("Name: %s; UID: %jd\n", pwd.pw_gecos,
                   (intmax_t) 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  5.13  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 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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 die Mailingliste der Übersetzer ⟨debian-l10n-german@lists.debian.org⟩.