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