Author Topic: Script php ช่วย generate ldif file ใช้ในการ import ข้อมูลเข้า ldap server ครับ  (Read 12492 times)

golfreeze

  • Administrator
  • Hero Member
  • *****
  • Posts: 2145
    • View Profile
    • นั่งสมาธิ สติปัฏฐานสี่ พาเที่ยววัด แนะนำวัด แจกcd ธรรมะฟรี
    • Email
#### Script php ช่วย generate ldif file ใช้ในการ import ข้อมูลเข้า ldap server ครับ ####

ก่อนจะใช้ script นี้ควรเตรียมไฟล์ข้อมูลให้เสร็จก่อนนะครับ
แล้วทำการใช้โปรแกรม navicat ช่วยอิมพอต ไฟล์ข้อมูลที่เตรียมไว้แล้ว ใส่ฐานข้อมูลแล้วให้ สคิปนี้ ช่วย generate อีกทีนะครัย

cherry# less get_data_to_ldap.php

<?php

//Connect confiG
$host = "localhost";
$rootadmin = "root";
$rootpassword = "zzzzz";
$dbname = "new_mail2";

//Connect
$link=mysql_connect($host,$rootadmin,$rootpassword) or die (mysql_error());
$select=mysql_select_db($dbname) or die (mysql_error());

// Query for table 'mailbox'
//$sqlgu="SELECT username, password, name, maildir, quota, domain FROM mailbox";
//Query for table 'new_mail'
$sqlgu="SELECT mail, password, CN, SN, mailautoreply, mailbox, quota, domain, username FROM new_mail";
$db_query=mysql_db_query($dbname,$sqlgu) or die(mysql_error());

$num_rows=mysql_num_rows($db_query);


$a=0;
while($a < $num_rows )
{
$result = mysql_fetch_array($db_query);

$mail=$result[mail];
$password=$result[password];
$CN=$result[CN];
$SN=$result[SN];
$mailbox=$result[mailbox];
$quota=$result[quota];
$domain=$result[domain];
$username=$result[username];
$mailautoreply=$result[mailautoreply];

$password_hash = '';
        $md5_hash = md5($password);
        for ( $i = 0; $i < 32; $i += 2 )
            $password_hash .= chr( hexdec( $md5_hash{ $i + 1 } ) + hexdec( $md5_hash{ $i } ) * 16 );
        $password_hash = '{MD5}'.base64_encode($password_hash);

#$md5pass=md5($password);


echo "dn: mail=$mail,vd=$domain,o=hosting,dc=xxx,dc=xxx,dc=th\n";
echo "objectClass: top\n";
echo "objectClass: VirtualMailAccount\n";
echo "objectClass: Vacation\n";
echo "objectClass: VirtualForward\n";
echo "objectClass: amavisAccount\n";
echo "mail: $mail\n";
echo "userPassword: $password_hash\n";
echo "cn: $CN\n";
echo "sn: $SN\n";
echo "smtpAuth: TRUE\n";
echo "quota: $quota\n";
echo "accountActive: TRUE\n";
echo "vdHome: /mbox\n";
echo "mailbox: $mailbox\n";
echo "uid: $username\n";
echo "mailAutoreply: $mailautoreply\n";
echo "delete: FALSE\n";
echo "otherTransport: phamm:\n";
echo "forwardActive: FALSE\n";
echo "amavisBypassVirusChecks: FALSE\n";
echo "amavisBypassSpamChecks: FALSE\n";
echo "amavisSpamKillLevel: 6.0\n";
echo "amavisSpamTag2Level: 6.0\n";
echo "amavisSpamTagLevel: 6.0\n";
echo "creationDate: 20101013\n";
echo "lastChange: 1225772978\n";
echo "vacationActive: FALSE\n";
echo "\n";
echo "\n";
$a++;
}
//echo "<center><br> All Record = $num_rows</center>";
mysql_close();
?>
« Last Edit: มิถุนายน 17, 2011, 04:46:11 PM by golfreeze »

golfreeze

  • Administrator
  • Hero Member
  • *****
  • Posts: 2145
    • View Profile
    • นั่งสมาธิ สติปัฏฐานสี่ พาเที่ยววัด แนะนำวัด แจกcd ธรรมะฟรี
    • Email
วิธีรัน ก็ง่ายๆ ครับ

#php less get_data_to_ldap.php > ldif_file.ldif

