OpenLDAP: изменение схемы с конфигурацией cn=config (OLC)

Автор: | 21/08/2014

ldap-logoOpenLDAP сервер:

# slapd -V
@(#) $OpenLDAP: slapd 2.4.23 (Feb 3 2014 19:06:07) $
[email protected]:/builddir/build/BUILD/openldap-2.4.23/openldap-2.4.23/build-servers/servers/slapd

Задача – изменить описание объектного класса, в котором необходимо переместить атрибут uniqueMember из MUST в MAY.

Создаём копию текущих схем:

$ ldapsearch -x -D "cn=root,cn=config" -W -b cn=schema,cn=config | tee -a schema.bkp

Находим схему, которую хотим отредактировать, в данном случае – это core.schema:

dn: cn={1}core,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: {1}core

Находим описание атрибута, который необходимо редактировать:

olcObjectClasses: {15}( 2.5.6.17 NAME 'groupOfUniqueNames' DESC 'RFC2256: a gr
oup of unique names (DN and Unique Identifier)' SUP top STRUCTURAL MUST ( uni
queMember $ cn ) MAY ( businessCategory $ seeAlso $ owner $ ou $ o $ descript
ion ) )

Теперь – создаём новый ldif-файл, в котором вызываем modify и указываем наши изменения:

$ cat new.ldif
dn: cn={1}core,cn=schema,cn=config
changetype: modify
delete: olcObjectClasses
olcObjectClasses: {15}( 2.5.6.17 NAME 'groupOfUniqueNames' DESC 'RFC2256: a group of unique names (DN and Unique Identifier)' SUP top STRUCTURAL MAY ( businessCategory $ seeAlso $ owner $ ou $ o $ description $ uniqueMember $ cn ) )
-
add: olcObjectClasses
olcObjectClasses: {15}( 2.5.6.17 NAME 'groupOfUniqueNames' DESC 'RFC2256: a group of unique names (DN and Unique Identifier)' SUP top STRUCTURAL MUST ( cn ) MAY ( businessCategory $ seeAlso $ owner $ ou $ o $ description $ uniqueMember ) )

Обратите внимание на тире между вызовами delete и add.

Применяем:

$ ldapmodify -x -D "cn=root,cn=config" -W -f new.ldif
Enter LDAP Password:
modifying entry "cn={1}core,cn=schema,cn=config"

Необязательно (ведь у нас On-Line Configuration) – но можно перезапустить slapd:

$ service slapd restart
Stopping slapd: [ OK ]
Starting slapd: [ OK ]

Проверяем:

$ cat /etc/openldap/slapd.d/cn=config/cn=schema/cn={1}core.ldif | grep -A3 groupOfUniqueNames
olcObjectClasses: {15}( 2.5.6.17 NAME 'groupOfUniqueNames' DESC 'RFC2256: a gr
 oup of unique names (DN and Unique Identifier)' SUP top STRUCTURAL MUST ( cn
 ) MAY ( businessCategory $ seeAlso $ owner $ ou $ o $ description $ uniqueMem
 ber ) )

P.S. В общем-то ничего не мешает редактировать файл /etc/openldap/slapd.d/cn=config/cn=schema/cn={1}core.ldif вручную.

Однако – лучше использовать ldapmodify, так как:

1. ldapmodify можно использовать удалённо или когда нет прямого доступа к файловой системе;
2. ldapmodify защищает “от дурака”: выдаёт ошибку при неправильной модификации и изменение не проходит:

$ ldapmodify -x -D "cn=root,cn=config" -W -f new.ldif
Enter LDAP Password:
modifying entry "cn={1}core,cn=schema,cn=config"
ldap_modify: No such attribute (16)
        additional info: modify/delete: olcObjectClasses: no such value

3. Перед правкой файлов нужно отключать slapd, а при ldapmodify изменения применяются сразу.