如何使用 python ldap3 打印用户的 DN

如何使用 python ldap3 打印用户的 DN

我正在使用ldap3python 2.7 下的模块并在我的目录中进行搜索。我可以检索用户的cn:,但我如何正确检索专有名称(具体DN:如下)?

>>> conn.search (BASE_DN, '(&(uid=user456))', attributes=['*'])
True

>>> print conn.entries[0]
DN: uid=user456,ou=myou,dc=myorg
    cn: user456
...

>>> print conn.entries[0]['cn']
user456

>>> print conn.entries[0]['DN']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/ldap3/abstract/entry.py", line 100, in __getitem__
    return self.__getattr__(item)
  File "/usr/lib/python2.7/dist-packages/ldap3/abstract/entry.py", line 88, in __getattr__
    raise LDAPKeyError('key not found')
ldap3.core.exceptions.LDAPKeyError: 'key not found'

答案1

结果python ldap3 搜索不仅是属性,而且是以下形式的元组(dn, attributess, raw_attributes), 在哪里:

  • dn:包含条目的 DN(可分辨名称)的字符串

  • attributes:返回属性及其值的字典。值是列表。值采用 UTF-8 格式

  • raw_attributes:与“属性”相同,但未编码(字节数组)

DN 本身不是 (DN 的) 属性...

因此,显示 DN 和 CN 如下所示:

conn.search (BASE_DN, '(&(uid=user456))', attributes=['*'])

for dn,attrs,raw_attrs in conn.search.response:
   print dn
   print attrs['cn']

答案2

您可以从如下条目中获取 DN:

for entry in conn.entries:
    print(entry.entry_dn)

相关内容