ldap
Honza Petrous
hop na unibase.cz
Pátek Říjen 27 10:53:19 CEST 2000
> >
> > 2, Konvertnu je jednoduchym programkem do podoby "spravneho
> LDIF tvaru",
> > tj. vsechny radky, ktere obsahuji texty se znaky > 127 konvertuju
> > do unicode a nasledne zakoduju base64. Nakonec pridam za
> nazev atributu
> > jeste jednu dvojtecku (coz signalizuje base64 kodovana data).
> >
> > Takze z puvodniho 'description: blabol' (znak `a` je s carkou :-)
> > dostanu 'description:: UGV0cm91xaE='
> >
>
> Ten "jednoduchy programek" roste kde? ;-)
>
> Existuje neco univerzalne pouzitelneho, nebo jste si napsal skript,
> ktery vyuziva 'recode' a 'ldif' ?
>
Zde Vas asi zklamu. "Nejak historicky" se stalo, ze jsem nasedl
do jine lodi nez mainstream open source komunity, takze moje
skriptiky jsou "univerzalne pouzitelne" az po doistalaci jazyku Pike :)
Zde Vam muzu nazorne predvest tento prekodovac, ale verim, ze stejnym
zpusobem je to mozne napsat i v Perlu, Pythonu ...
/Honza
-------------- encode-ldir.pike ------------------------
#!/usr/local/bin/pike
int check8(string s) {
// Testuje, obsahuje-li retezec znak s kodem > 127
int flg = 0;
foreach(s/1, string n) {
flg = (n[0] > 127);
if(flg)
break;
}
return flg;
}
int main(int argc, array(string) argv) {
object(Stdio.FILE) fdin=Stdio.FILE(); // objekt pro bufferovany vstupni
soubor
object(Stdio.File) fdout=Stdio.File(); // objeckt pro nebufferovany
vystupni s.
string ln, enc;
if(argc < 3) {
write("Chyba: chybi argument!\n");
return 1;
}
if(!fdin->open(argv[1], "r")) { // otevre vstupni soubor pro cteni
write("Chyba: nemuzu otevrit soubor: "+(string)argv[1]+" !\n");
return 2;
}
if(!fdout->open(argv[2], "cwt")) { // otevre/vytvori vystupni soubor
write("Chyba: nemuzu otevrit soubor: "+(string)argv[2]+" !\n");
return 3;
}
while(stringp(ln=fdin->gets())) { // cte radek po radku
if(check8(ln)) {
array(string) hd = ln / ": "; // vytvori pole retezcu
if (sizeof(hd)>1) {
enc=Locale.Charset.decoder("iso-8859-2")->clear()->feed(hd[1..] * ":
")->drain();
// prelozi hodnotu attributu do Unicode
fdout->write(hd[0] + ":: " +
MIME.encode_base64(string_to_utf8(enc)));
// a nasledne enkodovane base64 ulozi do vystupniho souboru
} else
fdout->write(ln);
} else
fdout->write(ln);
fdout->write("\n"); // doplni konec radky, o ktery jsme prisli pri
'gets'
}
fdout->close();
fdin->close();
write("\nHotovo.\n");
}
----------------------------------------------------
Další informace o konferenci Linux