getspent(3C) getspent(3C)
NAME
getspent, getspnam, lckpwdf, ulckpwdf, setspent, endspent, fgetspent -
Eintrag der Shadow-Paßwortdatei ändern
SYNTAX
#include <shadow.h>
struct spwd *getspent(void);
struct spwd *getspnam(const char *name);
int lckpwdf(void);
int ulckpwdf(void);
void setspent(void);
void endspent(void);
struct spwd *fgetspent(FILE *fp);
BESCHREIBUNG
Die Routinen getspent() und getspnam() liefern beide einen Zeiger auf
ein Objekt zurück, das die Felder einer Zeile aus der Datei
/etc/shadow enthält. Jede Zeile aus der Datei enthält eine "Shadow-
Kennwort"-Struktur, die in der Datei shadow.h vereinbart wird:
struct spwd{
char *spnamp;
char *sppwdp;
long splstchg;
long spmin;
long spmax;
long spwarn;
long spinact;
long spexpire;
unsigned long spflag;
};
Die Routine getspent() liefert beim ersten Aufruf einen Zeiger auf die
erste Struktur vom Typ spwd aus der Datei zurück; danach wird der Zei-
ger auf die nächste spwd-Struktur aus der Datei zurückgegeben; die
komplette Datei kann somit durch aufeinanderfolgende Funktionsaufrufe
durchsucht werden. Die Routine getspnam() sucht vom Anfang der Datei
an, bis der Anmeldename name gefunden wird, und liefert einen Zeiger
auf die entsprechende Struktur zurück, in der der Name gefunden wurde.
Die Funktionen getspent() und getspnam() schreiben in die Felder
spmin, spmax, splstchg, spwarn, spinact, spexpire oder spflag
den Wert -1, wenn das entsprechende Feld aus der Datei /etc/shadow
leer ist. Ist das Dateiende erreicht, tritt ein Lese- oder Formatfeh-
ler in der Datei auf, liefern diese Funktionen einen Nullzeiger und
setzen errno auf EINVAL.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
getspent(3C) getspent(3C)
/etc/.pwd.lock ist die Sperrdatei. Sie wird verwendet, um den Zugriff
zum Ändern der Kennwortdateien /etc/passwd und /etc/shadow zu erlan-
gen. lckpwdf() und ulckpwdf() sind Routinen, die den Änderungszugriff
für die Kennwortdatei über die Sperrdatei erhalten. Ein Prozeß ruft
zuerst lckpwdf() auf, um die Sperrdatei zu sperren; dadurch erhält er
das exklusive Recht, die Dateien /etc/passwd und/oder /etc/shadow zu
ändern. Nach Durchführung der Änderungen sollte ein Prozeß die Sperre
der Sperrdatei über ulckpwdf() wieder aufheben. Dieser Mechanismus
verhindert das gleichzeitige Ändern der Kennwortdateien.
lckpwdf() versucht, die Datei /etc/.pwd.lock innerhalb von 15 Sekunden
zu sperren. Gelingt dies nicht, weil /etc/.pwd.lock beispielsweise
schon gesperrt ist, wird -1 zurückgeliefert. Bei erfolgreicher Durch-
führung wird ein Wert ungleich -1 zurückgegeben.
ulckpwdf() versucht, die Datei /etc/.pwd.lock freizugeben. Gelingt
dies nicht, weil /etc/.pwd.lock bereits freigegeben ist, wird -1
zurückgegeben. Bei erfolgreicher Durchführung wird 0 zurückgegeben.
Der Aufruf der Routine setspent() verursacht das Zurückspulen der
Shadow-Kennwortdatei; dadurch können wiederholte Suchdurchläufe ausge-
führt werden. Die Routine endspent() wird aufgerufen, um die Shadow-
Kennwortdatei zu schließen, nachdem die Bearbeitung beendet ist.
Die Routine fgetspent() liefert einen Zeiger auf die nächste spwd-
Struktur im Stream fp zurück, die dem Format von /etc/shadow ent-
spricht.
ERGEBNIS
getspent(), getspnam(), lckpwdf(), ulckpwdf() und fgetspent() liefern
einen Nullzeiger bei Erreichen des Dateiendes oder bei Auftreten eines
Fehlers.
HINWEISE
Diese Routine ist nur zum internen Gebrauch gedacht; Kompatibilität
wird nicht garantiert.
Alle Daten befinden sich in einem statischen Bereich; die Daten soll-
ten also kopiert werden, falls sie gesichert werden sollen.
DATEIEN
/etc/shadow
/etc/passwd
/etc/.pwd.lock
SIEHE AUCH
getpwent(3C), putpwent(3C), putspent(3C).
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98