Назад | Перейти на главную страницу

Поиск в 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, без всех \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))'
)

Я предполагаю, что код, который вы на самом деле запускаете, не имеет неэкранированного апострофа внутри строки?