Здравствуйте! Задачка, конечно, нетривиальная, мягко скажем =) . Дело в том, что изменить olcSuffix в olcDatabase={X}bdb OpenLDAP позволяет (при этом нужно сразу же менять и olcRootDN, а то slapd не даст Вам подключиться к базе, а при рестарте вообще не запустится):
dn: olcDatabase={1}bdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: ou=mycompany,o=net
-
replace: olcRootDN
olcRootDN: dc=manager,ou=mycompany,o=net
Кроме того, нужно не забыть переделать все упоминания о старом суффиксе, например в ACL или настройке наложений к этой базе. Но, самое главное, после всех этих манипуляций, само содержимое базы ou=example,o=net останется в неизменном виде, и запрос с указанием нового суффикса выдаст No such object:
# ldapsearch -x -LLL -b 'ou=mycompany,o=net'
No such object (32)
То есть все наши старания пошли на смарку. Поэтому я бы не рекомендовал так делать.
Но всё же решить задачу можно, "изобразив" восстановление из резервной копии. Порядок действий такой (подразумевается, что все пути и настройки под Ubuntu, команды выполняются из под root):
1. Останавливаем slapd:
# /etc/init.d/slapd stop
2. Делаем резервные копии slapd.d и директории с файлами bdb "на случай ядерной войны":
# mkdir /tmp/slapd.backup
# cp -rp /etc/ldap/slapd.d /tmp/slapd.backup/
# cp -rp /var/lib/ldap /tmp/slapd.backup/
3. Делаем резервную копию каталога ou=example,o=net с помощью slapcat (пока в чистом виде, на случай экстренного восстановления):
# slapcat -b 'ou=example,o=net' -l /tmp/slapd.backup/dump.ldif
4. Ещё раз прогоняем slapcat, избавляясь от ldif wrapping и заменяя старый суффикс на новый:
# slapcat -b 'ou=example,o=net' | perl -p00e 's/\r?\n //g' | perl -p00e 's/ou=example,o=net/ou=mycompany,o=net/g' | perl -p00e 's/ou: example/ou: mycompany/g' > /tmp/slapd.backup/newdb.ldif
5. Теперь нужно править slapd.d. Очень внимательно изучаем файлы, относящиеся к olcDatabase={X}bdb в каталоге /etc/ldap/slapd.d/cn=config, в первую очередь сам olcDatabase={X}bdb.ldif, а также наложения в поддиректории olcDatabase={X}bdb. Правим всё, что относится к старому суффиксу. Трижды всё проверьте!!!
6. Очищаем директорию с файлами bdb (Вы же сделали резервную копию?) и копируем в неё DB_CONFIG:
# rm -f /var/lib/ldap/*
# cp /tmp/slapd.backup/ldap/DB_CONFIG /var/lib/ldap/
7. "Восстанавливаем" базу данных из полученного на шаге 4 файла:
# slapadd -b 'ou=mycompany,o=net' -l /tmp/slapd.backup/newdb.ldif
_#################### 100.00% eta none elapsed none fast!
Closing DB...
Важно, чтобы slapadd завершился без ошибок.
8. Устанавливаем корректные права:
# chown -R openldap:openldap /var/lib/ldap/
9. По идее всё, можно запускать slapd:
# /etc/init.d/slapd start
Теперь ldapsearch нормально отрабатывает и выдаёт содержимое ou=mycompany,o=net:
# ldapsearch -x -LLL -b 'ou=mycompany,o=net'
dn: ou=mycompany,o=net
objectClass: organizationalUnit
ou: mycompany
...
Хочу отметить, что всё это на свой страх и риск. Выполняйте команды только после того, как разобрались, что конкретно они делают. Будьте очень внимательны и ОБЯЗАТЕЛЬНО делайте резервные копии!!! И не говорите, что Вас не предупреждали.
Может есть другой, более безопасный способ, если кто подскажет, буду очень признателен.
Еще, может не в тему, но... Сейчас принято именовать каталоги примерно так: dc=mycompany,dc=net
Егор.