gpt4 book ai didi

python-ldap add_s 无法为具有 OBJECT_CLASS_VIOLATION 的 AD 用户添加属性

转载 作者:太空狗 更新时间:2023-10-29 19:27:14 24 4
gpt4 key购买 nike

我在尝试添加属性时收到 OBJECT_CLASS_VIOLATION。修改现有属性就可以正常工作(即使是同一个属性,如果我先从 AD 添加它,然后修改它)。

首先我以域管理员的身份 kinit,然后:

import ldap, ldap.sasl
l = ldap.initialize('ldap://TEST.DOM.DE')
auth_tokens = ldap.sasl.gssapi('')
l.sasl_interactive_bind_s('', auth_tokens)
l.add_s('CN=dmulder,CN=Users,DC=test,DC=dom,DC=de', [('gecos', ['something'])])

返回此错误:

ldap.OBJECT_CLASS_VIOLATION: {'info': '0000207B: UpdErr: DSID-0305124B, problem 6002 (OBJ_CLASS_VIOLATION), data 0\n', 'desc': 'Object class violation'}

不过,如果我在 ADUC 中提前创建属性,则此命令会成功:

l.modify_s('CN=dmulder,CN=Users,DC=test,DC=dom,DC=de', [(1, 'gecos', None), (0, 'gecos', ['something'])])

而且 add 命令确实与 ldapmodify 一起工作:

> ldapmodify -x -h TEST.DOM.DE -D Administrator@TEST.DOM.DE 
dn:CN=dmulder,CN=Users,DC=test,DC=dom,DC=de
changetype: modify
add: gecos
gecos: something
modifying entry "CN=dmulder,CN=Users,DC=test,DC=dom,DC=de"

知道我在这里做错了什么吗?

最佳答案

l.add_s 用于添加对象,而不是属性。

在这种情况下,您正在尝试创建一个新对象,并且您缺少创建对象所需的多个属性。你应该使用

l.modify_s('CN=dmulder,CN=Users,DC=test,DC=dom,DC=de', [(0, 'gecos', 'something')])

只是向对象添加一个新属性。

澄清一下:当尚未设置属性时,此语法是错误的:l.modify_s('CN=dmulder,CN=Users,DC=test,DC=dom,DC=de', [(1, 'gidNumber', None), (0, 'gidNumber', ['1000 '])])上面的语法(没有前一个值)是正确的。

关于python-ldap add_s 无法为具有 OBJECT_CLASS_VIOLATION 的 AD 用户添加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45621800/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com