我正在对 Novell eDirectory 服务器进行直通身份验证。目前我执行以下请求:
results = server.search_s(
self.basedn,
ldap.SCOPE_SUBTREE,
'(objectClass=user)',
attrlist=['uid', 'networkAddress'])
(这是在python中,如果你想让我解释一下,请告诉我。)
这种方法的问题是每个查询都返回服务器上的每个用户,然后我必须循环查找我感兴趣的用户。我缓存它,但我真正想做的是这个:
results = server.search_s(
self.basedn,
ldap.SCOPE_SUBTREE,
'(&(objectClass=user)(networkAddress=#9#\x00\x00\xc0\xa8\n\x1e))')
(这个古怪#9#
的东西就是 IP 的存储方式——它实际上是 192.168.10.30)
当我进行查询时,networkAddress
我得到一个'Invalid Syntax'
错误(即使我做了类似的事情networkAddress=blah
,没有所有\
的)。
有没有办法对特定 IP 进行 LDAP 查询?
问题是网络地址使用的是结构化属性的网络地址语法。我在这两篇文章中写到了各种语法类型:
http://www.novell.com/communities/node/6450/interesting-schema-syntaxes-edirectory-identity-manager-perspective-part-1 http://www.novell.com/communities/node/6457/interesting -schema-syntaxes-edirectory-identity-manager-perspective-part-2
# 在属性的 LDAP 视图中标记单独的字段。
我正在查看 LogicSource for NDS 中那些文章的架构参考,这是一个收费文档。
问题是该属性允许的比较是什么。
另一方面,如果您查询 loginTime=* 这将显示当前已登录的用户,并会减少循环访问的用户集。
此外,networkAddress 是多值的。
我假设您实际运行的代码在字符串中没有未转义的撇号?
看起来您在搜索过滤器中的错误位置有一个单引号。它应该是: