OpenLDAP сервер:
# 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
изменения применяются сразу.