我需要从一组 LDAP 条目中删除三个不同的 objectClasses。这是我的 ldif 文件:
dn: uid=user,ou=People,dc=example,dc=net
changetype: modify
delete: objectClass
objectClass: top
-
delete: objectClass
objectClass: organizationalPerson
-
delete: objectClass
objectClass: person
当我运行 ldapmodify 命令时,我得到以下输出:
ldap_initialize( ldap://server.net )
delete objectClass:
top
delete objectClass:
organizationalPerson
delete objectClass:
person
modifying entry "uid=user,ou=People,dc=example,dc=net"
modify complete
但是,当我对该用户执行 ldapsearch 时,所有 objectClasses 仍然存在。显然,它与对象类名称匹配,否则它会报错。
答案1
我怀疑您的条目具有需要您尝试删除的对象类的属性。您需要先删除依赖于对象类的属性,然后再删除对象类。
我不知道您使用的是哪个 LDAP 服务器,但我不得不删除条目以删除对象类。这是通过提取记录、删除原始记录并添加带有修改后的对象类列表的记录来完成的。如果您保留新对象类层次结构不支持的属性,则添加会失败。
答案2
您是否要删除对象类或目录条目?
我有点明白你想删除整个条目(即该人的记录)。如果是这样,要使用的工具是 ldapdelete
,它通常与ldapmodify
?
根据它来自哪个工具套件(例如专有、OpenLDAP 等),它通常几乎是相同的语法广告,您只需向其提供 DN。
例如ldapdelete -x -D uid=admin -w secret -H ldap://ldapserver.blah uid=user,ou=People,dc=example,dc=net
如果您确实想要使用 objectClasses,那么您可以提高详细程度(使用 opneldap 工具时为 -v)或调试(使用 openldap 工具时为 -d)以更好地了解您的问题。
正如 Bill Thor 所说,您可能遇到了模式问题,并且您可能必须按原样备份条目,然后按照您希望的方式重新添加它们(如果强制进行模式检查)。
或者暂时关闭模式检查,然后再次打开模式检查。