frei

旧「anney's room」からブログ「frei」だけ引っ越し&残しました

えるだっぷ[2]。

その「わかった」と思ってる事は、

表面的な暗記じゃなくて、

本当の理解と呼べるのか一度考えてみて。>心に浮かんだ特定の人物

さて、世の中、根底を理解出来てない事だらけで

「わかってる」と胸をはれる事は

1つもないのかもしれないような、あに山ですが(笑)

今日もLDAPの設定の続きをしましたー。

で、よく考えたら、Debianなら、

apt-get で簡単にインストールできるんだっけか。

って訳で、apachedsを放り出して(笑)

UNIXな生活の「OpenLDAPの使用方法とスキーマ」を見つつ

OpenLDAPをリベンジ(?)でインストール。

とてもわかりやすくて有難い限りです。

あとはPHPのLDAP関数とか使えば

接続してデータ取ってこれるんですが。

結構、オブジェクトクラス定義やらが面倒で

まだその定義関連が試しきれてません。うーん。

でも、仮に簡単なLDAP操作クラスは作ってみたよ。

なんかまだよくわかってない部分が多いから、

どんな変数名にすりゃいいのか、悩んだ部分もあるけど(笑)

とにかく、まだ研究して改善せなアカン代物です。。。

おまけ。

メキメキドイツ語

なんせ日本におけるドイツ年ですから。

ケータイで軽く独語の勉強みたいっすよ。

今日SWR3聞いてたら、マンハイムの独語研究所だかが

よく使われる独語の単語ベスト10を発表したとかで、

それをリスナーに当てさせてたんだけど、

パパっと言った正解は…

 Prozent Uhr ja Euro Frau Land Millionen Mensch Tag Stadt

…でした。

1回しか言ってなかったんで、急いでメモったものの

間違ってたらごめん。

へなちょこLDAP操作クラス。

<?

/*

* LDAPサーバーへの接続・検索クラス

* @author anigon 2005.08.21

*/

class LDAP {

var $ds = null;

var $error = null;

/*

* LDAPサーバーへの接続

* @param $host LDAPホストIPアドレス

* @param $port LDAPポート番号

* @return TRUE 成功 / FALSE 失敗

*/

function open($host, $port = 389) {

$this->ds = @ldap_connect($host, $port);

if ($this->ds == null) {

$this->error = "OPEN ERROR";

return FALSE;

}

return TRUE;

}

/*

* オブションをセット

* @param $option オプション名

* @param $value 設定する値

* @return TRUE 成功 / FALSE 失敗

*/

function setOption($option, $value) {

if (@ldap_set_option($this->ds, $option, $value) == FALSE) {

$this->error = "SET OPTION ERROR";

return FALSE;

}

return TRUE;

}

/*

* 指定のDNへ接続

* @param $dn Base DN

* @param $password パスワード

* @return TRUE 成功 / FALSE 失敗

*/

function bind($dn, $password) {

if (@ldap_bind($this->ds, $dn, $password) == FALSE) {

$this->error = "BIND ERROR";

return FALSE;

}

return TRUE;

}

/*

* 指定のDNを検索

* @param $dn Base DN

* @param $filter 検索

* @return 検索ID

*/

function search($dn, $filter) {

if (!$searchID = @ldap_search($this->ds, $dn, $filter)) {

$this->error = "SEARCH ERROR";

return 0;

}

return $searchID;

}

/*

* 指定の検索IDの検索結果件数を返す

* @param $searchID 検索ID

* @return 検索結果件数

*/

function entrySize($searchID) {

if (!$count = @ldap_count_entries($this->ds, $searchID)) {

$this->error = "GET SIZE OF ENTRIES ERROR";

return 0;

}

return $count;

}

/*

* 指定の検索IDの検索結果を多次元配列で返す

* @param $searchID 検索ID

* @return 検索結果

*/

function getEntry($searchID) {

if (!$entries = @ldap_get_entries($this->ds, $searchID)) {

$this->error = "GET ENTRIES ERROR";

return null;

}

return $entries;

}

/*

* LDAPサーバーからの切断

* @return TRUE 成功 / FALSE 失敗

*/

function close() {

return ldap_close($this->ds);

}

/*

* エラーメッセージを返す

* @return エラーメッセージ

*/

function getError() {

return $this->error;

}

}

?>

上記のクラスを使ったメインスクリプト

php.net に載ってたヤツの改造。

<?

// LDAPクラスのインクルード

require_once('../common/cp_ldap.php');

// ---------------------------------------------

// 初期設定

// ---------------------------------------------

$ldapHost = "192.168.0.111"; // LDAPサーバーIPアドレス

$password = "XXXXXXX"; // 一応パスワードなんか設定しといたりして

$filter = "objectclass=*"; // まだ使いこなせてないフィルター設定

$baseDN = "cn=admin,dc=anigon,dc=net"; // ツリー状になってるディレクトリサービスのルートのDNかな

$searchDN = "cn=admin,dc=anigon,dc=net"; // どこを検索するのかって事かな

// ---------------------------------------------

// main

// ---------------------------------------------

$LDAP = new LDAP();

if ($LDAP->open($ldapHost) == FALSE) {

echo $LDAP->getError();

}

// なんか VERSION 3 にしないとanonymousでしか入れないみたいなんで???

if ($LDAP->setOption(LDAP_OPT_PROTOCOL_VERSION, 3) == FALSE) {

echo $LDAP->getError();

$LDAP->close();

}

if ($LDAP->bind($baseDN, $password) == FALSE) {

echo $LDAP->getError();

$LDAP->close();

}

if (!$searchID = $LDAP->search($searchDN, $filter)) {

echo $LDAP->getError();

$LDAP->close();

}

echo $LDAP->entrySize($searchID) . "件見つかりました<br />";

$info = $LDAP->getEntry($searchID);

for ($i = 0; $i < $info['count']; $i++) {

printf('<ul><strong>%s</strong>(%d件)', $info[$i]['dn'], $info[$i]['count']);

$keys = array_keys($info[$i]);

for ($j = 0; $j < count($keys); $j++) {

if (preg_match("/^[0-9]+(\r\n|\n?)$/", $keys[$j])) continue;

if (preg_match("/^count|dn$/", $keys[$j])) continue;

printf('<li>%s : ', $keys[$j]);

$values = $info[$i][$keys[$j]];

for ($numOfValue = 0; $numOfValue < count($values); $numOfValue++) {

if (preg_match("/^$/", $values[$numOfValue])) continue;

echo $values[$numOfValue] . ", ";

}

echo "</li>";

}

echo "</ul>";

}

$LDAP->close();

?>