2016-12-13 13 views
-1

私はldap_searchを使用して、ADデータベースにユーザーが存在するかどうかを確認しようとしています。ldap_searchが動作していることを確認するには? (PHP)

これは、接続するための私のコードです:

$ldapconn = ldap_connect("10.0.0.230"); 
     $clave = "XXX"; 
     $searchUser = "YYY"; 
     $ldap_success = false; 
     if (ldap_bind($ldapconn, $searchUser, $clave)) { 

      $attributes = ['cn']; 
      $filter = "(&(objectClass=user)(objectCategory=person)(userPrincipalName=".ldap_escape($post_send['username'], null, LDAP_ESCAPE_FILTER)."))"; 
      $baseDn = "DC=redcne,DC=cne,DC=cl"; 
      $results = ldap_search($ldapconn, $baseDn, $filter, $attributes); 
      var_dump($results); 
      print_r($results); 
      exit(0); 

しかし$resultsは常にfalseを返します。あれば、私は知らない。私はldap_search

  • に私のパラメータで間違いを犯して

    • パラメータが有効ではありません

    私はこのように、最初にバインドする必要があります。

    trueを返す
    ldap_bind($ldapconn, $searchUser, $clave)) 
    

    は、私はADに特異的に結合することができます知っているが、私は正しくldap_search一部をやっているか、私は私のpermissonsまたはSOMETに問題がある場合、私はどのようにチェックすることはありませんそのようなヒンジ。

    UPDATE: 私はエラーを得た:

    ldap_search(): Search: Operations error 
    
  • +0

    なぜ '@'が 'ldap_search'の前にあるのですか?あなたはそれが何をしているのか分かりますか? –

    +0

    申し訳ありませんが、間違ったコードは、私にそれを編集させてください。 – pmirnd

    答えて

    0

    問題がフィルターにあった、私は 'CN' より、別のフィールドを使用していた、それはsamaccountnameを 'でした。私はADのすべての情報をダウンロードしなければならなかったので、使用するフィールドを確認することができました。さらに、小文字のuserPrincipalNameを使用して作業する必要がありました。

    $ldapconn = ldap_connect("10.0.0.230"); 
    ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0) or die('Unable to set LDAP opt referrals'); 
    ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3) or die('Unable to set LDAP protocol version'); 
    $searchPass = "XXX"; 
    $searchUser = "YYY"; 
    $ldap_success = false; 
    if (ldap_bind($ldapconn, $searchUser, $searchPass)) { 
        try{ 
         $post_send['password'] = $searchPass; 
         $attributes = ['cn']; 
         $filter = "(&(objectClass=user)(objectCategory=person)(samaccountname=".ldap_escape($post_send['username'], null, LDAP_ESCAPE_FILTER)."))"; 
         $baseDn = "DC=XXX,DC=XX,DC=cl"; 
         $results = ldap_search($ldapconn, $baseDn, $filter, $attributes); 
         $info = ldap_get_entries($ldapconn, $results); 
         if ($info && $info['count'] === 1) { 
           $ldap_success = true; 
         } else { 
           $ldap_success = false; 
         } 
        } 
        catch(\Exception $e){ 
          $ldap_success = false; 
        } 
    } 
    
    関連する問題