Я тестировал ldapadd
и ldapmodify
и что я заметил:
-ldapadd
завершится ошибкой, если запись уже существует:
=> hdb_tool_entry_put: txn_aborted! DB_KEYEXIST: Key/data pair already exists (-30995)
ldapadd: could not add entry dn="mail=test1@example.org,ou=People,dc=example,dc=org" (line=1): txn_aborted! DB_KEYEXIST: Key/data pair already exists (-30995)
-ldapmodify
не удастся, если запись не будет:
modifying entry "mail=test2@example.org,ou=People,dc=example,dc=org"
ldap_modify: No such object (32)
matched DN: ou=People,dc=example,dc=org
Поэтому при восстановлении резервной копии существующей базы данных с некоторыми существующими или отсутствующими записями вы не можете просто использовать любой из этих инструментов, вам необходимо создать процедуру, которая:
- либо удаляет всех пользователей, которые уже существуют в базе данных и присутствуют в резервной копии, а затем импортирует с помощью ldapadd
.
-или преобразует файл резервной копии ldif в ldapmodify-совместимый (добавить или изменить в зависимости от того, существует ли пользователь) и использовать ldapmodify
.
В: Нет ли инструмента, который бы позаботился об этом за вас?
Дополнительная информация: работает openldap 2.4.21
на ubuntu server 10.04
Вы можете либо дать -a
флаг ldapmodify
или поставить линию changetype: add
в ваши данные LDIF, если вы добавляете запись, и changetype: modify
чтобы изменить запись.