Archiv pro štítek: OpenLDAP

Jak změnit structural objectClass v OpenLDAP

Typy objectClass

objectClass (třída objektu/objektová třída) může být následujících typů:

  1. STRUCTURAL (konstrukční) – Každý objekt musí mít právě jednu, je využita k vytváření datových objektů v backendu a je tedy povinná.
  2. AUXILIARY (pomocná/doplňující) – Může být přidána nebo odebrána na kterémkoli objektu podle toho jak se nám to hodí.
  3. ABSTRACT (abstraktní) – Nejběžnější abstraktní třída je objectClass top která je na nejvyšší úrovni hierarchického stromu tříd objektů.

Chyba při změně structural třídy

Pokud se pokusíte změnit objectClass která je structural tak se to nepovede a LDAP zahlásí chybu podobnou této:

[LDAP: error code 69 – structural object class modification from ‚Person‘ to ‚Account‘ not allowed]

Až dosud jsem to tedy řešil tak že jsem objekt na kterém jsem potřeboval takovouto změnu provést vyexportoval do ldif formátu, provedl změnu, původní objekt smazal a naimportoval upravený objekt. Nevýhoda tohoto řešení je že se musí něco mazat, což není nikdy moc dobré. Může dojít k chybě při importu a uživatel se nebude moci chvilku přihlásit.

Další možností bylo zastavit slapd, vyexportoval pomocí slapcat databázi do ldif, provést změnu a znovu naimportovat databázi pomocí slapadd. Mělo to výhodu v tom že zůstala zachovaná metadata objektů (kdo ho vytvořil a kdy), nevýhodou byla samozřejmě odstávka LDAP serveru a reindexace všech objektů při importu, což může chvilku trvat.

Využití Relax Rules control

Pro mě novou možností je využití příznaku control:

Při využití příznaku control s hodnotou 1.3.6.1.4.1.4203.666.5.12 lze structural objectClass změnit. Samozřejmě musí Relax Rules control podporovat váš slapd daemon. Velkou výhodou tohoto řešení je to že se nic nemusí mazat.

Více si o tom můžete přečíst na tomto odkazu https://tools.ietf.org/html/draft-zeilenga-ldap-relax-03#section-3.1. Jinak já jsem se k této vychytávce dostal přes tento článek.

Záloha Active Directory do čitelného ldif souboru

Jak vytáhnou databázi AD do ldifu

Poměrně chvilku jsem hledal Jak vytáhnout celou databázi Active Directory do ldif souboru. Problém byl v tom že AD vždy po chvilce vrátilo size limit exceeded. Trik je v tom že se musí nástroji ldapsearch nastavit parametr -E kterým řekneme že chceme vždy pouze 1000 položek na stránku a noprompt říká že nechceme potvrzovat stahování jednotlivých stránek:

Zdroj: http://blog.tirasa.net/getting-around-active-directory-search.html

 

Čistý výstup z nástroje ldapsearch

Dekódování z base64 a odstranění zalomení jedním řádkem

Poslední dobou pracuji hodně s MS Active Directory a potřebuji dostat při hledání pomocí nástroje ldapsearch nezalomený výstup a rozkódovaný z base64:

Tento snippet pochází z http://www.private-pages.com/index.php/Ldapsearch_cleanup_output.

OpenLDAP – Bash crop function

V práci občas pracuji s daty která jsou uložená v LDAP databázi. Potřebuji v nich vyhledávat pomocí nástroje ldapsearch z balíku ldap-utils. Bohužel tento nástroj má (alespoň pro mne) nepříjemnou vlastnost – zalamuje delší záznamy a vždycky vypisuje spoustu kravin okolo. 

Jak vypnout zalamování

Až dnes jsem zjistil, že lze vypnout zalamování dlouhých záznamů vypisovaných pomocí ldapsearch – je zapotřebí využití přepínače -o:

ldif-wrap=<width> (in columns, or „no“ for no wrapping)

Skrytí nepotřebných informací ve výpisu

Jako první je potřeba použít u příkazu ldapsearch tři přepínače -LLL, které zajistí vytištění jenom a pouze atributů, které jsou potřeba pro další zpracování.

A single -L restricts the output to LDIFv1. A second -L disables comments. A third -L disables printing of the LDIF version. The default is to use an extended version of LDIF.

Funkce na oříznutí

Tuto funkci jsem si přidal do ~/.bashrc:

Funkce zajišťuje nahrazení zalomení dlouhých položek a následně filtruje pouze hodnotu za dvojtečkou ale pokud jsou data ve formátu base64 tak začínají dvěmi dvojtečkami – na začátku takového řetězce funkce schválně nechá mezeru, aby šlo poznat že jde o base64.

Oříznuté crop funkcí:

Funkce na oříznutí konkrétního atributu se volá takto:

Jak se s tím vypořádali jiní

Podívejte se jak taková crop funkce na oříznutí výstupu může také vypadat: https://richmegginson.livejournal.com/18726.html