簡體   English   中英

python-ldap add_s無法使用OBJECT_CLASS_VIOLATION為AD用戶添加屬性

[英]python-ldap add_s fails to add attribute for AD user with OBJECT_CLASS_VIOLATION

嘗試添加屬性時,我得到一個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'])])

哪個返回此錯誤:

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'])])上面的語法(沒有前一個值)是正確的。

我按照指南並在ubuntu 16中安裝OpenLDAP服務器守護程序。以下是我的嘗試。

import ldap
l = ldap.initialize('ldap://localhost',trace_level=3)
l.simple_bind_s('CN=admin,DC=example,DC=com','381138')#my setting
base_dn = 'DC=example,DC=com'
filter = '(objectclass=person)'
attrs = ['gecos']

add_record = [
('objectclass', ['inetOrgPerson']),
('gecos', ['Bacon'] ),
]
#l.modify_s('CN=dmulder,ou=people,dc=example,dc=com', [(1, 'gecos', None), (0, 'gecos', ['something'])])
l.add_s('cn=dmulder,ou=people,dc=example,dc=com', add_record)
l.search_s( base_dn, ldap.SCOPE_SUBTREE, filter, attrs )

如果您沒有違反架構,那么它必須是ldapclient.python-ldap的錯誤,只是一個包裝器。

例如,如果屬性中未指定結構對象類,則將引發OTHER異常。 如果記錄不包含UID中使用的屬性,則將引發NAMING_VIOLATION。 如果記錄缺少結構對象類所需的屬性,則將引發OBJECT_CLASS_VIOLATION,依此類推。

請使用一系列python-ldap提供的dump_record.py來轉儲新條目以查找遺漏的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM