Rudolf's Radius Klassenbibliothek
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