我正在对Novell eDirectory服务器进行直通authentication。 目前我执行以下请求:
results = server.search_s( self.basedn, ldap.SCOPE_SUBTREE, '(objectClass=user)', attrlist=['uid', 'networkAddress'])
(这是Python的,让我知道如果你想我解释它。)
这个方法的问题是每个查询都会返回服务器上的每一个用户,然后我必须循环查找我感兴趣的用户。我caching它,但是我真正想要做的是这个:
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查询?
问题是networking地址使用networking地址是一个结构化属性的语法。 我在这两篇文章中写了各种语法types:
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-语法-eDirectory的身份pipe理器透视部分-2-
#在属性的LDAP视图中标记单独的字段。
我正在查看LogicSource中用于NDS的这些文章的模式参考,这是一个收费文档。
问题是该属性允许的比较是什么。
从一个侧面来看,如果您查询的是loginTime = *,它将显示当前login的用户,并且会减less循环访问的用户。
另外,networkAddress是多值的。
我假设你正在运行的代码没有在string内部的未转义的撇号?
看起来你在searchfilter的错误位置有单引号。 它应该是:
results = server.search_s( self.basedn, ldap.SCOPE_SUBTREE, '(&(objectClass=user)(networkAddress=#9#\x00\x00\xc0\xa8\n\x1e))' )