ก่อนอื่น สมมุติว่าทุกๆท่านรู้จัก LDAP Server กันแล้วนะครับว่าคืออะไร ใช้ยังไง

ตอนแรกต้องทดสอบก่อนว่า Server เราสามารถใช้ LDAP extension ได้ไหม

วิธีทดสอบมี 3 วิธีคือ

1. สร้างแฟ้มสำหรับแสดงรายละเอียดของ php สมมุติชื่อ phpinfo.php

phpinfo();

สร้างเสร็จแล้ว ก้เรียกใช้ ผ่าน Browser อะไรก็ได้ มองหาตารางคล้ายๆกับตารางนี้

ldap
LDAP Support enabled
RCS Version $Id: ldap.c,v 1.154.2.7 2005/07/09 01:00:11 sniper Exp $
Total Links 0/unlimited
API Version 2004
Vendor Name OpenLDAP
Vendor Version 20129

ถ้าสามารถหาเจอ และตรง LDAP Support เขียนว่า enabled ก็แปลว่า Server คุณสามารถใช้ ldap ได้

2. สร้างแฟ้มสำหรับเรียกใชโดยตรง เช่น test1.php

ldap_connect(‘localhost’);

ถ้ามันขึ้นแบบนี้

Fatal error: Call to undefined function: ldap_connect () in /XXXX/i.php on line 2

ก็แปลว่าเครื่องคุณไม่สามารถใช้ ldap ได้

3. สร้างแฟ้มสำหรับทดสอบ function โดยเฉพาะ เช่น test_function.php

alert('สามารถใช้ Function $function ได้');

$function=$_POST["function"];
if($function){
  if(function_exists($function)){
   echo"Funtion นี้ใช้ได้
"
;
  }else{
   echo"Funtion นี้ใช้ไม่ได้
"
;
  }
}

 

คราวนี้สมมุติว่าเครื่องคุณใช้ ldap ไม่ได้ ก็ต้องคอมไพล์ php กันใหม่ครับ ให้ใช้ –with-ldap ด้วยนะครับ

คราวนี้สมมุติว่าเครื่องคุณใช้ ldap ได้

ขั้นตอนมันก็ไม่มีอะไรมาก

จะสามารถแบ่งได้ 3 ขั้นตอนคือ (อันนี้ผมแบ่งเองนะครับ)

1. ติดต่อกับ LDAP Server

ตอนแรกก็ติดต่อกับ LDAP Server ก่อนนะครับ

$ds=ldap_connect(‘localhost’,’389’)

ตรง localhost ให้เปลี่ยนเป็น ip หรือชื่อเครื่อง Server ถ้า LAP Server เป็นเครื่องอื่น และ port ปกติ

ของ LDAP คือ 389 ครับ ตรงนี้ไม่ต้องใสก็ได้ ก็เป็น

ldap_connect(‘localhost’)

หลังจากติดต่อได้แล้วก็ต้องแสดงว่าใครคือผู้ติดต่อโดยใช้คำสั่งนี้ครับ

ldapbind = ldap_bind($ds, $binddn, $password);

ส่วนนี้อาจจะพูดได้ว่าเป็นการ Login หรือการ ตรวจสอบการ Login ก็ได้ครับ ซึ่งผมเองได้เขียน

Function สำหรับการตรวจสอบ Login ดังตัวอย่างครับ

function ldap_login($ds,$username,$password,$ou,$suffix){
    $i=
0;
    while(
1){
        $binddn = "uid=$username,ou=".$ou[$i].",".$suffix;
        @$ldapbind = ldap_bind($ds, $binddn, $password);
        if ($ldapbind){
            return true;
            break;
        }else{
            if($i==
3){
                ldap_close($ds);
                return false;
                break;
            }
        }
        $i++;
   }
}

เวลาจะใช้ก็

