python-ldap 创建组返回"already exists"(在空 OU 和不存在的 sAMAccountName 中)



我设置了ldap变量:

ldap_server = "ldaps://server:636"
ldap_username = "sec-admin@server"
ldap_pw = "<pw>"
dn = 'OU=ou1,OU=ou2,OU=ou3,OU=ou4,DC=dc1,DC=dc2,DC=dc3,DC=com'

并成功连接到服务器:

import sys
import ldap
import ldap.modlist as modlist
try:
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
l = ldap.initialize(ldap_server)
l.set_option(ldap.OPT_REFERRALS, 0)
l.set_option(ldap.OPT_PROTOCOL_VERSION, 3)
l.set_option(ldap.OPT_X_TLS, ldap.OPT_X_TLS_DEMAND)
l.set_option(ldap.OPT_X_TLS_DEMAND, True)
l.set_option(ldap.OPT_DEBUG_LEVEL, 255)
l.simple_bind_s(ldap_username, ldap_pw)
except ldap.LDAPError as e:
print(e)

并且能够搜索:

search_scope = ldap.SCOPE_SUBTREE
retrieve_attributes = None
search_filter = "(objectClass=group)"
try:
l_search = l.search(dn, search_scope, search_filter, retrieve_attributes)
result_status, result_data = l.result(l_search, 0)
print("-----------------------------------")
print(result_data)
print("-----------------------------------")
except ldap.LDAPError as e:
print(e)

返回:

-----------------------------------
[]
-----------------------------------

但是如果我尝试添加一个安全组:

# creating a group
attr = {}
attr['objectClass']    = [b'group', b'top']
attr['groupType']      = b'-2147483646'
attr['cn']             = b'blah-blah-1'
attr['name']           = b'blah-blah-1'
attr['sAMAccountName'] = b'blah-blah-1'
ldif = modlist.addModlist(attr)
print(ldif)
l.add_s(dn, ldif)

我得到一个错误:

[('objectClass', [b'group', b'top']), ('groupType', b'-2147483646'), 
('cn', b'blah-blah-1'), ('name', b'blah-blah-1'), 
('sAMAccountName', b'blah-blah-1')]
dap.ALREADY_EXISTS: {'msgtype': 105, 'msgid': 3, 'result': 68, 
'desc': 'Already exists', 'ctrls': [], 
'info': '00002071: UpdErr: DSID-030503CF, problem 6005 (ENTRY_EXISTS), data 0n'}

我做错了什么?

如果这里发布的脚本是完整的,那么您使用的是重复的DN——您试图使用其父OU的DN创建组对象(当然已经存在(。

传递给";添加";操作必须是对象的DN,而不是其父对象的DN。因为某些对象类型(可能不在AD架构中,但通常在其他LDAP系统中(可以从几个不同的命名属性中进行选择,因此DN不会自动确定。

最新更新