Dav*_*der 10 python active-directory python-ldap
尝试添加属性时,我得到一个OBJECT_CLASS_VIOLATION.修改现有属性可以正常工作(即使是同一个属性,如果我先从AD添加它,然后修改它).
首先,我作为域管理员开玩笑,然后:
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'])])
Run Code Online (Sandbox Code Playgroud)
哪个返回此错误:
ldap.OBJECT_CLASS_VIOLATION: {'info': '0000207B: UpdErr: DSID-0305124B, problem 6002 (OBJ_CLASS_VIOLATION), data 0\n', 'desc': 'Object class violation'}
Run Code Online (Sandbox Code Playgroud)
但是,如果我在ADUC中提前创建属性,则此命令成功:
l.modify_s('CN=dmulder,CN=Users,DC=test,DC=dom,DC=de', [(1, 'gecos', None), (0, 'gecos', ['something'])])
Run Code Online (Sandbox Code Playgroud)
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"
Run Code Online (Sandbox Code Playgroud)
知道我在这里做错了吗?
小智 6
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'])])
上面的语法(没有先前的值)是正确的。