私は、いくつかの OU に基づいてユーザーをフィルターする MS AD 用の LDAP フィルターを作成しようとしています (私のケースでは、特定の OU を除外するだけでなく、含めることもできません)。
(&(cn=Testuser1)(|(ou:dn:=Included1)(ou:dn:=Included2)))
(&(cn=Testuser1)(!(ou:dn:=Excluded)))
動作しません。(ou:dn:=Included1)
実際の「フォルダ」オブジェクト (以下で * でマークされている) をリストするものをテストしましたが、その下のユーザー (OU を含む DN) はリストされません。複数のユーザーを見つける必要があるため、検索ベースを使用できません。
ou=Included1,dc=example,dc=com *
cn=Testuser1,ou=Included1,dc=example,dc=com +
ou=Included2,dc=example,dc=com
cn=Testuser1,ou=Included2,dc=example,dc=com +
ou=Excluded,dc=example,dc=com
cn=Testuser1,ou=Excluded,dc=example,dc=com -
上記の 2 つのサンプル フィルターでは、3 つ (- でマーク) ではなく、2 つの Testuser1 エントリ (+ でマーク) を検索します。
しかし、実際にはどれも一致しません。実際のユーザーエントリには、フィルタリングできる属性に他の違いはありません。
「ou:dn:=
」構文は、名前の最初のコンポーネントが目的のものであるオブジェクトのみを検索し、それ以外のものは検索しないようです...?
答え1
否定的な OU= コンポーネント フィルターは、構築された属性であるため、Microsoft LDAP では機能しないようです (リンクを提供してくれた @semicolon に感謝します)。
ただし、次のように完全な属性値を使用すると機能します。
(&(CN=%u)(!(distinguishedName=CN=%u,OU=Excluded,dc=example,dc=com)))