在 LDAP 中搜索具有特定 IP 地址的用户

在 LDAP 中搜索具有特定 IP 地址的用户

我正在针对 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 查询?

答案1

问题在于,Network Address 使用的语法是 Net Address,这是一种结构化属性。我在这两篇文章中介绍了各种语法类型:

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 是多值的。

答案2

我假设您实际运行的代码在字符串内没有未转义的撇号?

答案3

看起来您的搜索过滤器中的单引号位置不对。它应该是:

results = server.search_s(
    self.basedn,
    ldap.SCOPE_SUBTREE,
    '(&(objectClass=user)(networkAddress=#9#\x00\x00\xc0\xa8\n\x1e))'
)

相关内容