0

私は、このユーザーがここで行っていたことと非常によく似た何かを達成しようとしています。

私は答えに従いましたが、それを機能させることができませんでした。Active Directory内では、memberOfフィールドは次のようになります。

CN=$VPN Users,CN=Users,DC=iai,DC=pri,CN=$ITAR,CN=Users,DC=iai,DC=pri,CN=allsubscribers,CN=Users,DC=iai,DC=pri

動作する私のフィルターは次のとおりです。

(&(objectCategory=person)(sAMAccountName=$p_username))

私は以下を機能させようとしています:

(&(objectCategory=person)(sAMAccountName=$p_username)(memberOf=CN=$ITAR))

CN = Users、DC = iai、DC = priである完全なDNもフィルターに追加しようとしましたが、次のようになります。

array(1) { ["count"]=> int(0) } 

私の応答として。

LDAP3を使用しています

これは、phpで記述された部分的な動作認証コードです。

  $login = ldap_bind( $url, "username@somedomain", $password ); 

  $attributes = array("displayname", "mailnickname");
  $filter = "(&(objectCategory=person)(sAMAccountName=$username))";

  $result = ldap_search($url, "CN=Users,DC=iai,DC=pri", $filter, $attributes);

  $entries = ldap_get_entries($url, $result);

私は何が間違っているのですか?

コード結果

@DaveRandomから

最初のVarダンプ:

string(49) "(&(objectCategory=person)(sAMAccountName=rmoser))"
array(2) {
  ["count"] => int(1)
  [0] => array(8) {
    ["displayname"] => array(2) {
      ["count"] => int(1)
      [0] => string(10) "Ryan Moser"
    }
    [0] => string(11) "displayname"
    ["memberof"] => array(4) {
      ["count"] => int(3)
      [0] => string(36) "CN=$VPN Users,CN=Users,DC=iai,DC=pri"
      [1] => string(31) "CN=$ITAR,CN=Users,DC=iai,DC=pri"
      [2] => string(40) "CN=allsubscribers,CN=Users,DC=iai,DC=pri"
    }
    [1]=> string(8) "memberof"
    ["mailnickname"] => array(2) {
      ["count"] => int(1)
      [0] => string(6) "rmoser"
    }
    [2] => string(12) "mailnickname"
    ["count"] => int(3)
    ["dn"] => string(36) "CN=Ryan Moser,CN=Users,DC=iai,DC=pri"
  }
}
bool(false)

2番目のvar_dump:

string(70) "(&(objectCategory=person)(sAMAccountName=rmoser)(memberof=*CN=$ITAR*))" 
array(1) {
  ["count"] => int(0)
} 
4

1 に答える 1

0

LDAPフィルターは完全一致を探します。

値のどこかに一致させるにCN=$ITARは、フィルターのワイルドカード文字で囲む必要があります*

このフィルターを試してください:

(&(objectCategory=person)(sAMAccountName=$p_username)(memberOf=*CN=$ITAR*))

また、これはPHPで有効な変数名であることを忘れないでください。その$ITARため、フィルター文字列を二重引用符で囲むと(補間するために必要になります)、PHPは変数としても$p_username補間を試みます。$ITARそれは(おそらく)存在せず、最終的には文字列から削除されます。

$filter = "(&(objectCategory=person)(sAMAccountName=$p_username)(memberOf=*CN=\$ITAR*))";

PHPで構築された動的フィルターに関する質問への役立つリンクはこれです。

于 2012-08-16T13:16:37.693 に答える