pyad-无法连接到另一个ldap控制器

时间:2019-07-12 10:17:20

标签: python active-directory ldap pyad

我无法通过pyad libary将自己连接到另一个Active Directory。 我想查询,但是我尝试的所有操作都出现以下错误:

def ad_query_bwae(attribute, value):
    pyad.adbase.set_defaults(ldap_server="AD03.domain.com", username="XXXX", password="XXX", ldap_port=389)
    query = pyad.adquery.ADQuery()

    query.execute_query(
        attributes = ["sAmAccountName", "facsimileTelephoneNumber", "mail", "cn"],
        base_dn = "DC=b-w-automotive, DC=com",
        where_clause = attribute + "='" + value + "'"
    )


    for row in query.get_results():
        print(row)
        return row   

提供以下错误消息:

Traceback (most recent call last):
  File "C:\Users\fiku\Desktop\Lizenz_Projekt\neue_Lizenzabfrage\new_script.py", line 259, in <module>
    ad_query_bwae("sAmAccountName","fiku")
  File "C:\Users\fiku\Desktop\Lizenz_Projekt\neue_Lizenzabfrage\new_script.py", line 232, in ad_query_bwae
    query = pyad.adquery.ADQuery()
  File "c:\users\fiku\appdata\local\programs\python\python37-32\lib\site-packages\pyad\adquery.py", line 39, in __init__
    self.__adodb_conn.Open("Provider=ADSDSOObject")
  File "<COMObject ADODB.Connection>", line 0, in Open
  File "c:\users\fiku\appdata\local\programs\python\python37-32\lib\site-packages\win32com\client\dynamic.py", line 287, in _ApplyTypes_
    result = self._oleobj_.InvokeTypes(*(dispid, LCID, wFlags, retType, argTypes) + args)
pywintypes.com_error: (-2147352567, 'Ausnahmefehler aufgetreten.', (0, 'Microsoft OLE DB Service Components', 'Falscher Parameter.', None, 0, -2147024809), None)

错误消息是德语,但显示“参数错误”

1 个答案:

答案 0 :(得分:0)

首先请确保设置用于使用ADQuery查询LDAP的默认凭据:

pyad.set_defaults(ldap_server="example.com", username="manager", password="password")

然后,我认为基本dn语法可能是错误:字符串'DC=b-w-automotive, DC=com'在rdn分隔符(,)和rdn {{1之间包含一个空格}},因此您可能需要仔细检查域组件“ bw-automotive”的实际dn字符串,以查看它是否确实包含该空格(这很不寻常-但允许-因此可能是故意的):

  

实现必须务必在逗号或分号的任何一侧出现空格字符。 ({RFC-2253-2.1)

...但是由于行换行问题或类似问题,当读取dn字符串表示形式时,它也有可能欺骗了您,因此当您尝试使用“虚拟” /无效dn时出现错误。

  

通常希望将过长的DN字符串换行   演示文稿。换行应通过插入空格来完成   在RDN分隔符之后,或者(如有必要)在AVA之后   分隔符。应向用户注意,插入的   空格不是DN字符串的一部分,应在删除之前   在LDAP中使用。 RFC-4514 - Appendix A


如果您的问题与基本dn无关,则必须是DC=com和/或attribute无效,例如。如果您的后端架构设置为区分大小写(在AD中不确定),则来自您的日志中的value错误,正确的大小写为"sAmAccountName"

记录这些变量并将它们的值与最终ldap请求(AD端)进行比较,以检查查询是否与原始"sAMAccountName"保持一致,或者是否存在任何编码/转义问题,可能会有所帮助。

请参阅RFC-4515中的LDAP搜索过滤器定义和转义。

最后一件事:如果任何请求的属性从数据库中丢失(或拼写错误...),则可能导致错误。如果不确定并防止出现任何问题,请使用空数组或where_clause来请求所有非内部属性。