ตอนแรกต้องทดสอบก่อนว่า Server เราสามารถใช้ LDAP extension ได้ไหม
วิธีทดสอบมี 3 วิธีคือ
1. สร้างแฟ้มสำหรับแสดงรายละเอียดของ php สมมุติชื่อ phpinfo.php
Code (PHP)
1.
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
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
Code (PHP)
1.
ldap_connect(?localhost?);
ถ้ามันขึ้นแบบนี้
Code
Fatal error: Call to undefined function: ldap_connect () in /XXXX/i.php on line 2
ก็แปลว่าเครื่องคุณไม่สามารถใช้ ldap ได้
3. สร้างแฟ้มสำหรับทดสอบ function โดยเฉพาะ เช่น test_function.php
Code (PHP)
01.
alert(
'สามารถใช้ Function $function ได้'
);
02.
03.
$function
=
$_POST
[
"function"
];
04.
if
(
$function
){
05.
if
(function_exists(
$function
)){
06.
echo
"Funtion นี้ใช้ได้"
;
07.
}
else
{
08.
echo
"Funtion นี้ใช้ไม่ได้"
;
09.
}
10.
}
คราวนี้สมมุติว่าเครื่องคุณใช้ ldap ไม่ได้ ก็ต้องคอมไพล์ php กันใหม่ครับ ให้ใช้ ?with-ldap ด้วยนะครับ
คราวนี้สมมุติว่าเครื่องคุณใช้ ldap ได้
ขั้นตอนมันก็ไม่มีอะไรมาก
จะสามารถแบ่งได้ 3 ขั้นตอนคือ (อันนี้ผมแบ่งเองนะครับ)
1. ติดต่อกับ LDAP Server
ตอนแรกก็ติดต่อกับ LDAP Server ก่อนนะครับ
Code (PHP)
1.
$ds
=ldap_connect(?localhost?,?389?)
ตรง localhost ให้เปลี่ยนเป็น ip หรือชื่อเครื่อง Server ถ้า LAP Server เป็นเครื่องอื่น และ port ปกติ
ของ LDAP คือ 389 ครับ ตรงนี้ไม่ต้องใสก็ได้ ก็เป็น
Code (PHP)
1.
ldap_connect(?localhost?)
หลังจากติดต่อได้แล้วก็ต้องแสดงว่าใครคือผู้ติดต่อโดยใช้คำสั่งนี้ครับ
ldapbind = ldap_bind($ds, $binddn, $password);
ส่วนนี้อาจจะพูดได้ว่าเป็นการ Login หรือการ ตรวจสอบการ Login ก็ได้ครับ ซึ่งผมเองได้เขียน
Function สำหรับการตรวจสอบ Login ดังตัวอย่างครับ
Code (PHP)
01.
function
ldap_login(
$ds
,
$username
,
$password
,
$ou
,
$suffix
){
02.
$i
=0;
03.
while
(1){
04.
$binddn
=
"uid=$username,ou="
.
$ou
[
$i
].
","
.
$suffix
;
05.
@
$ldapbind
= ldap_bind(
$ds
,
$binddn
,
$password
);
06.
if
(
$ldapbind
){
07.
return
true;
08.
break
;
09.
}
else
{
10.
if
(
$i
==3){
11.
ldap_close(
$ds
);
12.
return
false;
13.
break
;
14.
}
15.
}
16.
$i
++;
17.
}
18.
}
เวลาจะใช้ก็
Code (PHP)
1.
$ou
=
array
(
"student"
,
"staff"
,
"unistaff"
);
2.
$suffix_string
=
"dc=psu,dc=pn"
;
3.
if
(ldap_login(
$ds
,
$USER
,
$PASSWORD
,
$ou
,
$suffix_string
)){
4.
echo
?สวัสดีครับ?;
5.
}
else
{
6.
echo
?User หรือ Password ผิด?;
7.
}
2. การทำงาน คราวนี้คุณจะทำอะไรก็ได้แล้วแต่คุณนะครับ
แต่ที่ผมจะแนะนำก็มี 4 อย่าง คือ การ เพิ่ม การ ลบ การแก้ไข และการค้นหา User
2.1 การ เพิ่ม User ใช้คำสั่ง ldap_add ครับ ดังตัวอย่าง
Code (PHP)
01.
$info
[
"cn"
]=?Mr.Patt Emmawat?;
02.
$info
[
"sn"
]=Patt;
03.
$info
[
"ou"
]=
"student"
;
04.
$info
[
"mail"
]=s4145217@remove.mor-
or
.pn.psu.ac.th";
05.
$info
[
"objectclass"
][0]=
"top"
;
06.
$info
[
"objectclass"
][1]=
"person"
;
07.
$info
[
"objectclass"
][2]=
"inetOrgPerson"
;
08.
$info
[
"objectclass"
][3]=
"organizationalPerson"
;
09.
$info
[
"objectclass"
][4]=
"posixAccount"
;
10.
$info
[
"objectclass"
][5]=
"shadowAccount"
;
11.
$info
[
"uidNumber"
]=1000;
// ใน linux คือ uid หรือ หมายเลขประจำตัวของ user
12.
$info
[
"uid"
]=?s4145217?;
// คือ ส่วนของ User Name
13.
$info
[
"gidNumber"
]=
"1000"
;
// ใน linux คือ gid หรือ หมายเลขประจำตัวของ group
14.
$info
[
"homeDirectory"
]="/home/s4145217;
15.
$info
[
"loginShell"
]=
"/bin/sh"
;
16.
$pwd
=md5(?s4145217?);
17.
info[
"userPassword"
]=
$pwd
[rand(0,31)].
$pwd
[rand(0,31)].
$pwd
[rand(0,31)].
$pwd
[rand(0,31)].
$pwd
[rand(0,31)];
// Password ของ User
18.
$r
=ldap_add(
$ds
,
"uid=s4145217,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)
Code (PHP)
1.
$sr
=ldap_search(
$ds
,
"dc=oasitzone,dc=pn"
,
"uid="
.
$login
.
""
,
$justthese
);
2.
$info
= ldap_get_entries(
$ds
,
$sr
);
3.
print_r(
$info
[0])
Code (PHP)
1.
$justthese
=
array
(
"dn"
,
"cn"
,
"uid"
);
//ต้องการอะไรก็ใส่เข้าไป
2.
$sr
=ldap_search(
$ds
,
"dc=oasitzone,dc=pn"
,
"uid=s4145217"
,
$justthese
);
3.
$info1
= ldap_get_entries(
$ds
,
$sr
);
4.
print_r(
$info
[0])
Code (PHP)
1.
$sr
=ldap_search(
$ds
,
"dc=oasitzone,dc=pn"
,
"uid=s4145217"
);
2.
$info
= ldap_get_entries(
$ds
,
$sr
);
3.
$r
=ldap_delete(
$ds
,
$info1
[0][
"dn"
]);
Code (PHP)
1.
$sr
=ldap_search(
$ds
,
"dc=oasitzone,dc=pn"
,
"uid="
s4145217"?);
2.
$info1
= ldap_get_entries(
$ds
,
$sr
);
3.
$info
[
"userPassword"
]=
$_POST
[
'userPassword'
];
4.
ldap_modify(
$ds
,
$info1
[0][
"dn"
],
$info
);
อ้างอิง http://www.thaicreate.com/community/ldap2.html
No comments:
Post a Comment