Назад | Перейти на главную страницу

ldap_add: нарушение ограничений (19)

У меня проблемы с импортом пользователей с ldapadd и ldif файлы. Я получаю следующую ошибку:

ldap_add: Constraint violation (19)
additional info: structuralObjectClass: no user modification allowed

Все импортированные пользователи являются частью ou=People,dc=example,dc=org. Сервер LDAP уже содержит это базовое DN.

В /etc/ldap/slapd.d/cn=config/olcDatabase={1}hdb.ldif файл содержит следующую запись ACL:

olcAccess: {2}to dn.base="ou=People,dc=example,dc=org" attrs=children by gr
 oup.exact="cn=Manager,ou=Roles,dc=example,dc=org" manage

В ldif файл импортируется следующим образом:

ldapadd -f import.ldif -xv -D "cn=drupal,ou=Apps,dc=example,dc=org" -h localhost -W

В cn=drupal,ou=Apps[...] запись является членом cn=Manager,ou=Roles,dc=example,dc=org соответственно, у него должно быть достаточно разрешений для записи (поскольку управление - это самый высокий доступный уровень разрешений).

Когда я выдаю ldapadd команда импорт не выполняется с первой же попытки ldif вход. Полный вывод команды:

add objectClass:
    top
    person
    inetOrgPerson
add uid:
    John.Merrell
add mail:
    john.merrell@example.org
add cn:
    John D Merrell
add structuralObjectClass:
    inetOrgPerson
add entryUUID:
    65236c42-09b7-1020-9318-9fca7c043dfc
add creatorsName:
    cn=drupal,ou=Apps,dc=bidnetwork,dc=org
add createTimestamp:
    20110503095643Z
add userPassword:
    2678u8yyy
add givenName:
    John D
add sn:
    Merrell
add entryCSN:
    20110629121956.880164Z#000000#000#000000
add modifiersName:
    cn=drupal,ou=Apps,dc=bidnetwork,dc=org
add modifyTimestamp:
    20110629121956Z
adding new entry "mail=john.merrell@example.org,ou=People,dc=example,dc=org"
ldap_add: Constraint violation (19)
    additional info: structuralObjectClass: no user modification allowed

Я тестировал импорт пользователей, которые были или не существовали в LDAP, и в любом случае получаю вышеупомянутую ошибку.

Может кто-нибудь объяснить причину проблемы и как ее можно обойти?

Как вы создали эти файлы LDIF? structuralObjectClass является одним из внутренних значений в OpenLDAP, и пользователь - даже администратор - обычно не может их изменять.

Либо удалите эти structuralObjectClass строк из вашего LDIF или импортируйте записи обратно с slapadd (Готов поспорить, вы создали файлы LDIF с помощью slapcat).

Если вы используете такие инструменты, как http://phpldapadmin.sourceforge.net/wiki/index.php/Main_Page для экспорта данных не выбирайте Include system attributes в веб-интерфейсе:

вам нужно удалить следующие строки в ldif файл:

structuralObjectClass: 
entryUUID: 
creatorsName: 
createTimestamp: 
entryCSN: 
modifiersName: 
modifyTimestamp: 

Ниже не решение вопроса, а служебный код для удаления структурных элементов.. Образец кода Python удаляет структурные элементы. Используйте out.ldif

structural_elements = ["structuralObjectClass","entryUUID", "creatorsName","createTimestamp","entryCSN", "modifiersName","modifyTimestamp"]
    with open("ldap_data_out.ldif","w+") as outfile:
        with open("ldap_data_in.ldif", "r") as infile:
            lines = infile.readlines()
            for line in lines:
                print line.split(":")[0]
                if line.split(":")[0] in structural_elements:
                    print "ignoring ,", line
                else:
                    outfile.write(line)