OpenLDAPをPHPで操作する

開発課

OpenLDAPはディレクトリサービスを提供するオープンソースのLDAPサーバです。ディレトリサービスにはDNSのようなサービスも含まれるのですが、
OpenLDAPはネットワーク上に存在するサーバ、ネットワーク機器、ユーザ情報などを一元的に管理するサーバです。
OpenLDAPの詳細はここでは説明しません。
PHPにはLDAPを操作するための関数が用意されています。
PHPをインストールする際に、–with-ldapをつけてコンパイルしておく必要があります。

LDAPで検索、更新、削除を行う際、まずバインド処理が必要です。
ここでは、LDAPに登録したグループ情報を取り出す例を記載します。
※FuelPHPを使用しています。

configディレクトリ配下にldap.phpを作成
※呼び出しそうな固定値をあらかじめセットしておく

return array(
                'ldap_connection' => array(
                        'ldap_host' => '127.0.0.1',    //LDAPサーバのIPアドレス
                        'ldap_port' => '389',    //LDAPのポート番号
                        'ldap_dc' => 'dc=example,dc=jp',    //ドメインコンポーネント名
                        'ldap_cn' => 'Manager',    //管理者名
                        'ldap_pass' => 'password',    //管理パスワード「
                        'ldap_DN' => 'cn=Manager,dc=example,dc=jp'    //識別名
                )
);

モデル

class Model_Ldapsearch extends \Model {

    public static function get_groups() {
        // configディレクトリに用意したldap.phpを呼び出す
        Config::load ( 'ldap', true );
        $ld = Config::get ( 'ldap.ldap_connection' );
        // $ld配列を展開
        extract ( $ld );

        // LDAP接続開始
        // LDAPサーバ接続先を設定
        $ldap_conn = ldap_connect ( $ldap_host, $ldap_port );
        if ($ldap_conn !== false) {
            // ldap_connect構文チェックが成功したらバインド処理
            $ldap_bind = @ldap_bind ( $ldap_conn, $ldap_DN, $ldap_pass );
            if ($ldap_bind == true) {
                echo "

バインド成功

"; // ここでLDAP検索処理を入れる // 以下の例は登録されているグループ一覧を取得し、必要な属性のみ取り出すを処理です $dn = "ou=Groups,dc=example,dc=jp"; $filter = 'gidNumber=*'; $attributes = array ( "cn", "gidNumber" ); // ldap_search (リソースID, ベースDN, 検索フィルタ, 必要な属性); $ldap_search = ldap_search ( $ldap_conn, $dn, $filter, $attributes ); $groups = ldap_get_entries ( $ldap_conn, $ldap_search ); return $groups; } } } }

コントローラ

class Controller_Ldapsearch extends Controller
{
    public function action_index()
    {
        // モデル呼び出し
        $groups = Model_Ldapsearch::get_groups();
        foreach ($groups as $group) {
            var_dump($group);
        }
        
        View::forge('適当なviewに渡す');
    }
}

Viewは省略します。

以下のような配列で格納されてますので、適当に取り出します。

int(3)
array(6) {
  ["cn"]=>
  array(2) {
    ["count"]=>
    int(1)
    [0]=>
    string(6) "system"
  }
  [0]=>
  string(2) "cn"
  ["gidnumber"]=>
  array(2) {
    ["count"]=>
    int(1)
    [0]=>
    string(4) "1001"
  }
  [1]=>
  string(9) "gidnumber"
  ["count"]=>
  int(2)
  ["dn"]=>
  string(38) "cn=system,ou=Groups,dc=example,dc=jp"
}

▼ やたらテクってる 関連記事