13

LDAP Active Directoryを使用していて、すべてのユーザーを一覧表示しようとしています。私は完璧に機能するこのフィルターを持っています:

(&(objectclass=user)(|(memberOf=...)(memberOf=...)...)(|(userprincipalname=...)(displayname=...)))

残念ながら、ADにはオブジェクトクラス「user」のコンピューターユニットやその他のデバイスも存在するため、以前のフィルターでは、すべてのユーザー、コンピューター、デバイス、部屋などを取得しました。

これらのコンピューターとデバイスにはオブジェクトクラス"computer"もあるため、実際のユーザーのみを一覧表示するには、objectclass!="computer"でフィルターを拡張する必要があります。これまで私はこれらのフィルターを試しましたが、どれも機能していません(データは返されません!):

(&(objectclass=user)(!objectclass=computer)(|(memberOf=...)(memberOf=...)...)(|(userprincipalname=...)(displayname=...)))
(&(objectclass=user)(!(objectclass=computer))(|(memberOf=...)(memberOf=...)...)(|(userprincipalname=...)(displayname=...)))
(!(objectclass=computer))(&(objectclass=user)(|(memberOf=...)(memberOf=...)...)(|(userprincipalname=...)(displayname=...)))
(!objectclass=computer)(&(objectclass=user)(|(memberOf=...)(memberOf=...)...)(|(userprincipalname=...)(displayname=...)))

(実際のユーザーはオブジェクトクラス「コンピューター」を持っていません)。

私はPHPldap実装を使用しているので、ldap_search()メソッドを使用しています。

「等しくない」構文が見つかりました。例: http://technet.microsoft.com/en-us/library/aa996205%28EXCHG.65%29.aspxまたはここ:http : //msdn.microsoft.com/ en-us / library / aa746475%28v = vs.85%29.aspx

DN内の(!CN = Computers)でユーザーをフィルタリングしようとすることもできますが、私にとってはより論理的であるため、最初に(!objectclass = computer)をフィルタリングしたいと思います。

objectclass!= "computer"式の正しい構文は何ですか?

4

2 に答える 2

28

あなたが提供した最初のリンクとは異なり、(!objectclass=computer)は有効なフィルター式ではありません。する必要があります(!(objectclass=computer))。RFC2254を参照してください。

filter :: = "(" filtercomp ")"

:: = "!"ではありません フィルター

だからあなたのフィルターは

(&(!(objectclass=computer))(objectclass=user)(|(memberOf=...)(memberOf=...)...)(|(userprincipalname=...)(displayname=...)))
于 2011-03-11T08:56:34.553 に答える
7

すべてのユーザーを取得しようとしている場合は、次のようにすることができます。

(&
   (objectclass=user)
   (!(objectClass=computer))
)

特定のグループのメンバーであり、指定されたプリンシパル名を持つユーザーを取得しようとしているようです(右?)。もしそうなら、あなたはすることができます:

(&
    (objectclass=user)
    (!(objectClass=computer))
    (|
        (userPrincipalName=username@domain.com)
        (displayName=John Doe)
    )
    (|
        (memberOf=CN\=group1,CN\=Groups,DC\=domain,DC\=com)
        (memberOf=CN\=group2,CN\=Groups,DC\=domain,DC\=com)
    )
)

これらは私の側で機能します(PHPコードの空白を削除する必要があるかもしれません)

于 2011-03-10T17:42:53.693 に答える