ก็จะได้ ldif_file.ldif เพื่อไป import ครับผม

golfreeze

  • Administrator
  • Hero Member
  • *****
  • Posts: 2145
    • View Profile
    • นั่งสมาธิ สติปัฏฐานสี่ พาเที่ยววัด แนะนำวัด แจกcd ธรรมะฟรี
    • Email
พอได้ไฟล์ ldif แล้วนำมา add ลงเครื่อง ldap server โดยสคิปอีกทีครับผม

#/home/script#less ldap_add.sh


##### Begin script #####

#!/bin/sh

PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
export PATH

##LDAP ADD Script
dateX=`date "+%Y%m%d"`
LDIFP="/home/add_user"
SRC="news_mail_ldif_local_20100401.txt"
LDIF="/home/add_user/ldif_file.ldif"
LDAPPASS="ปปปปป"
BASE="o=hosting,dc=xxx,dc=yyy,dc=com"
BINDDN="cn=admin,dc=xxx,dc=yyy,dc=com"
HOST="localhost"


ldapadd -h $HOST -D "$BINDDN" -w "$LDAPPASS" -a -f $LDIF > ${LDIFP}/${SRC}

CHECK_USER=`less ${LDIFP}/${SRC} | grep 'o=hosting' | wc -l`
echo "All user = ${CHECK_USER}"

##### End script #####

เมื่อรันเสร็จแล้ว ไม่มี error เกิดขึ้น ก็แสดงว่า import ข้อมูลเข้า ldap server ได้เรียบร้อยครับผม

golfreeze

  • Administrator
  • Hero Member
  • *****
  • Posts: 2145
    • View Profile
    • นั่งสมาธิ สติปัฏฐานสี่ พาเที่ยววัด แนะนำวัด แจกcd ธรรมะฟรี
    • Email
สำหรับ shell ที่เป็น linux นะครับ

##### Begin of script ######

#!/bin/bash

PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin
export PATH

##LDAP ADD Script
dateX=`date "+%Y%m%d"`
LDIFP="/home/golf/add_user"
SRC="news_mail_ldif_local_20100401.txt"
LDIF="/home/golf/add_user/ldif_local_20100401.ldif"
LDAPPASS="ปิดปิดปิด"
BASE="o=hosting,dc=xxx,dc=net,dc=xx"
BINDDN="cn=Directory admin,dc=xxx,dc=net,dc=xx"
HOST="ldap00.xxx.net.xx"


##Keep log for checking
ldapadd -h $HOST -D "$BINDDN" -w "$LDAPPASS" -x -f $LDIF > ${LDIFP}${SRC}

##Count account for adding process
CHECK_USER=`less ${LDIFP}/${SRC} | grep 'o=hosting' | wc -l`
echo "All user = ${CHECK_USER}"

##### End of script ######

golfreeze

  • Administrator
  • Hero Member
  • *****
  • Posts: 2145
    • View Profile
    • นั่งสมาธิ สติปัฏฐานสี่ พาเที่ยววัด แนะนำวัด แจกcd ธรรมะฟรี
    • Email
#### command ที่ใช้ในการ ldapmodify ครับ

#ldapmodify -h "localhost" -D "cn=admin,dc=xxx,dc=yyy,dc=com" -w "xxxx" -x -f /home/ldapadd/add.ldif


### command ที่ใช้ในการ  Ldapsearch ครับ
ldapsearch_nowrap -L -r -x -h "localhost" -D "cn=admin,dc=xxx,dc=yyy,dc=com" -w "xxxx" -b "o=hosting,dc=xxx,dc=yyy,dc=com" "(mail=golf@test.local)" vacationStart vacationEnd
 
ldapsearch -L -x -h "localhost" -D "cn=admin,dc=xxx,dc=yyy,dc=com" -w "xxxx" -b "o=hosting,dc=xxx,dc=yyy,dc=com" "(mail=golf@test.local)" vacationStart vacationEnd
 
###Use mozldap for use parameter "nowrap"
/usr/lib64/mozldap/ldapsearch -L -x -T -h "localhost" -D "cn=admin,dc=xxx,dc=yyy,dc=com" -w "xxxx" -b "o=hosting,dc=xxx,dc=yyy,dc=com" "(mail=golf@test.local)" vacationStart vacationEnd

ลองดูนะครับผม : )