Я выполняю сквозную аутентификацию на сервере 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
, без всех \
s).
Есть ли способ выполнить запрос LDAP для определенного IP-адреса?
Проблема в том, что сетевой адрес использует синтаксис сетевого адреса, который является структурированным атрибутом. Я писал о различных типах синтаксиса в этих двух статьях:
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 для NDS, который был платным.
Вопрос в том, какое сравнение разрешено по этому атрибуту.
С другой стороны, если вы запросили loginTime = *, это покажет тех, кто в настоящее время вошел в систему, и сократит набор пользователей для цикла.
Также networkAddress многозначен.
Похоже, у вас одинарная цитата не в том месте в вашем поисковом фильтре. Если это скорее будет:
results = server.search_s(
self.basedn,
ldap.SCOPE_SUBTREE,
'(&(objectClass=user)(networkAddress=#9#\x00\x00\xc0\xa8\n\x1e))'
)
Я предполагаю, что код, который вы на самом деле запускаете, не имеет неэкранированного апострофа внутри строки?