Portál AbcLinuxu, 12. května 2025 08:17

Dotaz: Bash parser ldif (ldap) súboru

5.12.2013 14:47 Peter
Bash parser ldif (ldap) súboru
Přečteno: 355×
Odpovědět | Admin
Příloha:
Dobrý deň vám prajem.

Ako mailový server používam zimbru a potrebujem to z určitých dôvodov komplet úplne na novo preinštalovať. Spravil som si zálohu mailboxov pomocou
/opt/zimbra/bin/zmmailbox -z -m adresa@domena.sk getRestURL "//?fmt=tgz" > adresa_domena.sk.tgz
a dump ldap databázy (vzor ldif súboru je v prílohe).

Teraz si potrebujem zautomatizovať vytvorenie a import mailboxov zo zálohy a na to potrebujem nejaký bash parser toho ldif súboru, keďže v ňom sú potrebné informácie. Teda poznám konkrétnu mailovú adresu (čiže napríklad adresa@domena.sk) a pomocou nej potrebujem do premenných v skripte vytiahnúť "givenName, sn, displayName, description, userPassword". Ináč povedané, potrebujem zautomatizovať tieto tri riadky:
/opt/zimbra/bin/zmprov ca adresa@domena.sk dummypassword givenName '$givenName' sn '$sn' displayName '$displayName' description '$description'
/opt/zimbra/bin/zmprov ma adresa@domena.sk userPassword '$userPassword'
/opt/zimbra/bin/zmmailbox -z -m adresa@domena.sk postRestURL "//?fmt=tgz&resolve=reset" adresa_domena.sk.tgz
Za akúkoľvek pomoc vám vopred veľmi pekne ďakujem.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

6.12.2013 09:14 pakanek | skóre: 28 | Vyškov
Rozbalit Rozbalit vše Re: Bash parser ldif (ldap) súboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pomocí grep si můžeš vytáhnot řádek začínající určitým slovem a pomocí sedu odstranit jeho začátek až po dvojtečku s mezerou např.:
grep '^zimbraMailTransport:' zimbra.txt | sed -e 's/^.*: //'
lmtp:mail.domena.sk:7025
HESLO=`grep '^userPassword:' zimbra.txt | sed -e 's/^.*: //'`
echo $HESLO
heslo
Všechno dobré je pro něco zlé.
6.12.2013 11:07 Peter
Rozbalit Rozbalit vše Re: Bash parser ldif (ldap) súboru
To áno - na ten grep som už myslel. Problém ale je ten, že v dotyčnom súbore je viacero "blokov". Ja som dal výpis len jedného na ilustráciu. Čiže ja najprv musím "identifikovať" konkrétny blok pomocou mailovej adresy a až potom môžem na konkrétny výber poštvať grep. :-) Ďakujem.
6.12.2013 11:42 Logik
Rozbalit Rozbalit vše Re: Bash parser ldif (ldap) súboru
No tak použij např. fgrep s parametrem -A nebo -B, tím najdi ten blok a druhým fgrepem pak najdi v tom bloku co potřebuješ.

Ale asi nejjednodušejc to uděláš awkem, nějak takhle (za predpokladu, ze jsou udaje vzdy stejne serazeny] - je to jen pseudokod, detaily jiste zvladnes

BEGIN { blok = 0 }
/regexp meho bloku/ { blok = 1 }
/prijmeni/ { if(blok) print prijmeni }
/jmeno/ { if(blok) print prijmeni }
/atd.../ {  }
/konec bloku/ {if(blok) exit; }

6.12.2013 11:42 NN
Rozbalit Rozbalit vše Re: Bash parser ldif (ldap) súboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nenelo by to byt cele jinak? Treba exportovat cely LDAP a znovu ho naimportovat? Nasel jsem nekolk navodu a vsude se to importovalo a exportovalo cele, viz napr. zde.
Josef Kufner avatar 6.12.2013 11:47 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Bash parser ldif (ldap) súboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nepotřebuješ to v bashi, stačí ti jakýkoliv skriptovací jazyk. Nech si jím vygenerovat skript, který provede import a ten pak přes rouru pošli shellu. A nebo ho nech rovnou volat ty příkazy, ale tím se připravíš o náhled před provedením operací.

Google říká, že pro PHP pár knihoven existuje, pro jiné jazyky také něco bude.

A nebo můžeš ten dump nahrát zpět do ldap databáze a zeptat se jí na to, co potřebuješ. Ona tomu bude rozumět asi nejlépe.
Hello world ! Segmentation fault (core dumped)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.