Provided by: manpages-de-dev_0.10-1_all bug

BEZEICHNUNG

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

"UBERSICHT

       #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 zuruck, die
       aus einem Datensatz herausgeloste  Felder  aus  der  Passwort-Datenbank
       enthalt  (z.B.  die  lokale  Passwortdatei,  NIS  und  LDAP),  die  zum
       Benutzername name passen.

       Die Funktion getpwnam() gibt einen Zeiger auf eine Struktur zuruck, die
       aus  einem  Datensatz  herausgeloste  Felder aus der Passwort-Datenbank
       enthalt, 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 uber 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 Lange 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.

       Die  maximal  benotigte  GroBe  fur  puffer kann herausgefunden werden,
       indem sysconf(3) mit dem Argument _SC_GETPW_R_SIZE_MAX benutzt wird.

R"UCKGABEWERT

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

       Der Ruckgabewert konnte auf einen statischen  Bereich  zeigen  und  von
       nachfolgenden  Aufrufen  von  getpwent(3),  getpwnam() oder getpwuid(3)
       uberschrieben werden. (Ubergeben Sie den zuruckgegebenen  Zeiger  nicht
       an free(3).)

       Bei  Erfolg geben getpwnam_r() und getpwuid_r() Null zuruck und setzten
       *ergebnis auf pwd. Falls  kein  passender  Passwort-Datensatz  gefunden
       wurde, geben diese Funktionen 0 zuruck und speichern NULL in *ergebnis.
       Im Fall eines Fehlers wird eine Fehlernummer zuruckgegeben 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

       EMFILE Im   aufrufenden  Prozess  wurde  bereits  die  maximale  Anzahl
              (OPEN_MAX) Dateien geoffnet.

       ENFILE Im System wurde bereits die maximale Anzahl Dateien geoffnet.

       ENOMEM Der Speicher reicht nicht aus, um ihn fur die Struktur passwd zu
              reservieren.

       ERANGE Der fur den Puffer bereitgestellte Platz reicht nicht aus.

ANMERKUNGEN

       Die  Benutzer-Passwortdatenbank  bezieht sich meistens auf /etc/passwd.
       Bei  aktuellen  Systemen  bezieht  sie   sich   jedoch   auBerdem   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       fur       Systemdatenbanken        und
              Namens-Dienst-Umschalter (>>Name Service Switch<<)

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  >>RUCKGABEWERT<<   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  konnte.  Dies
       macht  es  aber  unmoglich  Fehler  zu  erkennen.  Es kann argumentiert
       werden, dass errno von  POSIX  unverandert  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    enthalt    den    Namen    des    anfanglichen
       Arbeitsverzeichnisses  des  Benutzers. Anmeldeprogramme benutzen diesen
       Wert,  um  die  Umgebungsvariable  HOME  fur   die   Anmelde-Shell   zu
       initialisieren.  Eine Anwendung, die das Home-Verzeichnis des Benutzers
       feststellen mochte, sollte  den  Wert  von  HOME  (anstatt  des  Wertes
       getpwuid(getuid())->pw_dir)   kontrollieren,   da   dies  dem  Benutzer
       erlaubt, seine Vorstellung von >>das Home-Verzeichnis<<  wahrend  einer
       Anmeldesitzung  zu  andern. Um das (anfangliche) Home-Verzeichnis eines
       anderen      Benutzers      festzustellen,      ist      es       notig
       getpwnam(>>Benutzername<<)->pw_dir oder ahnliches zu benutzen.

BEISPIEL

       Das  folgende  Programm  demonstriert den Gebrauch von getpwnam_r(), um
       den  volstandigen  Benutzernamen  und  die  Benutzer-ID  fur  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   Veroffentlichung   3.32   des   Projekts
       Linux-man-pages.  Eine Beschreibung des Projekts und Informationen, wie
       Fehler    gemeldet     werden     konnen,     finden     sich     unter
       http://www.kernel.org/doc/man-pages/.

"UBERSETZUNG

       Die  deutsche Ubersetzung dieser Handbuchseite wurde von Martin Schulze
       <joey@infodrom.org> und Chris Leick <c.leick@vollbio.de> erstellt.

       Diese Ubersetzung ist Freie Dokumentation; lesen Sie  die  GNU  General
       Public   License   Version   3  oder  neuer  bezuglich  der  Copyright-
       Bedingungen. Es wird KEINE HAFTUNG ubernommen.

       Wenn  Sie  Fehler  in  der  Ubersetzung  dieser  Handbuchseite  finden,
       schicken     Sie     bitte     eine     E-Mail     an     <debian-l10n-
       german@lists.debian.org>.