Rudolf's Radius Klassenbibliothek
Left Up Right Klassenbibliothek

Bibliothek für Radiusclients

Hier sind Unterprogramme zusammengefasst, die jeder Radiusclient so braucht:
int opensocket(struct sockaddr_in& salocal);
öffnet socket und schreibt lokale Adresse in salocal
int genempfaddr(struct sockaddr_in &saremote,char *addrstr,char *dienst="radius");
ermittelt Integeradresse aus Rechner name oder IP-dressstring und dienst, vobei derradius-Dinet Voreingestellt ist.
struct in_addr myaddr();
Ermittelt die eigene IP-Adresse

Klasse Server

Ein Radiusclient kann fehlertoerant mehrere Radiusserver ansprechen. Ein solcher Serveradresse wird in folgender Listenstruktur Server verwaltet:
Server(char *sname,short port=0);
Konstruktor zum einrichten
const char *name();
const short port();
const sockaddr_in &addr();
liefert die Internetadresse
Server *nxt
Verkettung

Klasse Clientconf

Diese Klasse verwaltet die gesamte Konfiguration eines Clients
Clientconf::Clientconf(int erw)
der Konstruktor liest die Konfiguration aus der in config.h ${RADHOME}/client.conf wobei RADHOME eine Umgebungsvariable ist. Wird diese Umgebungsvariable nicht gesetzt, wird die Datei aus der in config.h angegebenen Defininiton RADCLIENTCONF gelesen.

Funktion komuwithserver

Diese Funktion wickelt die Komunikation mit dem radiusserver ab:
int komuwithserver(int sock,Zusenden &frage,Empfangen &antw,Server *sliste,const Clientsecurityinfo &csi,const Clientconf &cc)
Sie fragt solange alle Server in der Liste durch, is einer anwortet. Jeder Server wird entsprechend in der cc angegebenen Werten für radius_timeout und radius_retries lange versucht.
Es werden hier auch die Pakete mit einer Sequenznummer versehen.
Rückgabewert: 1 falls erfolgreich, 0 sonst

Die Struktur Clientsecurityinfo übergibt die Sicherheitsrelevanten Daten zur Verkürzung der Parameterliste und hat folgenden Aufbau:

u_char vector[]
der Zufallsgenerierte Schlüsselteil
Clientinfo *cli
die Information des Rechners mit dem Secret
Die Idee, die Secret-Ermittlung auch in diese Prozedur zu integrieren, ist naheliegend. Ebenso die der Lokalisierung des UDP-Socket in dieser Prozedur. Da aber die Digestermittlung auch zur Passwortcodierung benötigt wird, soll sich diese Prozedur sich damit nicht beschäftigen. Die anderen radiusimplementierungen übergeben in ihren dynamisch aufgebauten intrenen Strukturen die Passwörter unverschlüsselt und kodieren diese an dieser Stelle beim einpacken. Dies wird abgelehnt, da diese Radiusimplementierung auf die dymanisch allokierten internen Strukturen verzichtet. Ein anderer Kompromiss wäre, die Passwörter unverschüsselt zu einzupacken und die diese zu codieren.
Diese Aufblähung der Parameterliste it za ästätisch nicht so schön, scheint miraber als das kleinste Übel.
Rudolf Weber Informatik- und Netzwerkverein Ravensburg e.V