3. prosince 2006

Projekt do ISA aneb jak znechutit LDAP

Tento semestr máme ve škole předmět s názvem ISA (Síťové aplikace a správa sítí). Je to předmět, který mě baví. Z velké části hlavně proto, že mě sítě živí.

V průběhu semestru byly 3 cvičení. Na prvním se v podstatě nic zvláštního nedělo. Až na druhém a třetím cvičení se psala písemka na ověření znalostí. Přiznávám se, že plný počet jsem poprvé neměl. Chyběl mi jeden bod. Ale i tak jsem byl hotov asi minutu poté co spustil test. Nic nabichleného. Prostě jen zkušenosti. Takže mám 17 bodů (z 18-ti možných) ze cvičení.

Jenže zápočet je až za 20 bodů. Další body se dají získat za projekt. Bylo na výběr několik variant zadání. Vybral jsem si jednoduchý LDAP server. Říkal jsem si: přeci jen, adresářovou službu jsme dělali již vloni a tak by s tím nemusel být problém. To jsem ještě netušil jak šeredně se mýlím.

Vlastní server s nasloucháním na portu a neblokujícím socketem nebyl problém. Některé věci jsem tedy ještě dopisoval, ale jsou to věci s kterými jsem si už hrál.

Načtení databáze do paměti byla už větší sranda, ale nakonec jsem vše nasypal do prostého lineárního seznamu a zaregistroval callback funkci, která se zavolá po příchodu SIGINT - provede uvolnění paměti která byla naalokována při načítání databáze.

Nad filtrováním jsem nadával už delší dobu. Když jsem zjistil, že není nutné implementovat všechny filtry, tak se mi moc ulevilo (nemusel jsem řešit řetězení filtrů AND, OR, NOT). Luxus. Nakonec jsem implementoval filtry EqualityMatch, LessOrEqual, GreaterOrEqual a Substrings. První 3 jsou v podstatě jen variace téhož, takže pohodička. Substrings... Dlouho jsem přemýšlel jak na něj. Nakonec jsem použil strncasecmp pro začátek a konec řetězce a strcasestr (což mě na Debian GNU/Linux donutilo dát na spávné místo #define _GNU_SOURCE) pro hledání v řetězci. Myslím, že se to nakonec docela podařilo.

Takže proč říkám znechutit LDAP?

Nemám zdání, kdo navrhoval adresářovou službu X.500, ale když jsem zkoumal její odlehčenou variantu LDAP, tak jsem nabyl dojmu, že jestli je LDAP podle mě takhle overkill, tak X.500 bude totální masakr. Nakonec jsem do toho přeci jen prokoukl, pochopil jak jsou jednotlivé vrstvy balené ve vlastních obálkách a vyloupal to z nich a dokázal příchozí data správně zpracovat. A pak také výsledek zabalit a odeslat zpátky k uživateli.

Dneska ráno jsem si ještě hrál s timeouty, aby server nezůstal cyklit poté, co se uzavře filedescriptor spojení a další drobné ladění. Ale myslím, že server funguje spolehlivě. Hurá!

Žádné komentáře:

Okomentovat