7

python-ldap を使用して Active Directory を照会しています

私はこのDNを持っています

CN=Whalen\, Sean,OU=Users,OU=Users and Groups,DC=example,DC=net

それはクエリのベースとしてうまく機能しますが、このような検索フィルターで使用しようとすると

(&(objectClass=group)(memberof:1.2.840.113556.1.4.1941:=CN=Whalen\, Sean,OU=Users,OU=Users and Groups,DC=example,DC=net))

Bad search filterエラーが発生します。私のテストでは、バックスラッシュ ( ) でエスケープしたにもかかわらず、CN のコンマが原因のようです\。ただし、コンマは、フィルターでエスケープする必要がある文字としてMicrosoft のドキュメントに記載されていません。

私は何が欠けていますか?

4

2 に答える 2

8

LDAP フィルター仕様では、次の文字に特別な意味が割り当てられています。これらの文字は、検索フィルター( rfc2254 )で使用される場合* ( ) \ NUL、バックスラッシュとそれに続く 2 文字の ASCII 16 進数表現でエスケープする必要があります。

*   \2A
(   \28
)   \29
\   \5C
Nul \00

つまり、識別名の特殊文字\5c(コンマを含む) をエスケープするために使用されるバックスラッシュは、検索フィルターで次のように表す必要があります。

(&(objectClass=group)(memberof:1.2.840.113556.1.4.1941:=CN=Whalen\5c, Sean,OU=Users,OU=Users and Groups,DC=example,DC=net))

以下は、検索フィルターで使用する場合に\, または whithでエスケープする必要がある dn 特殊文字のリストです。\5C

    +-------------------------------+---+
    | comma                         | , |
    +-------------------------------+---+
    | Backslash character           | \ |
    +-------------------------------+---+
    | Pound sign (hash sign)        | # |
    +-------------------------------+---+
    | Plus sign                     | + |
    +-------------------------------+---+
    | Less than symbol              | < |
    +-------------------------------+---+
    | Greater than symbol           | > |
    +-------------------------------+---+
    | Semicolon                     | ; |
    +-------------------------------+---+
    | Double quote (quotation mark) | " |
    +-------------------------------+---+
    | Equal sign                    | = |
    +-------------------------------+---+
    | Leading or trailing spaces    |   |
    +-------------------------------+---+
于 2016-10-01T10:29:26.533 に答える