Rudolf's Radius Klassenbibliothek
Left Up Right Klassenbibliothek

Klasse Userrecverw

Zweck

Klasse Userrecverw verwaltet einen Userrecord so, dass die Replyattribute direkt in eine Radius-Nachricht kopiert werden können.

Die Überlegung ist, das die Authoriesierung schnell gehen soll, während die Verwaltung länger Zeit hat.

Die Struktur Userrecord ist die Speicherstruktur in der Datenbank. Sie kann auch über eine Radiusnachricht übertragen werden.

Beschreibung

Headerfile userdict.h

Initialisierung

Userrecverw()
Initialisiert eine leere Struktur
void init(char *buffer)
Initialisiert die Struktur mit einem Arbeitsspeicherplatz
void clear()
setzt die Klasse auf den Ausgangszustand ohne Attribute
setbuffer(char *buffer)
fasst buffer als Userrecord auf und initialisiert die internen Strukturen. Dieses wird beim Dateilesen aufgerufen

Abfrage

Ein extra Iterator wurde als nicht nötig befunden. So kann die Struktur nur sequentiell von einem Aktivitätsträger gelesen werden.
int totallen()
bestimmt die Gesamtlänge
lenreply()
bestimmt die Länge aller reply-Attribute zusammen
auth_attr *firstcheck()
Initialisiert Abfragecursor auf das erste Attribut. zurückgegeben wird Zeiger auf das erste Attribut oder NULL falls leer.
auth_attr *nextcheck()
liefert Zeiger auf nächstes Attribut,NULL falls das letzte schon gelesen wurde.
auth_attr *firstreply()
Initialisiert Abfragecursor auf das erste reply-Attribut. zurückgegeben wird Zeiger auf das erste Attribut oder NULL falls leer.
auth_attr *nextreply()
liefert Zeiger auf nächstes Attribut,NULL falls das letzte schon gelesen wurde.
auth_attr *finde(u_char attribut)
liefert Zeiger auf Attribut mit id==attribut falls im Userrecord vorhanden, NULL sonst
const Userrecord *data()
liefert den Datensatz (gedacht für Speicherung)

Füllen

Zum füllen gibt es ein paar schöne Operationen. Die Stuktur wird erst mit den Check-Attributen, dann mit den Reply-Attributen gefüllt.
Der Parameter cor bedeutet: cor=0 checklist, cor=1 replylist
int add(Attreintrag *attr,char *value,int cor);
int add(u_char attribut,char *wert,int len,int cor);
int add(u_char attribut,UINT4 w,int cor);
int add(auth_attr *a,int cor);
zum kopieren. Falls a==NULL passiert nichts; damit kann man z.B. add(upd.finde(PW_PASSWD),cor) schreiben.

Updateoperation

Wenn der Administrator oder der Nutzer selbst an den Radiusdaemon eine änderungsoperation vollziehen müssen, soll der entsprechende client eine Änderungstransaktion senden. Dazu eignet sich auch der Userrecord als Nachrichteninhalt.

int Userrecv::update(Userrecv &upd,Userrecv &alt) bildet den neuen indem er den alt mit upd abgleicht.

Sonstiges

void print(ostream &ostr);
dient zur Probeausgabe
void ntoh()und void hton()
dienen zur Verpackung und Entpackung über das Netz. (genauere Dokumention: siehe Sourcecode :-)

Rudolf Weber Softwaredesign Ravensburg