OpenLDAP: ldap_add: Constraint violation (19)

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

ldap-logoПри добавлении базы из резервной копии — возникает ошибка:

# ldapadd -x -D "cn=root,dc=kiev_dev" -f 2014_00_19_15_00_27_dc_kiev_dev.ldif -W
Enter LDAP Password:
adding new entry "dc=kiev_dev"
ldap_add: Constraint violation (19)
additional info: structuralObjectClass: no user modification allowed

Причина — бекап базы создаётся с помощью slapcat, а не ldapsearch — и имеет другой формат (включет в себя больше информации).

Подрообнее — тут: OpenLDAP: резервное копирование и восстановление — утилиты slapcat / slapadd и ldapsearch / ldapadd

Решение — добавить с помощью slapadd.

Останавливаем OpenLDAP:

# service slapd stop

Добавляем базу:

# slapadd -l 2014_00_19_15_00_27_dc_kiev_dev.ldif
bdb_monitor_db_open: monitoring disabled; configure monitor database to enable
.#################### 100.00% eta none elapsed 01m43s spd 73.8 k/s
Closing DB...

Меняем владельца (т.к. были созданы новые файлы):

# chown -R ldap:ldap /var/lib/ldap/

Запускаем:

# service slapd start
Starting slapd: [ OK ]

Проверяем:

# service slapd status
slapd (pid 27513) is running...
# ldapsearch -xW -D "cn=root,dc=kiev_dev" -b "dc=kiev_dev" uid=2969
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <dc=kiev_dev> with scope subtree
# filter: uid=2969
# requesting: ALL
#

# 2969, Users, kiev_dev
dn: uid=2969,ou=Users,dc=kiev_dev
...
gidNumber: 5000
...
objectClass: person
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: organizationalPerson
...
uid: 2969
uidNumber: 11984

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

Готово.