Возможно ли это и как получить всех пользователей из LDAP, используя python и django? - PullRequest
0 голосов
/ 25 сентября 2019

Конверт:

python - 3.6.6
django - 2.x.x
django-auth-ldap - 2.0.0         
python-ldap - 3.2.0

Код:

import ldap
from django_auth_ldap.backend import LDAPBackend, _LDAPUser, LDAPSearch

user = _LDAPUser(LDAPBackend(), "any")  # just for getting root connection to LDAP
search = LDAPSearch(
    "ou=Some,dc=some,dc=some,dc=some",
    ldap.SCOPE_SUBTREE,
    "???? what should be here ???"  # criteria, I guess
)

# list of users is expected, or at least user's names
result = search.execute(user.connection)  

Вопрос:

Как составить правильные критерии (или как их следует правильно называть) для получения спискапользователей?(ссылки были бы хорошими)
Возможно ли это вообще?

Решение (не для производства, просто рабочий эскиз):

# based on https://medium.com/@alpolishchuk/pagination-of-ldap-search-results-with-python-ldap-845de60b90d2
import ldap
from ldap.controls import SimplePagedResultsControl
from django_auth_ldap.backend import LDAPBackend, _LDAPUser


user = _LDAPUser(LDAPBackend(), "any")
connect = user.connection
page_control = SimplePagedResultsControl(True, size=2, cookie='')

result = []
fuse = 2
while True:
    fuse -= 1
    if fuse < 0:
        break
    response = connect.search_ext(
        "ou=some,dc=some,dc=some,dc=some",
        ldap.SCOPE_SUBTREE,
        "(objectClass=inetorgperson)",
        [],
        serverctrls=[page_control]
    )
    rtype, rdata, rmsgid, serverctrls = connect.result3(response)
    result.extend(rdata)
    controls = [control for control in serverctrls
                if control.controlType == SimplePagedResultsControl.controlType]
    if not controls:
        print("The server ignores RFC 2696 control")
        break
    if not controls[0].cookie:
        break
    page_control.cookie = controls[0].cookie

1 Ответ

0 голосов
/ 25 сентября 2019

Существует множество различных сценариев, которые могут быть задействованы в вашей среде.

  • Сколько пользователей в LDAP?
  • Какая реализация сервера LDAP?(Microsoft Active Directory?)
  • Возможно, вам потребуется использовать элемент управления Simple Paged Results .

. Что касается фильтра, есть некоторые примеры для Microsoft Active Directory

Для (НЕ ОБЪЯВЛЕНИЙ) чего-то простого, например

(objectClass=inetorgperson)

Должно быть достаточно.

...