LINUX.ORG.RU
ФорумAdmin

[LDAP] Смена корня.

 


0

0

Здравствуйте.

Достался в наследство каталог с корнем вида «dc=domain,dc=com», причём, существует и реальное доменное имя domain.com, не имеющее к обсуждаемому никакого отношения. Вот, не знаю, почему, но было сделано именно так. Эта глупость причиняет хлопоты с DNS и, вообще, неэстетически выглядит.

Когда я начал разбираться с этим, решил попробовать сделать дамп с каталога, используя slapcat, и в этом дампе простым текстовым редактором заменить все «dc=com» на «dc=local». Однако, я столкнулся со следующей трудностью: многие ветки сдампились в формате Base64, причём, порой одна строка вида «cn=blah-blah,ou=Mail,dc=domain,dc=com» в Base64 может быть разбита на две строки, а может быть и не разбита.

Если открыть работающий каталог каким-нибудь ldapvi, то всё отображается нормально, можно даже изменить так, как хочется, но сохранить это, разумеется, нельзя. Ибо корень не будет совпадать.

Каким образом можно сделать то, что мне надо? Есть ли готовые инструменты?




Эта глупость причиняет хлопоты с DNS и, вообще, неэстетически выглядит.

Не вижу даже в теории, какие хлопоты может приносить подобная запись в ldap для dns. Единственная проблема, что действительно выглядеть может в конкретных условиях не очень.

phpldapadmin может в качестве ldif'а для импорта есть обычные, русскоязычные (в вашем случае, я полагаю) dn. Кодирует сам.

Только учтите, что вам не только dn менять но и primary поле, которое в нем используется в качестве части dn, uid там, cn или что у вас.

zgen ★★★★★
()
Ответ на: комментарий от zgen

Кажется, вы меня не поняли

phpldapadmin может в качестве ldif'а для импорта есть обычные, русскоязычные (в вашем случае, я полагаю) dn. Кодирует сам.

Проблема не в том, чтобы скормить результат. Проблема в изменении исходного. Мне надо, чтобы текущий каталог был сдамплен в ldif в читаемом виде, а не как сейчас, со строками в Base64. Или, чтобы был какой-то инструмент, позволяющий перекодировать base64 строки в читаемые.

HolyBoy
() автор топика

Есть ли готовые инструменты

from ldif import ParseLDIF
import sys
for dn,attrs in ParseLDIF(sys.stdin):
  print 'dn:',dn
  for k,vs in attrs.iteritems():
    for v in vs:
      print '%s: %s'%(k,v.replace('\n','\n '))
  print

Только лучше так не делать, '\n'ы съест. Лучше, вероятно, 'repr(v)', но его придётся перекодировать взад. Ещё лучше будет добавить нужную замену прямо сюда, перед выводом, и выводить через ldif.же.

DonkeyHot ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.