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

ldapadd с автоматической поддержкой замены, если запись уже существует

Я тестировал 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 чтобы изменить запись.