$ou = array("student","staff","unistaff");
$suffix_string = "dc=psu,dc=pn";
if(ldap_login($ds,$USER,$PASSWORD,$ou,$suffix_string)){
    echo”
สวัสดีครับ”;
}else{
    echo”User
หรือ Password ผิด”;
}

2. การทำงาน คราวนี้คุณจะทำอะไรก็ได้แล้วแต่คุณนะครับ

แต่ที่ผมจะแนะนำก็มี 4 อย่าง คือ การ เพิ่ม การ ลบ การแก้ไข และการค้นหา User

2.1 การ เพิ่ม User ใช้คำสั่ง ldap_add ครับ ดังตัวอย่าง

$info["cn"]=”Mr.Patt Emmawat”;
$info["sn"]=Patt;
$info["ou"]="student";
$info["mail"]=s
4145217@remove.mor-or.pn.psu.ac.th";
$info["objectclass"][
0]="top";
$info["objectclass"][
1]="person";
$info["objectclass"][
2]="inetOrgPerson";
$info["objectclass"][
3]="organizationalPerson";
$info["objectclass"][
4]="posixAccount";
$info["objectclass"][
5]="shadowAccount";
$info["uidNumber"]=
1000;// ใน linux คือ uid หรือ หมายเลขประจำตัวของ user
$info["uid"]=”s
4145217”;// คือ ส่วนของ User Name
$info["gidNumber"]="
1000"; // ใน linux คือ gid หรือ หมายเลขประจำตัวของ group
$info["homeDirectory"]="/home/s
4145217;
$info["loginShell"]="/bin/sh";
$pwd=md
5(“s4145217”);
info["userPassword"]=$pwd[rand(
0,31)].$pwd[rand(0,31)].$pwd[rand(0,31)].$pwd[rand(0,31)].$pwd[rand(0,31)]; // Password ของ User
$r=ldap_add($ds, "uid=s
4145217,ou=student,dc=oasitzone,dc=pn", $info);

2.2 การค้นหา User ที่ต้องพุดก่อน เพราะว่า มันใช้การ ลบ และแก้ไข User ด้วยครับ (อำนวยความสะดวก เพราะ ผมเองก็ไม่จำหรอกครับ ว่า มี Ou กะ DN อะไรบ้าง จำแต่ว่ามี User อะไรบ้างก็พอ)

การ เพิ่ม การลบ การแก้ไข User เวลาใช้ ldap_bind ต้องใช้ User พิเศษ ครับ ให้ดูใช้ /slapd.conf

ส่วนของ rootdn และ rootpw

แต่การ ค้นหา ให้ใช้ แค่ dn ก็พอครับ (user+ou+suffix)

$sr=ldap_search($ds, "dc=oasitzone,dc=pn", "uid=".$login."",$justthese);
$info = ldap_get_entries($ds, $sr);
print_r($info[
0])

การค้นหาแบบนี้จะเป็นการดึงข้อมูลของ User ทั้งหมดมา ถ้าเราต้องการแบ่งบางส่วนให้แก้ไขดังนี้

$justthese = array("dn","cn","uid"); //ต้องการอะไรก็ใส่เข้าไป
$sr=ldap_search($ds, "dc=oasitzone,dc=pn", "uid=s4145217",$justthese);
$info
1 = ldap_get_entries($ds, $sr);
print_r($info[
0])

2.3 การลบ User

$sr=ldap_search($ds, "dc=oasitzone,dc=pn", "uid=s4145217");
$info = ldap_get_entries($ds, $sr);
$r=ldap_delete($ds,$info
1[0]["dn"]);

2.4 การแก้ไข User

$sr=ldap_search($ds, "dc=oasitzone,dc=pn", "uid="s4145217"”);
$info
1 = ldap_get_entries($ds, $sr);
$info["userPassword"]=$_POST['userPassword'];
ldap_modify($ds, $info
1[0]["dn"], $info);


3. ยุติการเชื่อมต่อ ง่ายๆสั้นๆ ldap_close($ds)