Provided by: manpages-de-dev_1.4-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 pufferlaenge,
                   struct passwd **ergebnis);

       int getpwuid_r(uid_t uid, struct passwd *pwd,
                   char *puffer, size_t pufferlaenge,
                   struct passwd **ergebnis);

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

       getpwnam_r(), getpwuid_r():
           _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _BSD_SOURCE || _SVID_SOURCE || _POSIX_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 Benutzer-ID 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;        /* Benutzer-ID */
               gid_t   pw_gid;        /* Gruppen-ID */
               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 setzten *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  Es wurde ein Signal abgefangen.

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

       EMFILE Im aufrufenden Prozess  war  schon  die  maximale  Anzahl  (OPEN_MAX)  von  Dateien
              geöffnet.

       ENFILE Im System wurde bereits die maximale Anzahl Dateien geöffnet.

       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

   Multithreading (siehe pthreads(7))
       The getpwnam()  and getpwuid()  functions are not thread-safe.

       The getpwnam_r()  and getpwuid_r()  functions are thread-safe.

KONFORM ZU

       SVr4, 4.3BSD, POSIX.1-2001. 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   Benutzer-ID  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

       This  page  is  part  of release 3.54 of the Linux man-pages project. A description of the
       project,    and    information    about    reporting    bugs,    can    be    found     at
       http://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

       Die deutsche Übersetzung dieser Handbuchseite wurde von 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>.