jammy (3) getpwnam.3.gz

Provided by: manpages-de-dev_4.13-4_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 Puffergröße, struct passwd **Ergebnis);

       int getpwuid_r(uid_t uid, struct passwd *pwd,
                      char *Puffer, size_t Puffergröße, 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
       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
       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.

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.10  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⟩.