Есть FreeBSD 6.0, openldap client 2.3
Дёргаю из Виндового AD данные при помощи ldapsearch
Русский хранится в AD в UTF-8 я пологаю. И ldapsearch выдаёт "0KHQuNGB0YLQtdC80L3Ri9C5INCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA" вместо "Системный администратор"
Как можно победить? Или потом конвертировать?
>Есть FreeBSD 6.0, openldap client 2.3
>Дёргаю из Виндового AD данные при помощи ldapsearch
>Русский хранится в AD в UTF-8 я пологаю. И ldapsearch выдаёт "0KHQuNGB0YLQtdC80L3Ri9C5INCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA"
>вместо "Системный администратор"
>Как можно победить? Или потом конвертировать?Как бы по стандарту полагается хранить строки (типа DirectoryString) в виде UTF8. А там - либо локаль ставить соответствующую, либо iconv -f UTF8
>>Есть FreeBSD 6.0, openldap client 2.3
>>Дёргаю из Виндового AD данные при помощи ldapsearch
>>Русский хранится в AD в UTF-8 я пологаю. И ldapsearch выдаёт "0KHQuNGB0YLQtdC80L3Ri9C5INCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA"
>>вместо "Системный администратор"
>>Как можно победить? Или потом конвертировать?
>
>Как бы по стандарту полагается хранить строки (типа DirectoryString) в виде UTF8.
>А там - либо локаль ставить соответствующую, либо iconv -f UTF8
>не всё так просто оказалось.
Искомая строка 0KHQuNG... Приводится "Штирлицем" к рускому виду двумя перекодированиями.
1ое - Base64->Win
2ое То,что получилось, UTF-8->WIN
Так что ответ Ldapsearc'а похоже не в UTF.Кто-нибудь ещё сталкивался с чем-нибудь похожим?
>[оверквотинг удален]
>>А там - либо локаль ставить соответствующую, либо iconv -f UTF8
>>
>
>не всё так просто оказалось.
>Искомая строка 0KHQuNG... Приводится "Штирлицем" к рускому виду двумя перекодированиями.
>1ое - Base64->Win
>2ое То,что получилось, UTF-8->WIN
>Так что ответ Ldapsearc'а похоже не в UTF.
>
>Кто-нибудь ещё сталкивался с чем-нибудь похожим?Победил!
Вот таким конвеером: "|base64 -d |iconv -f UTF-8 -t KOI8-R"
а как быть с переносом строки?
ldapsearch -LLL -x -h 111.111.111.111 -D adreaduser@domain.com -w 123456 -b DC=domain,DC=com sAMAccountName=panin SN
dn:: Q0490J/QsNC90LjQvSDQmtC+0L3RgdGC0LDQvdGC0LjQvSxPVT1Vc2VycyxEQz1kb21haW4sREM9
Y29tCg==
sn:: 0J/QsNC90LjQvQ==хочется получить по одной строке: атрибут:значение
перепробовал различные grepы sedы, может мозгов не хватает.
>а как быть с переносом строки?
>ldapsearch -LLL -x -h 111.111.111.111 -D adreaduser@domain.com -w 123456 -b DC=domain,DC=com sAMAccountName=panin
>SN
>dn:: Q0490J/QsNC90LjQvSDQmtC+0L3RgdGC0LDQvdGC0LjQvSxPVT1Vc2VycyxEQz1kb21haW4sREM9
>Y29tCg==
>sn:: 0J/QsNC90LjQvQ==
>
>хочется получить по одной строке: атрибут:значение
>перепробовал различные grepы sedы, может мозгов не хватает.param=$(ldapsearch -h 192.168.0.1 -LLL -b "cn=users,dc=domain,dc=ru" \
-D "cn=administrator,cn=users,dc=domain,dc=ru" -x \
-wpass "(sAMAccountName=user)" \
|grep "sn::" |awk '{print $2}'|base64 -d |iconv -f UTF-8 -t KOI8-R )
echo "sn:"$param
Так подойдёт? Вместо "sn::" вписать нужное dn:: или чего ещё. Только правда, за один запрос один параметр выгрепливается.
>[оверквотинг удален]
>>перепробовал различные grepы sedы, может мозгов не хватает.
>
>param=$(ldapsearch -h 192.168.0.1 -LLL -b "cn=users,dc=domain,dc=ru" \
>-D "cn=administrator,cn=users,dc=domain,dc=ru" -x \
>-wpass "(sAMAccountName=user)" \
>|grep "sn::" |awk '{print $2}'|base64 -d |iconv -f UTF-8 -t KOI8-R )
>
>echo "sn:"$param
>Так подойдёт? Вместо "sn::" вписать нужное dn:: или чего ещё. Только правда,
>за один запрос один параметр выгрепливается.вот именно, не "наш" метод за один запрос один параметр.
Вышел из положения таким образом:
т.к. все это мне нужно одноразово, для переноса из домена 2003 в openldap,
на сервере виндовом: ldifde.exe -u -r "(objectclass=user)" -f c:\users.ldif
потом перекодировка полученного файла в нужную кодировку (в моем случае cat users.ldif | iconv -f unicode -t utf-8 -o new_users.ldif).
получаем дамп АД, где все, что было по-русски - читабильно.
и затем из этого файла все вытаскивается довольно просто, и помещается в openldap (соответственно с кодировкой всего русского в base64).