У меня проблемы с импортом пользователей с 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)