getpwnam(3) Library Functions Manual getpwnam(3) BEZEICHNUNG getpwnam, getpwnam_r, getpwuid, getpwuid_r - Eintrag in Passwortdatei abfragen BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT #include #include struct passwd *getpwnam(const char *Name); struct passwd *getpwuid(uid_t uid); int getpwnam_r(const char *restrict Name, struct passwd *restrict pwd, char Puffer[restrict .Puffergrosse], size_t Puffergrosse, struct passwd **restrict Ergebnis); int getpwuid_r(uid_t uid, struct passwd *restrict pwd, char Puffer[restrict .Puffergrosse], size_t Puffergrosse, struct passwd **restrict Ergebnis); Mit Glibc erforderliche Feature-Test-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 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 Benutzerkennung uid passen. Die Struktur passwd ist in 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 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 Puffergrosse 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 Anderung von errno oder die anfanglich vorgeschlagene Grosse fur Puffer zuruck. (Falls diese Grosse zu klein ist, schlagt der Aufruf mit ERANGE fehl. In diesem Fall kann der Aufrufende es mit einem grosseren Puffer erneut versuchen.) RUCKGABEWERT 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 gesetzt, um den Fehler anzuzeigen. 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 setzen *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 Ein Signal wurde abgefangen; siehe signal(7). EIO E/A-Fehler (engl. I/O). EMFILE Die Beschrankung pro Prozess der Anzahl offener Datei-Deskriptoren wurde erreicht. ENFILE Die systemweite Beschrankung fur die Gesamtzahl offener Dateien wurde erreicht. ENOMEM Der Speicher reicht nicht aus, um ihn fur die Struktur passwd zu reservieren. ERANGE Zu wenig Pufferspeicher bereitgestellt. DATEIEN /etc/passwd lokale Passwortdatenbank ATTRIBUTE Siehe attributes(7) fur eine Erlauterung der in diesem Abschnitt verwandten Ausdrucke. +--------------+-------------------------+-----------------------------+ |Schnittstelle | Attribut | Wert | +--------------+-------------------------+-----------------------------+ |getpwnam() | Multithread-Fahigkeit | MT-Unsicher race:pwnam | | | | locale | +--------------+-------------------------+-----------------------------+ |getpwuid() | Multithread-Fahigkeit | MT-Unsicher race:pwuid | | | | locale | +--------------+-------------------------+-----------------------------+ |getpwnam_r(), | Multithread-Fahigkeit | MT-Sicher locale | |getpwuid_r() | | | +--------------+-------------------------+-----------------------------+ VERSIONEN Das Feld pw_gecos ist in POSIX nicht spezifiziert, aber in den meisten Implementierungen vorhanden. STANDARDS POSIX.1-2008. GESCHICHTE POSIX.1-2001, SVr4, 4.3BSD. 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. BEISPIELE Das folgende Programm demonstriert den Gebrauch von getpwnam_r(), um den volstandigen Benutzernamen und die Benutzerkennung fur den als Befehlszeilenargument angegebenen Benutzernamen herauszufinden. #include #include #include #include #include #include int main(int argc, char *argv[]) { struct passwd pwd; struct passwd *result; char *buf; long bufsize; int s; if (argc != 2) { fprintf(stderr, "Usage: %s username\n", argv[0]); exit(EXIT_FAILURE); } bufsize = sysconf(_SC_GETPW_R_SIZE_MAX); if (bufsize == -1) /* Wert war unklar */ bufsize = 16384; /* Sollte mehr als genug sein */ buf = malloc(bufsize); if (buf == NULL) { perror("malloc"); exit(EXIT_FAILURE); } s = getpwnam_r(argv[1], &pwd, buf, bufsize, &result); if (result == NULL) { if (s == 0) printf("Not found\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), passwd(5) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Martin Schulze , Chris Leick und Mario Blattermann 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 die Mailingliste der Ubersetzer . Linux man-pages 6.06 31. Oktober 2023 getpwnam(3)