добавление объектного класса с обязательным атрибутом к существующему узлу LDAP

Я пытаюсь настроить файл LDIF, который добавит новое значение атрибута к существующему узлу. Атрибут является обязательным атрибутом пользовательского объектного класса.

Вот содержимое LDIF-файла add.ldif:


dn: cn=hna,cn=Users,DC=lan,DC=test,DC=de
changetype: modify
add: objectclass
objectclass: MyCustomObjectClass
-
add: myCustomAttribute
myCustomAttribute: someValue
-

Проблема: когда я пытаюсь добавить это на сервер LDAP, используя

ldapmodify -h ... -D ... -w ... -x -f add.ldif

я получаю сообщение об ошибке

ldap_modify: Objectclass violation (65)
    additional info: 00002014: objectclass_attrs: attribute 'myCustomAttribute'
    on entry 'cn=hna,cn=Users,DC=lan,DC=test,DC=de' does not exist in the
    specified objectclasses

Когда я пропускаю «добавить» «myCustomAtribute», тогда, конечно, я получаю:

ldap_modify: Objectclass violation (65)
    additional info: 00002014: objectclass_attrs: at least one mandatory attribute
    ('myCustomAttribute') on entry 'cn=hna,cn=Users,DC=lan,DC=test,DC=de'
    wasn't specified!

Любая идея, что не так с моим подходом?

ldapmodify — это один из OpenLDAP; сервер представляет собой Samba V4 LDAP.


person Heiko Nardmann    schedule 25.03.2014    source источник
comment
Вот почему это боль, когда вы делаете атрибут вспомогательного класса обязательным.   -  person geoffc    schedule 26.03.2014
comment
Поэтому теперь я решил проблему, изменив атрибут только на МОЖЕТ.   -  person Heiko Nardmann    schedule 26.03.2014
comment
Ваш пример будет работать с сервером OpenLDAP. Похоже, это проблема (или отсутствующая функция) сервера LDAP Samba V4. Возможно, с программой ldapmodify, поддерживающей атомарные операции (см. ответ jeemster), это тоже могло бы работать.   -  person tlo    schedule 17.09.2014


Ответы (1)


Это должно работать:

dn: cn=hna,cn=Users,DC=lan,DC=test,DC=de
changetype: modify
add: objectclass
objectclass: MyCustomObjectClass
add: myCustomAttribute
myCustomAttribute: someValue

После последней строки ДОЛЖНА быть пустая строка. «-» нужен только в том случае, если вы хотите выполнять отдельные операции изменения и сделать их атомарными. (т.е. все работают или все терпят неудачу).

Поскольку добавление объектного класса требует, чтобы атрибуты ДОЛЖНЫ быть в той же модификации.

Между прочим, я заметил, что некоторые программы ldapmodify не обрабатывают их должным образом.

-Джим

person jwilleke    schedule 26.03.2014
comment
Какую программу ldapmodify вы используете? Один из OpenLDAP не принимает этот синтаксис. - person tlo; 17.09.2014