web-dev-qa-db-ja.com

LDAPで特定のIPアドレスを持つユーザーを検索します

NovelleDirectoryサーバーに対してパススルー認証を行っています。現在、次のリクエストを実行しています。

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クエリを実行する方法はありますか?

2
Harley

問題は、ネットワークアドレスが構造化属性であるネットアドレスの構文を使用していることです。私はこれらの記事のペアでさまざまな構文タイプについて書きました:

http://www.novell.com/communities/node/6450/interesting-schema-syntaxes-edirectory-identity-manager-perspective-part-1http:// www。 Novell.com/communities/node/6457/interesting-schema-syntaxes-edirectory-identity-manager-perspective-part-2

#は、属性のLDAPビューの個別のフィールドに署名します。

LogicSource for NDSのこれらの記事のスキーマ参照を調べていました。これは、有料のドキュメントでした。

問題は、その属性で許可される比較は何ですか。

ちなみに、loginTime = *を照会すると、現在ログインしているユーザーが表示され、ループするユーザーのセットが減ります。

また、networkAddressは複数値です。

2
geoffc

実際に実行しているコードには、文字列内にエスケープされていないアポストロフィが含まれていないと思いますか?

0
Zanchey

検索フィルターの間違った場所に一重引用符が含まれているようです。それはむしろあるべきです:

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