Атрибут LDAP отсутствует в результате функции ldap python result3, но входит в результат команды ldapsearch - PullRequest
3 голосов
/ 10 февраля 2020

У нас есть python приложение, которое читает записи из ldap и обновляет пользователей в другой базе данных. Теперь проблема, с которой я столкнулся, заключается в следующем: когда я запускаю

ldapsearch 'sAMAccountName=myID` 

, я могу успешно получить атрибут employeeID.

Но из python кода я не могу напечатать employeeID атрибут.

Мой python код указан ниже:

import ldap
import datetime
conn = ldap.initialize('ldap://url:port')
conn.simple_bind_s('CN=ABC,OU=XYZ,OU=AAA,DC=users,DC=net', 'password')
from ldap.controls import SimplePagedResultsControl

LDAP_ATTRS = ['*']
LDAP_FILTER = (
        '(&(sAMAccountName=myId))'
)

pager = SimplePagedResultsControl(
            criticality=True,
            size=1500000,
            cookie=''
        )

msgid = conn.search_ext(
                'DC=users,DC=net', ldap.SCOPE_SUBTREE,
                LDAP_FILTER.format(''),
                LDAP_ATTRS, serverctrls=[pager]
            )

rtype, rdata, rmsgid, serverctrls = conn.result3(msgid)

for dn, entry in rdata:
        for ent in entry:
            print(ent)

Понятия не имею, почему я не могу напечатать один из атрибутов (employeeID). Который приходит по команде ldapsearch.

EDIT

Сначала я сомневался в некотором предположении, что у пользователя должно быть разрешение на чтение атрибута. Но я не уверен, что мои предположения верны.

Поскольку я новичок в python, а также в ldap, я прочитал о схеме ldap и прочитал результат о результате в соответствии со схемой. Будет полезно, если кто-нибудь объяснит свое понимание, чтобы помочь в анализе и понимании.

Ответы [ 3 ]

0 голосов
/ 19 февраля 2020

Вы пытались специально указать "employeeID" в вашем списке атрибутов (LDAP_ATTRS) вместо "*" в вашем вызове search_ext, чтобы посмотреть, возвращает ли это employeeID?

Или попробуйте не указывать список атрибутов в качестве документация в https://www.python-ldap.org/en/latest/reference/ldap.html#ldap .LDAPObject.search гласит: «Полученные атрибуты могут быть ограничены параметром attrlist. Если attrlist равен Нет , возвращаются все атрибуты каждой записи».

0 голосов
/ 22 февраля 2020

Проблема в том, что employeeID был в другом порту, а все остальные атрибуты в другом порту. Я не знаю точно, как это работало для команды ldapsearch, но ldapsearch смог получить все атрибуты, но не из библиотеки python, потому что объект соединения, который я получал, был из другого порта, где атрибут employeeID отсутствует.

Используется strace для поиска ldapsearch, который пытается выбрать порт для получения всех атрибутов.

0 голосов
/ 11 февраля 2020

Я предпочитаю использовать ldap3 вместо ldap. https://ldap3.readthedocs.io/

Это потому, что sAMAccountName является атрибутом вашей записи.

Можете ли вы попробовать этот код?

from ldap3 import Server, Connection, SUBTREE, ALL_ATTRIBUTES
import json

server = Server("ldap://url:port")
connection = Connection(server, "CN=ABC,OU=XYZ,OU=AAA,DC=users,DC=net", "password")
connection.search(
    "DC=users,DC=net",
    "(objectCategory=user)",
    search_scope=SUBTREE,
    attributes=ALL_ATTRIBUTES,
)
data = json.loads(connection.response_to_json())

entries = data["entries"]
for entry in entries:
    print(entry["attributes"])
    print(entry["attributes"]["sAMAccountName"])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...