Rudolf's Radius Klassenbibliothek
Klassenbibliothek
Klasse Nachricht und Unterklassen
Zweck
Die Klasse Nachricht verwaltet den Puffer einer Radius-Nachricht.
Sie enthält Zugriffsoperationen, die direkt auf den gesendeten Inhalt
arbeiten. Man kommt daher ohne dynamisch allokierte Hilfsstrukturen aus.
Zur Bearbeitung gibt es zwei Unterklassen:
- Klasse Empfangen empfängt eine Nachricht und verwaltet sie
- Klasse Zusenden verwaltet das Zusammenstellen der Nachricht
und versendet sie
Komponentenklasse auth_attr
Deklaration in auth_attr.h:
struct auth_attr
{
u_char id;
u_char len;
u_char data[1];
void print(ostream &str);
};
Entscheidend ist der Trick, das Komponente data variabel lang ist.
Arbeitsfunktionen:
- int addattributtolist(u_char *&ptr,u_char attribut,char *wert,size_t len)
- bildet ein Attribut in der einer Liste, wo ptrder Allokationszeiger ist und weiterwndert. wert und len ist die Zeichenkette der Länge len, die in die Liste kopiert werden soll.
- int addattrtolist(u_char *&ptr,Attreintrag *attr,char *value);
- macht im prinzip das selbe wie die vorher beschreibene Funktion, untersucht aber den Typ des Attributs aus dem Attributeintrags des Verzeichnisses
- void getstring(char *s,auth_attr *a)
- liest Zeichenkette aus dem Attribut
- void getuserandrealm(char *user,char *realm,auth_attr *a)
- liest für mehr-Mandaten-radiusd user und realm
aus dem Attribut. Im Attribut steht username@realm.
Ist kein @ vorhanden, so wird realm auf Länge 0 gesetzt.
user und realm sind Zeiger auf einen genügend großen Speicherplatz
- UINT4 getintval(auth_attr *a)
- liest Integerwert aus Attribut
Beschreibung der Klasse Nachricht
Headerfile nachricht.h
Initialisierung
- Nachricht(char *buffer,int bl)
- initialisiert eine nachricht mit einem Puffer buffer der
Länge bl
Abfrage
- int id()
- u_char code()
- bestimmt die Art der Nachricht
- int totallen()
- bestimmt die Gesamtlänge der Nachricht
- const u_char *getdigest()
- const u_char *getvector()
- const u_char *getsecret()
- auth_attr *first()
- liefert das erste Attribut, NULL falls nachricht leer
- auth_attr *next()
- liefert das nächste Attribut bzw. NULL falls Ende der Nachricht
- auth_attr *finde(u_char attribut);
- liefert das Attribut mit der Kennzeichnung attribut bzw.
NULL falls nicht vorhanden.
Es wurde keine Iteratorklasse als notwendig empfunden. Das Programm kann
also die Nachricht mit first() und next() sequentiel durchlesen oder mit finde durchsuchen.
MD5-Security-Things
- int Nachricht::calc_digest(const char *secret)
- calculates the digest in the Nachricht. It is used
for basic auhtorisation and password encription
- int Zusenden::calc_responsedigest(const u_char *rsecret)
- When a Server answers a client, he calulates a responsdigest
with which function.
- int Empfangen::check_reply(const u_char altvector[],char *secret)
- The client keeps the Vector he send, this is the altvector.
The client checks the Servers's answer with this method.
- int ciffrepassword(u_char *clearpass,u_char *encryptpass,int len,const u_char *digest)
- chiffers and dechiffers the password. The result is terminated with the
'\0' Character. The digest can be the Membervariable
of a Nachricht
Ausgabe
Zu Debugging-Zwecken:
- void print(ostream &ostr);
- schreibt die Klasse mit Hilfe des Dictionaries schön in ostr
Berechnung
- int calc_digest(const char *secret);
- berechnet das digest.
Rudolf Weber
Informatik- und Netzwerkverein Ravensburg e.V