Provided by: manpages-de-dev_0.10-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.

       Die  maximal  benötigte  Größe  für  puffer kann herausgefunden werden,
       indem sysconf(3) mit dem Argument _SC_GETPW_R_SIZE_MAX benutzt wird.

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

       EMFILE Im   aufrufenden  Prozess  wurde  bereits  die  maximale  Anzahl
              (OPEN_MAX) 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 Der für den Puffer bereitgestellte Platz reicht nicht aus.

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«)

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

       Diese  Seite  ist  Teil  der   Veröffentlichung   3.32   des   Projekts
       Linux-man-pages.  Eine Beschreibung des Projekts und Informationen, wie
       Fehler    gemeldet     werden     können,     finden     sich     unter
       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>.