Ldap

如何使用 python ldap3 列印使用者的 DN

  • September 11, 2020

我在 python 2.7 下使用ldap3模組並在我的目錄上進行搜尋。我可以檢索使用者的cn:,但如何正確檢索DistinguishedName(具體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'

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']

引用自:https://serverfault.com/questions/978634