Конверт:
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