问题现象
由于LDAP 没有在单个事务中执行两个操作的标准化方法,因此中间目录
状态(在删除之后,在添加之前)对于其他客户端是可见的, 这可能导致不良的客户端行为。基于这个考虑早期 LDAP 没有提供修改条目对象类的功能。
当你尝试修改条目的对象类的时候会提示你structural object class modification from X to Y not allowed,具体提示如下:
[core@localhost tmp]$ ldapmodify -h home.coocn.cn -D "cn=root,dc=coocn,dc=cn" -w Root.123 -f p2op.ldlf
modifying entry "uid=test,ou=public,dc=coocn,dc=cn"
ldap_modify: Cannot modify object class (69)
additional info: structural object class modification from 'person' to 'organizationalPerson' not allowed
p2op.ldlf 文件内容:
[core@localhost tmp]$ cat p2op.ldlf
dn: uid=test,ou=public,dc=coocn,dc=cn
changetype: modify
delete: objectClass
objectClass: person
-
add: objectClass
objectClass: organizationalPerson
-
解决方案
openldap 从 2.4 开始提供了manageDIT功能来支持修改条目的对象类,只需要在执行修改的时候通过参数

当尝试在OpenLDAP中修改条目的对象类时,由于LDAP特性,可能会遇到'structuralobjectclassmodificationfromXtoYnotallowed'的错误。此问题源于LDAP不支持在单个事务中同时进行删除和添加操作。从OpenLDAP 2.4版本开始,可以使用manageDIT控制来解决这个问题。通过在ldapmodify命令中添加参数'-emanageDIT',即可允许修改条目对象类。参照提供的解决方案,执行命令以成功更新条目的对象类。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



