Egy címtárból kérdezek le valamit ldapsearch-csel. Mivel az attributum értéke ékezetes karaktereket is tartalmaz, ezért a választ b64-ben kapom vissza. Mivel az érték kellően hosszú, ezért a választ több sorban tördelve kapom meg. LDIF-ben a sor eleji szóköz jelenti a folytatósort - de természetesen nem része az adatnak (ugyanúgy, ahogy gondolom a sor végi ENTER sem). A visszakapott értéket akarom dekódolni. Konvencionálisan erre az "openssl base64 -d" nálam az eszköz. Most viszont nem ok.
$ ldapsearch -LLL -x -h A.B.C.D -p 389 -D CN=user,OU=Users,OU=YYY,O=XX -w PASSWORD 'company=*Közigazgatási*' company
...
dn: XXXX
company:: S8O2emlnYXpnYXTDoXNpIMOpcyBFbGVrdHJvbmlrdXMgS8O2enN6b2xnw6FsdGF0w6Fz
b2sgS8O2enBvbnRpIEhpdmF0YWxh
$ openssl base64 -d <<< 'S8O2emlnYXpnYXTDoXNpIMOpcyBFbGVrdHJvbmlrdXMgS8O2enN6b2xnw6FsdGF0w6Fz' ; echo
Közigazgatási és Elektronikus Közszolgáltatás
$ openssl base64 -d <<< 'b2sgS8O2enBvbnRpIEhpdmF0YWxh' ; echo
ok Központi Hivatala
$ openssl base64 -d <<< 'S8O2emlnYXpnYXTDoXNpIMOpcyBFbGVrdHJvbmlrdXMgS8O2enN6b2xnw6FsdGF0w6Fzb2sgS8O2enBvbnRpIEhpdmF0YWxh' ; echo
$
Ha fenti példákban direktben a coreutils-os base64 -et használom, akkor jó mind a 3. No most. Ha a legutolsó - azaz az egész B64-es sztringet tartalmazó - parancsot kicsit módosítom, azaz az első sorban levő dekódolandó adat és a második sorbeli adat közé beteszek egy fizikai ENTER-t (azaz nyomok egy Ctrl-V -t, és utána egy ENTER-t), akkor az openssl jól dekódolja, ellenben a coreutils-os hibát ad (szerintem amúgy az a jó)
$ openssl base64 -d <<< 'S8O2emlnYXpnYXTDoXNpIMOpcyBFbGVrdHJvbmlrdXMgS8O2enN6b2xnw6FsdGF0w6Fz^Mb2sgS8O2enBvbnRpIEhpdmF0YWxh' ; echo
Közigazgatási és Elektronikus Közszolgáltatások Központi Hivatala
$ base64 -d <<< 'S8O2emlnYXpnYXTDoXNpIMOpcyBFbGVrdHJvbmlrdXMgS8O2enN6b2xnw6FsdGF0w6Fz^Mb2sgS8O2enBvbnRpIEhpdmF0YWxh' ; echo
Közigazgatási és Elektronikus Közszolgáltatásbase64: érvénytelen bemenet
$ openssl version
OpenSSL 0.9.8j-fips 07 Jan 2009
$ base64 --version
base64 (GNU coreutils) 8.12
...
Az openssl ugyanígy működik "OpenSSL 1.0.1f 6 Jan 2014" verzió esetén is, és a base64 is 8.21-essel. Ez nekem viszont nagyon nem OK. Mi az isten haragja van itt?
Jav: kell egy -A opció az openssl-nek, és akkor jól kezeli a (nem túl) hosszú sztringeket.
- 1410 megtekintés
Hozzászólások
Én ki szoktam szedni a sortöréseket az ldapsearch kimenetéből ezzel:
ldapsearch ... | perl -00 -pe 's/\n (\S)/$1/g'
- A hozzászóláshoz be kell jelentkezni
Speciel én pont ezt csináltam kézzel.
- A hozzászóláshoz be kell jelentkezni
Szerintem az openssl-ben van egy maximum a sorhosszra.
Meg is van:
https://wiki.openssl.org/index.php/Command_Line_Utilities
warning base64 line length is limited to 76 characters by default in openssl ( and generated with 64 characters / line ).
- A hozzászóláshoz be kell jelentkezni
Aha! A doksiban ott szerepel a "-A" opció, és ezzel már működik a dolog. Kösz, ma is tanultam valamit!
- A hozzászóláshoz be kell jelentkezni
Mondjuk azért köszönjük a hasznos error reportot a kedves fejlesztő uraknak... :)
- A hozzászóláshoz be kell jelentkezni
Főleg, mert 0 státuszkóddal lép ki. Akkor is amikor van -A és tud dekódolni, meg akkor is, mikor nincs -A és semmi eredményt nem ad.
- A hozzászóláshoz be kell jelentkezni
Igen, azt rólad látatlanban feltételeztem, hogy megnézted. :)
Mondjuk abban sok új információ nincs sajnos, hogy az openssl command line tooljainak usabilityje szar...
- A hozzászóláshoz be kell jelentkezni