环境:
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
素胚勾勒不出你
相关分类