<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2060839567905571834</id><updated>2012-02-16T01:19:38.666-08:00</updated><category term='PHP'/><category term='Drupal'/><category term='SMTP'/><category term='MySQL'/><category term='FTP'/><category term='Linux'/><category term='QMail'/><category term='Postfix'/><category term='CMS'/><category term='FreeBSD'/><category term='Windows'/><category term='Oracle'/><category term='SMS GTW'/><title type='text'>Linux Microsoft Windows FreeBSD SUN Solaris Oracle System Admin PHP Indonesia Blog</title><subtitle type='html'>Anything articles related to Unix, Linux, MS Windows and Network. Best Practice to Borland Delphi, Pascal, Microsoft VB, PHP and PERL. For System Administrator you can find  server configuration, security, database, backup &amp; recovery and other services that runnings on : SMTP, DNS, WEB Server, SVN, Antispam, Antivirus, Mailserver, Domain &amp; Hosting. For DB Admin please read articles about Oracle, SQL theory, MSSQL Server and MySQL.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://konang.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://konang.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Web Documentation</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>18</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2060839567905571834.post-3056029056331079172</id><published>2007-10-04T20:24:00.001-07:00</published><updated>2007-10-05T03:34:58.358-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='FreeBSD'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Automatic Backup Data To TAPE</title><content type='html'>If you want run scheduler for backup your data from disk to tape, please follow its steps below. Make sure your tape drive(s) is installed properly.&lt;br /&gt;&lt;br /&gt;Check with command below assume that your tape drive(s) is &lt;span style="font-family:courier new;color:#009900;"&gt;&lt;strong&gt;/dev/st0&lt;/strong&gt;&lt;/span&gt; or &lt;span style="font-family:courier new;color:#009900;"&gt;&lt;strong&gt;/dev/nst0&lt;/strong&gt;&lt;/span&gt; or &lt;span style="font-family:courier new;color:#009900;"&gt;&lt;strong&gt;/dev/tape.&lt;/strong&gt;&lt;/span&gt; Before run this command please insert tape into drive.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;strong&gt;&lt;span style="color:#cc0000;"&gt;[root@intranet~]# mt -f /dev/st0 status&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;pre class="source-code"&gt;&lt;code&gt;SCSI 2 tape drive:&lt;br /&gt;File number=0, block number=0, partition=0.&lt;br /&gt;Tape block size 512 bytes. Density code 0x40 (DLT1 40 GB, or Ultrium).&lt;br /&gt;Soft error count since last status=0&lt;br /&gt;General status bits on (41010000):&lt;br /&gt;BOT ONLINE IM_REP_EN&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;If your tape drive is OK then please create script to backup your data and place into one location or path.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;color:#cc0000;"&gt;&lt;strong&gt;# vi backup.sh&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="source-code"&gt;&lt;code&gt;#!/bin/sh&lt;br /&gt;###################################&lt;br /&gt;# Konang Supian #&lt;br /&gt;# 04 Okt 2007 MDGTI #&lt;br /&gt;###################################&lt;br /&gt;# File naming : day.month.year&lt;br /&gt;suffix=$(date +%d.%m.%Y)&lt;br /&gt;# Path to save file&lt;br /&gt;echo Creating New Directory ....&lt;br /&gt;dir=/usr/backup&lt;br /&gt;dir1=$dir/$suffix&lt;br /&gt;/bin/mkdir -p $dir1&lt;br /&gt;# Daily Backup DB Mysql&lt;br /&gt;echo Compressing DB MySQL ....&lt;br /&gt;/bin/tar -zcf $dir1/mysql.$suffix.tar.gz /var/lib/mysql&lt;br /&gt;# Daily Backup Source Program&lt;br /&gt;echo Compressing Source Program ....&lt;br /&gt;/bin/tar -zcf $dir1/source.$suffix.tar.gz /aplikasi&lt;br /&gt;# Daily Backup DNS Zone&lt;br /&gt;echo Compressing DNS Zone Data ....&lt;br /&gt;/bin/tar -zcf $dir1/named.$suffix.tar.gz /var/named/chroot/var/named&lt;br /&gt;# Writes to TAPE&lt;br /&gt;echo FULL BACUP TO TAPE ....&lt;br /&gt;/bin/tar cvf /dev/st0 $dir&lt;br /&gt;echo ------------&lt;br /&gt;echo FINISH REK&lt;br /&gt;echo ------------&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Edit your crontab :&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;color:#cc0000;"&gt;&lt;strong&gt;# crontab -e&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;color:#000099;"&gt;# Backup Harian DB Mysql, Source Program &amp;amp; DNS - pukul 05:00 pagi&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:#3333ff;"&gt;&lt;strong&gt;0 5 * * * /root/backup.sh&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;&lt;span style="color:#993399;"&gt;[LIST TAPE]&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="color:#cc0000;"&gt;&lt;strong&gt;# &lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#cc0000;"&gt;&lt;strong&gt;/bin/tar -tvf /dev/st0&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#cc0000;"&gt;[root@intranet~]# tar -tvf /dev/st0&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;pre class="source-code"&gt;&lt;code&gt;drwxr-xr-x root/root 0 2007-10-04 10:09:16 usr/backup/04.10.2007/&lt;br /&gt;-rw-r--r-- root/root 12409437 2007-10-04 10:36:25 usr/backup/04.10.2007/mysql.04.10.2007.tar.gz&lt;br /&gt;-rw-r--r-- root/root 228892698 2007-10-04 10:36:46 usr/backup/04.10.2007/source.04.10.2007.tar.gz&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="color:#993399;"&gt;&lt;strong&gt;[EXTRACT TAPE]&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#cc0000;"&gt;&lt;strong&gt;# /bin/tar -xvf /dev/st0&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#993399;"&gt;&lt;strong&gt;[REWIND &amp;amp; EJECT TAPE]&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size:85%;color:#cc0000;"&gt;# /bin/mt -f /dev/st0 rewoffl&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060839567905571834-3056029056331079172?l=konang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konang.blogspot.com/feeds/3056029056331079172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2060839567905571834&amp;postID=3056029056331079172' title='37 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/3056029056331079172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/3056029056331079172'/><link rel='alternate' type='text/html' href='http://konang.blogspot.com/2007/10/automatic-backup-data-to-tape.html' title='Automatic Backup Data To TAPE'/><author><name>Web Documentation</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>37</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060839567905571834.post-4100716848104294264</id><published>2007-09-26T20:00:00.000-07:00</published><updated>2007-10-05T03:15:44.854-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FreeBSD'/><category scheme='http://www.blogger.com/atom/ns#' term='QMail'/><category scheme='http://www.blogger.com/atom/ns#' term='SMTP'/><category scheme='http://www.blogger.com/atom/ns#' term='Postfix'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Create LDAP Addressbook  from Qmail Account</title><content type='html'>&lt;pre class="source-code"&gt;&lt;code&gt;#!/usr/bin/perl&lt;br /&gt;&lt;br /&gt;# Filename: import.pl&lt;br /&gt;# Create LDAP addressbook or account by read vpopmail database on MYSQL&lt;br /&gt;# konangsupian@gmail.com&lt;br /&gt;# 13 Okt 2006&lt;br /&gt;# ------------------------&lt;br /&gt;# Updated Sept 2007&lt;br /&gt;# Command shell to get realname &amp;amp; username from vpopmail database.&lt;br /&gt;# mysql -u vpopmail -pmyvpopmailpasswd -e "use vpopmail; select pw_gecos,pw_name from mycompany_com;" &gt; mycompany.txt&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;$ou = "addressbook";&lt;br /&gt;open(LOGFILE,"mycompany.txt") or die("Could not open file.");&lt;br /&gt;while (&amp;lt;LOGFILE&amp;gt;) {&lt;br /&gt;        chop($_);&lt;br /&gt;        @pisah    = split("\t",$_);&lt;br /&gt;        $email    = $pisah[1]."\@mycompany\.com";&lt;br /&gt;        $realname = $pisah[0];&lt;br /&gt;        @name     = split(" ",$realname);&lt;br /&gt;        $var  = "";&lt;br /&gt;        $var .= "\r\n\r\n";&lt;br /&gt;        $var .= "dn: cn=$realname ($email),ou=$ou,dc=mycompany,dc=com\r\n";&lt;br /&gt;        $var .= "objectClass: top\r\n";&lt;br /&gt;        $var .= "objectClass: person\r\n";&lt;br /&gt;        $var .= "objectClass: organizationalPerson\r\n";&lt;br /&gt;        $var .= "objectClass: inetOrgPerson\r\n";&lt;br /&gt;        #$var .= "objectClass: user\r\n";&lt;br /&gt;        $var .= "cn: $realname ($email)\r\n";&lt;br /&gt;        $var .= "givenName: $realname\r\n";&lt;br /&gt;        $var .= "sn: $name[0]\r\n";&lt;br /&gt;        $var .= "mail: $email\r\n";&lt;br /&gt;        $var .= "physicalDeliveryOfficeName: Gd. Kwarnas Pramuka Jl. Medan Merdeka Timur No. 6 Jakarta\r\n";&lt;br /&gt;        $var .= "postalAddress: Gd. Kwarnas Pramuka Jl. Medan Merdeka Timur No. 6 Jakarta\r\n";&lt;br /&gt;        $var .= "o: MYCOMPANY\r\n";&lt;br /&gt;        $var .= "l: Jakarta\r\n";&lt;br /&gt;        $var .= "ou: $ou\r\n";&lt;br /&gt;        $var .= "st: DKI\r\n";&lt;br /&gt;        $var .= "postalCode: 10110\r\n";&lt;br /&gt;        $var .= "telephoneNumber: +62-21-12345\r\n";&lt;br /&gt;        $var .= "facsimileTelephoneNumber: +62-21-54321\r\n";&lt;br /&gt;        $var .= "pager: +62-\r\n";&lt;br /&gt;        $var .= "mobile: +62-\r\n";&lt;br /&gt;        $var .= "homePhone: +62-\r\n";&lt;br /&gt;        #$var .= "associatedDomain: internaldomain.com\r\n";&lt;br /&gt;        #$var .= "ou: mdgti\r\n";&lt;br /&gt;        #$var .= "userPassword: {MD5}yFfXwwYLUsJXeqTg==\r\n";&lt;br /&gt;        print $var;&lt;br /&gt;}&lt;br /&gt;close($LOGFILE);&lt;br /&gt;&lt;br /&gt;# End of import.pl&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Action on shell&lt;br /&gt;# ./import.pl &gt; mycompany.ldif&lt;br /&gt;&lt;br /&gt;Import data to LDAP with command :&lt;br /&gt;# ldapadd -x -v -c -D "dc=mycompany,dc=com" -W &lt; mycompany.ldif&lt;br /&gt;Enter password: ********&lt;br /&gt;&lt;br /&gt;*** Done ****&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060839567905571834-4100716848104294264?l=konang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konang.blogspot.com/feeds/4100716848104294264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2060839567905571834&amp;postID=4100716848104294264' title='50 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/4100716848104294264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/4100716848104294264'/><link rel='alternate' type='text/html' href='http://konang.blogspot.com/2007/09/create-ldap-addressbook-from-qmail.html' title='Create LDAP Addressbook  from Qmail Account'/><author><name>Web Documentation</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>50</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060839567905571834.post-2261797668113479879</id><published>2007-09-23T21:06:00.000-07:00</published><updated>2008-12-11T07:16:48.296-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FreeBSD'/><category scheme='http://www.blogger.com/atom/ns#' term='QMail'/><category scheme='http://www.blogger.com/atom/ns#' term='SMTP'/><category scheme='http://www.blogger.com/atom/ns#' term='Postfix'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Qmail Cluster ? Qmail Partitioning ? Qmail - Postfix Collaboration</title><content type='html'>Why I use questions on title above?&lt;br /&gt;Because I' m not sure with my concept below is called Qmail Cluster.&lt;br /&gt;Clustering that I get from &lt;a href="http://www.cheap56k.com/glossary/Clustering.html"&gt;here&lt;/a&gt; is :&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;b style="COLOR: rgb(153,0,0)"&gt;CLUSTERING&lt;/b&gt;&lt;span style="COLOR: rgb(153,0,0)"&gt; - Clustering is a technology using two or more computers that function together as a single entity for fault tolerance and load balancing. This can increase reliability and uptime in a client/server environment. One computer will sense when another computer is failing or getting bogged down and will take over full operation or just some of its tasks, depending on whether it's a complete fail-over design or just load balancing.&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;I agree that my design below on picture is called Qmail Partitioning because in my design there is no fail over function and or take over function. In my design only separate a single domain into some server that separated by location on same WAN/MPLS.&lt;br /&gt;&lt;br /&gt;I am not writing completely because I assume you are Linux/Unix system administrator so you can get complete of Qmail and Postfix resources at their official site :&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.qmail.org/"&gt;http://www.qmail.org/&lt;br /&gt;&lt;/a&gt;&lt;a href="http://www.lifewithqmail.org/"&gt;http://www.lifewithqmail.org/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.postfix.org/"&gt;http://www.postfix.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_VOJCurLV8RI/Rvc4EaDmoRI/AAAAAAAAABE/wrE5UXIPkDA/s1600-h/qmail-postfix-collaboration.gif"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/a&gt;&lt;div style="TEXT-ALIGN: center"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_VOJCurLV8RI/Rvc4EaDmoRI/AAAAAAAAABE/wrE5UXIPkDA/s1600-h/qmail-postfix-collaboration.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5113617550267556114" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: pointer; TEXT-ALIGN: center" alt="Qmail Cluster, Qmail Partitioning, Qmail - Postfix Collaboration" src="http://1.bp.blogspot.com/_VOJCurLV8RI/Rvc4EaDmoRI/AAAAAAAAABE/wrE5UXIPkDA/s400/qmail-postfix-collaboration.gif" border="0" /&gt;&lt;/a&gt;Note : my design above is already tested and running well.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;Please review my design above and drop your comment below.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060839567905571834-2261797668113479879?l=konang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konang.blogspot.com/feeds/2261797668113479879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2060839567905571834&amp;postID=2261797668113479879' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/2261797668113479879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/2261797668113479879'/><link rel='alternate' type='text/html' href='http://konang.blogspot.com/2007/09/qmail-cluster-qmail-partitioning-qmail.html' title='Qmail Cluster ? Qmail Partitioning ? Qmail - Postfix Collaboration'/><author><name>Web Documentation</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_VOJCurLV8RI/Rvc4EaDmoRI/AAAAAAAAABE/wrE5UXIPkDA/s72-c/qmail-postfix-collaboration.gif' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060839567905571834.post-8452704059069543314</id><published>2007-09-19T18:25:00.000-07:00</published><updated>2008-12-11T07:16:48.451-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QMail'/><category scheme='http://www.blogger.com/atom/ns#' term='SMTP'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Configure Awstats for Qmail Log</title><content type='html'>You may have Qmail statistic before read this article. I don't know what you have is better or similar with this one, Awstats Qmail log analyzer. But if you have time you may try this one.&lt;br /&gt;&lt;br /&gt;To create Awstats to analyze Qmail Log you have to prepare :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Log repository, put on crontab and will grep qmail log every 10 minutes. May this not accurate because the log can be duplicate but you can sort this for unique row. Place this log at &lt;span style="font-family:courier new;"&gt;/var/log/awstats.qmail&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(255, 0, 0);font-size:100%;" &gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;[getlog.sh]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;#!/bin/sh&lt;/span&gt;&lt;br /&gt;&lt;pre class="source-code"&gt;&lt;code&gt;#!/bin/sh&lt;br /&gt;cat /var/log/qmail/qmail-pop3d/current &amp;gt; /var/log/awstats.qmail&lt;br /&gt;cat /var/log/qmail/qmail-send/current &amp;gt;&amp;gt; /var/log/awstats.qmail&lt;br /&gt;cat /var/log/qmail/qmail-smtpd/current &amp;gt;&amp;gt; /var/log/awstats.qmail&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Awstats, download this cute statistics from &lt;a href="http://awstats.sourceforge.net/"&gt;http://awstats.sourceforge.net/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Get the script tools that will be used for at &lt;span style="color: rgb(0, 51, 0);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;../path/to/awstats/tools&lt;/span&gt;&lt;/span&gt;. You only need &lt;span style="color: rgb(255, 0, 0);"&gt;maillogconvert.pl &lt;/span&gt;script.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Create the small program from Phil Hagen named "qmail2awstats.pl" and&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);font-family:courier new;" &gt;[qmail2awstats.pl]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="source-code"&gt;&lt;code&gt;#!/usr/bin/perl&lt;br /&gt;# written by phil hagen on 27sep03&lt;br /&gt;&lt;br /&gt;while (&amp;lt;&amp;gt;) {&lt;br /&gt;@months = ('NUL', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'); $hostname = `hostname`;&lt;br /&gt;# $hostname = `hostname -s`;&lt;br /&gt;chomp $hostname;&lt;br /&gt;$line = $_;&lt;br /&gt;$line =~ s/\d{4}-(\d{2})-(\d{2}) (\d{2}:\d{2}:\d{2}).\d{9} (.*)/$months[$1] $2 $3 $hostname qmail: 0000000000.000000 $4/; print $line;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Edit the Awstats configuration &lt;span style="color: rgb(255, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;that placed or may have to create at &lt;/span&gt;/etc/awstats/awstats.mail.conf&lt;/span&gt; that called only short name "&lt;span style="color: rgb(255, 0, 0);"&gt;mail"&lt;/span&gt; later in awstats command.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;font-family:courier new;" &gt;[/etc/awstats/awstats.mail.conf]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="source-code"&gt;&lt;code&gt;LogFile=&amp;quot;/usr/local/bin/tai64nlocal &amp;lt; /var/log/awstats.qmail &amp;#124;\&lt;br /&gt;/var/www/htdocs/awstats/tools/qmail2awstats.pl &amp;#124; \&lt;br /&gt;/var/www/htdocs/awstats/tools/maillogconvert.pl standard &amp;#124; &amp;quot;&lt;br /&gt;&lt;br /&gt;SiteDomain=&amp;quot;mail.mydomain.com&amp;quot;&lt;br /&gt;HostAliases=&amp;quot;mail.mydomain.com&amp;quot;&lt;br /&gt;DirData=&amp;quot;/data/awstats&amp;quot;&lt;br /&gt;DirCgi=&amp;quot;/awstats&amp;quot;&lt;br /&gt;DirIcons=&amp;quot;/awstatsicons&amp;quot;&lt;br /&gt;AllowToUpdateStatsFromBrowser=0&lt;br /&gt;AllowFullYearView=2&lt;br /&gt;LogType=M&lt;br /&gt;LogFormat=&amp;quot;%time2 %email %email_r %host %host_r %method %url %code %bytesd&amp;quot;&lt;br /&gt;LevelForBrowsersDetection=0&lt;br /&gt;LevelForOSDetection=0&lt;br /&gt;LevelForRefererAnalyze=0&lt;br /&gt;LevelForRobotsDetection=0&lt;br /&gt;LevelForWormsDetection=0&lt;br /&gt;LevelForSearchEnginesDetection=0&lt;br /&gt;LevelForFileTypesDetection=0&lt;br /&gt;ShowMenu=1&lt;br /&gt;ShowSummary=HB&lt;br /&gt;ShowMonthStats=HB&lt;br /&gt;ShowDaysOfMonthStats=HB&lt;br /&gt;ShowDaysOfWeekStats=HB&lt;br /&gt;ShowHoursStats=HB&lt;br /&gt;ShowDomainsStats=0&lt;br /&gt;ShowHostsStats=HBL&lt;br /&gt;ShowAuthenticatedUsers=0&lt;br /&gt;ShowRobotsStats=0&lt;br /&gt;ShowEMailSenders=HBML&lt;br /&gt;ShowEMailReceivers=HBML&lt;br /&gt;ShowSessionsStats=0&lt;br /&gt;ShowPagesStats=0&lt;br /&gt;ShowFileTypesStats=0&lt;br /&gt;ShowFileSizesStats=0&lt;br /&gt;ShowBrowsersStats=0&lt;br /&gt;ShowOSStats=0&lt;br /&gt;ShowOriginStats=0&lt;br /&gt;ShowKeyphrasesStats=0&lt;br /&gt;ShowKeywordsStats=0&lt;br /&gt;ShowMiscStats=0&lt;br /&gt;ShowHTTPErrorsStats=0&lt;br /&gt;ShowSMTPErrorsStats=1&lt;br /&gt;&lt;br /&gt;Why the awstats configuration must be at /etc/awstats ? Here is the DOC:&lt;br /&gt;&lt;br /&gt;# AWSTATS CONFIGURE FILE 6.6&lt;br /&gt;#-----------------------------------------------------------------------------&lt;br /&gt;# Copy this file into awstats.www.mydomain.conf and edit this new config file&lt;br /&gt;# to setup AWStats (See documentation in docs/ directory).&lt;br /&gt;# The config file must be in /etc/awstats, /usr/local/etc/awstats or /etc (for&lt;br /&gt;# Unix/Linux) or same directory than awstats.pl (Windows, Mac, Unix/Linux...)&lt;br /&gt;# To include an environment variable in any parameter (AWStats will replace&lt;br /&gt;# it with its value when reading it), follow the example:&lt;br /&gt;# Parameter=&amp;quot;__ENVNAME__&amp;quot;&lt;br /&gt;# Note that environment variable AWSTATS_CURRENT_CONFIG is always defined with&lt;br /&gt;# the config value in an AWStats running session and can be used like others.&lt;br /&gt;#-----------------------------------------------------------------------------&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Create directory to save the log data&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:courier new;"&gt;# mkdir -p &lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;/data/awstats&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style=";font-family:georgia;font-size:100%;"  &gt;Add and change the cgi alias on apache, the configuration is :&lt;/span&gt;&lt;br /&gt;&lt;pre class="source-code"&gt;&lt;code&gt;ScriptAlias /cgi-bin/ &amp;quot;/var/www/cgi-bin/&amp;quot;&lt;br /&gt;&lt;br /&gt;&amp;lt;Directory &amp;quot;/var/www/cgi-bin&amp;quot;&amp;gt;&lt;br /&gt;  AllowOverride None&lt;br /&gt;  Options None&lt;br /&gt;  Order allow,deny&lt;br /&gt;  Allow from all&lt;br /&gt;&amp;lt;/Directory&amp;gt;&lt;br /&gt;&lt;br /&gt;Alias /awstatsclasses &amp;quot;/var/www/htdocs/awstats/wwwroot/classes/&amp;quot;&lt;br /&gt;Alias /awstatscss &amp;quot;/var/www/htdocs/awstats/wwwroot/css/&amp;quot;&lt;br /&gt;Alias /awstatsicons &amp;quot;/var/www/htdocs/awstats/wwwroot/icon/&amp;quot;&lt;br /&gt;ScriptAlias /awstats/ &amp;quot;/var/www/htdocs/awstats/wwwroot/cgi-bin/&amp;quot;&lt;br /&gt;&lt;br /&gt;&amp;lt;Directory &amp;quot;/var/www/htdocs/awstats/wwwroot&amp;quot;&amp;gt;&lt;br /&gt;  Options None&lt;br /&gt;  AllowOverride None&lt;br /&gt;  Order allow,deny&lt;br /&gt;  Allow from all&lt;br /&gt;&amp;lt;/Directory&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;Restart apache.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:times new roman;"&gt;Create and or add in crontab :&lt;/span&gt;&lt;br /&gt;&lt;pre class="source-code"&gt;&lt;code&gt;#Awstats mail statistics&lt;br /&gt;*/10 * * * * /var/www/htdocs/awstats/tools/getlog.sh&lt;br /&gt;*/15 * * * * /var/www/htdocs/awstats/wwwroot/cgi-bin/awstats.pl -update -config=mail &amp;gt; /dev/null&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:arial;"&gt;Run at your browser to access your mail statistics :&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;http://www.mydomain.com/awstats/awstats.pl?config=mail&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="font-weight: bold;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:100%;"&gt;Done.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_VOJCurLV8RI/RvHWNGIQ6fI/AAAAAAAAAA8/JGQSrf3wGbY/s1600-h/Qmail-Awstats-Screenshot.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_VOJCurLV8RI/RvHWNGIQ6fI/AAAAAAAAAA8/JGQSrf3wGbY/s400/Qmail-Awstats-Screenshot.jpg" alt="Awstats for Qmail" id="BLOGGER_PHOTO_ID_5112102572514142706" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060839567905571834-8452704059069543314?l=konang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konang.blogspot.com/feeds/8452704059069543314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2060839567905571834&amp;postID=8452704059069543314' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/8452704059069543314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/8452704059069543314'/><link rel='alternate' type='text/html' href='http://konang.blogspot.com/2007/09/configure-awstats-for-qmail-log.html' title='Configure Awstats for Qmail Log'/><author><name>Web Documentation</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_VOJCurLV8RI/RvHWNGIQ6fI/AAAAAAAAAA8/JGQSrf3wGbY/s72-c/Qmail-Awstats-Screenshot.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060839567905571834.post-7882647276477471171</id><published>2007-09-16T19:44:00.000-07:00</published><updated>2007-09-18T17:15:13.826-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Squid &amp; Dansguardian the proxy and web content filter</title><content type='html'>If you have huge network with huge users that can be categorized "the creative users" so make you unhappy with your bandwidth usage that in fact is for unproductive uses.&lt;br /&gt;&lt;br /&gt;You can choose this solution by combination of using Squid proxy (&lt;a href="http://www.squid-cache.org/"&gt;http://www.squid-cache.org/&lt;/a&gt;) and Dansguardian (&lt;a href="http://dansguardian.org/"&gt;http://dansguardian.org/&lt;/a&gt;) as a web content filtering. As my exeperience you can use of any Squid stable release. For Dansguardan I suggest you to use the old version reason by the speed performance. I use the version dansguardian-2.8.0.6.source.tar.gz and this is the best performance of Dansguardian.&lt;br /&gt;&lt;br /&gt;Here you will find the Dansguardian and Squid configuration. For example below the Dansguardian listen on port 3128 on IP address 10.80.123.202 and the Squid Proxy listen on port 33445 on the same IP.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(204, 0, 0);font-size:100%;" &gt;[ Dansguardian ]&lt;/span&gt;&lt;br /&gt;....&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:courier new;"&gt;# Network Settings&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# the IP that DansGuardian listens on.  If left blank DansGuardian will&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# listen on all IPs.  That would include all NICs, loopback, modem, etc.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# Normally you would have your firewall protecting this, but if you want&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# you can limit it to only 1 IP.  Yes only one.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# The Dansguardian IP address itself&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;filterip = 10.80.123.202&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# the port that DansGuardian listens to.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# Port-nya DansGuardian&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;filterport = 3128&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# the ip of the proxy (default is the loopback - i.e. this server)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;proxyip = 10.80.123.202&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# the port DansGuardian connects to proxy on&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# Port-nya SQUID&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;proxyport = 33445&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;....&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For default configuration you will get good filtering performance. But if you have own rule will be added please look at the Dansguardian config file at &lt;span style="font-weight: bold; color: rgb(0, 102, 0);font-family:courier new;" &gt;/etc/dansguardian&lt;/span&gt;. List of the file is below:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;bannedextensionlist&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;bannediplist&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;bannedmimetypelist&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;bannedphraselist&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;bannedregexpurllist&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;bannedsitelist&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;bannedsitelist.processed&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;bannedurllist&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;banneduserlist&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;blacklists/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;contentregexplist&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;dansguardian.conf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;dansguardianf1.conf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ep.allow&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ep.strict&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;exceptioniplist&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;exceptionphraselist&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;exceptionsitelist&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;exceptionurllist&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;exceptionuserlist&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;filtergroupslist&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;greysitelist&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;greyurllist&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;languages/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;logrotation*&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;phraselists/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;pics&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;transparent1x1.gif&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;weightedphraselist&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;EXAMPLE&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;font-family:courier new;" &gt;# Block friendster images on bannedregexpurllist&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;(^|[\?+=&amp;amp;/])(photos.*\.friendster\..*/.*)([\?+=&amp;amp;/]|$)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;font-family:courier new;" &gt;# Block site on bannedsitelist&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;www.kaskus.us&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;www.tigerhorn.com&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;photos.friendster.com&lt;/span&gt;&lt;br /&gt;... etc&lt;br /&gt;&lt;br /&gt;---------&lt;br /&gt;&lt;br /&gt;For Squid there is nothing special configuration. You may change your default squid port to unusual port used by. For example you can change to port 33445.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);font-family:courier new;" &gt;[Squid]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;....&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;http_port 33445&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;....&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060839567905571834-7882647276477471171?l=konang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konang.blogspot.com/feeds/7882647276477471171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2060839567905571834&amp;postID=7882647276477471171' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/7882647276477471171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/7882647276477471171'/><link rel='alternate' type='text/html' href='http://konang.blogspot.com/2007/09/squid-dansguardian-proxy-and-web.html' title='Squid &amp; Dansguardian the proxy and web content filter'/><author><name>Web Documentation</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060839567905571834.post-6498296698731747294</id><published>2007-09-13T20:46:00.000-07:00</published><updated>2007-10-08T21:07:43.157-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Mounting NTFS File System on Linux</title><content type='html'>How to mount your NTFS drive into your Linux Box? Find the steps below :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Download ntfs-3g from &lt;a href="http://www.ntfs-3g.org/"&gt;http://www.ntfs-3g.org/&lt;/a&gt;&lt;br /&gt;The NTFS-3G driver is an open source, freely available read/write NTFS driver for Linux, FreeBSD, Mac OS X, NetBSD, and Haiku. It provides safe and fast handling of the Windows XP, Windows Server 2003, Windows 2000 and Windows Vista file systems. Most POSIX file system operations are supported, with the exception of full file ownership and access right support.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Compile the source&lt;br /&gt;&lt;pre class="source-code"&gt;&lt;code&gt;# tar -zxvf ntfs-3g-1.913.tgz&lt;br /&gt;# cd ntfs-3g-1.913&lt;br /&gt;# ./configure&lt;br /&gt;# make&lt;br /&gt;# make check&lt;br /&gt;# make install&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;The program path is /usr/local/bin/&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Check your disk partition&lt;br /&gt;&lt;pre class="source-code"&gt;&lt;code&gt;[root@konang]# /sbin/fdisk -l&lt;br /&gt;Disk /dev/sda: 80.0 GB, 80000000000 bytes&lt;br /&gt;255 heads, 63 sectors/track, 9726 cylinders&lt;br /&gt;Units = cylinders of 16065 * 512 = 8225280 bytes&lt;br /&gt;&lt;br /&gt;Device Boot Start End Blocks Id System&lt;br /&gt;/dev/sda1 1 4 32098+ de Dell Utility&lt;br /&gt;/dev/sda2 * 5 3350 26876745 7 HPFS/NTFS&lt;br /&gt;/dev/sda3 3351 9725 51207187+ f W95 Ext'd (LBA)&lt;br /&gt;/dev/sda5 3351 8429 40797036 7 HPFS/NTFS&lt;br /&gt;/dev/sda6 8430 8462 265041 83 Linux&lt;br /&gt;/dev/sda7 8463 8593 1052226 82 Linux swap / Solaris&lt;br /&gt;/dev/sda8 8594 9725 9092758+ 83 Linux&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Create mount directory&lt;br /&gt;&lt;pre class="source-code"&gt;&lt;code&gt;# mkdir -p /mnt/windows-c&lt;br /&gt;# mkdir -p /mnt/windows-d&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Put into RC file &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;/etc/rc.d/rc.local&lt;/span&gt; (load automatically when reboot)&lt;br /&gt;&lt;pre class="source-code"&gt;&lt;code&gt;mount -t ntfs-3g /dev/sda2 /mnt/windows-c&lt;br /&gt;mount -t ntfs-3g /dev/sda5 /mnt/windows-d&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Test&lt;br /&gt;&lt;pre class="source-code"&gt;&lt;code&gt;# df&lt;br /&gt;[root@konang]# df&lt;br /&gt;Filesystem 1K-blocks Used Available Use% Mounted on&lt;br /&gt;/dev/sda8 8807924 7444172 909116 90% /&lt;br /&gt;/dev/sda6 256666 15646 227768 7% /boot&lt;br /&gt;tmpfs 233164 0 233164 0% /dev/shm&lt;br /&gt;/dev/sda1 32018 7322 24696 23% /mnt/flashdisk&lt;br /&gt;/dev/sda2 26876744 17725572 9151172 66% /mnt/windows-c&lt;br /&gt;/dev/sda5 40797032 16751732 24045300 42% /mnt/windows-d&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;/span&gt;List&lt;br /&gt;&lt;pre class="source-code"&gt;&lt;code&gt;# cd /mnt/windows-c&lt;br /&gt;# ls -asl /mnt/windows-c&lt;br /&gt;&lt;br /&gt;[root@konang]# ls -asl /mnt/windows-c&lt;br /&gt;total 773752&lt;br /&gt;12 drwxrwxrwx 1 root root 12288 Sep 13 19:02 .&lt;br /&gt;8 drwxr-xr-x 9 root root 4096 Aug 10 15:42 ..&lt;br /&gt;1 -rwxrwxrwx 1 root root 257 Aug 22 2006 adaaja.csv&lt;br /&gt;8 drwxrwxrwx 1 root root 8192 Mar 9 2007 Alfresco&lt;br /&gt;8 drwxrwxrwx 1 root root 8192 Jun 15 2006 apache&lt;br /&gt;0 drwxrwxrwx 1 root root 0 Feb 8 2006 apachefriends&lt;br /&gt;0 -rwxrwxrwx 1 root root 0 Aug 11 2004 AUTOEXEC.BAT&lt;br /&gt;1 -rwxrwxrwx 1 root root 211 Dec 12 2005 boot.ini&lt;br /&gt;0 -rwxrwxrwx 1 root root 0 Aug 11 2004 CONFIG.SYS&lt;br /&gt;8 drwxrwxrwx 1 root root 8192 Feb 7 2006 dell&lt;br /&gt;4 -rwxrwxrwx 1 root root 3696 Nov 19 2005 dell.sdr&lt;br /&gt;4 drwxrwxrwx 1 root root 4096 Aug 6 09:26 Documents and Settings&lt;br /&gt;4 drwxrwxrwx 1 root root 4096 Nov 19 2005 DRIVERS&lt;br /&gt;4 drwxrwxrwx 1 root root 4096 Jul 24 13:28 EasyEclipse-for-LAMP-1.2..&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:arial;"&gt;Done&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060839567905571834-6498296698731747294?l=konang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konang.blogspot.com/feeds/6498296698731747294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2060839567905571834&amp;postID=6498296698731747294' title='18 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/6498296698731747294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/6498296698731747294'/><link rel='alternate' type='text/html' href='http://konang.blogspot.com/2007/09/mounting-ntfs-file-system-on-linux.html' title='Mounting NTFS File System on Linux'/><author><name>Web Documentation</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>18</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060839567905571834.post-6719615343673475329</id><published>2007-09-09T23:33:00.000-07:00</published><updated>2007-09-10T00:21:16.664-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Squirrelmail with OpenLDAP Addressbook</title><content type='html'>How Squirrelmail access LDAP server addressbook? In this case you have OpenLDAP server but not an Active Directory !&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;First you must have OpenLDAP service installed on your Linux Box. You can get it free from &lt;a href="http://www.openldap.org/software/download/"&gt;http://www.openldap.org/software/download/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Your PHP must be compiled include LDAP component. You just add &lt;span style="font-weight: bold; color: rgb(0, 102, 0);font-family:courier new;" &gt;--with-ldap&lt;/span&gt; when compiling PHP from source.&lt;/li&gt;&lt;li&gt;Configure it and specify the OU schema and Addressbook schema in LDIF format.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Please find the steps below:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);"&gt;[/etc/openldap/slapd.conf]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;#### SECURITY SETTING ###&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;disallow bind_anon&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#######################################################################&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# BDB database definitions&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#######################################################################&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;database        bdb&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;suffix          "dc=mycompany,dc=com"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;rootdn          "dc=mycompany,dc=com"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;rootpw          {SSHA}UWPj+&amp;**%$^*(7987897*&amp;amp;%*^&amp;*^&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;directory       /var/openldap-data&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;index   objectClass     eq&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);"&gt;[Addressbook OU]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;dn: ou=addressbook,dc=mycompany,dc=com&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;objectClass: top&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;objectClass: organizationalUnit&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ou: addressbook&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;userPassword: {SHA}7lUIYUIYKJHKYIYtTkXU=&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 0, 0);"&gt;[Addressbook LDIF]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;dn: cn=My Name (myname@mycompany.com),ou=addressbook,dc=mycompany,dc=com&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;objectClass: top&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;objectClass: person&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;objectClass: organizationalPerson&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;objectClass: inetOrgPerson&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;cn: My Name (myname@mycompany.com)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;givenName: My Name&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sn: My Name&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mail: myname@mycompany.com&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;physicalDeliveryOfficeName: G.Kwarnas&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;postalAddress: G.Kwarnas&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;o: mycompany&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;l: - &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ou: addressbook&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;st: - &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;postalCode: 10110&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;telephoneNumber: 1696&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;facsimileTelephoneNumber: +62-21&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;pager: +62-21&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mobile: +62-21&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;homePhone: +62-21&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;How to load LDIF data into OpenLDAP server?&lt;br /&gt;From the Linux shell please type the following command (example the file is "addressbook-2.ldif.txt") :&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);font-size:85%;" &gt;&lt;span style="font-family:courier new;"&gt;shell# ldapadd -x -v -c -D "dc=mycompany,dc=com" -W &amp;lt; addressbook-2.ldif.txt &lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Now is the time to configure Squirrelmail config file. Please add the following script to link your webmail with OpenLDAP server:&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0); font-weight: bold;font-size:130%;" &gt;[Squirrelmail config.php]&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new;font-family:courier new;" &gt;&lt;span style="font-size:85%;"&gt;$ldap_server[0] = array(&lt;br /&gt;   'host' =&gt; '10.80.123.203',&lt;br /&gt;   'base' =&gt; 'ou=addressbook,dc=mycompany,dc=com',&lt;br /&gt;   'name' =&gt; 'LDAP: Addressbook Global',&lt;br /&gt;   'binddn' =&gt; 'ou=addressbook,dc=mycompany,dc=com',&lt;br /&gt;   'bindpw' =&gt; 'mycompany',&lt;br /&gt;   'filter' =&gt; '(objectclass=*)',&lt;br /&gt;   'protocol' =&gt; 3,&lt;br /&gt;   'limit_scope' =&gt; false,&lt;br /&gt;   'listing' =&gt; true,&lt;br /&gt;   'search_tree' =&gt; true,&lt;br /&gt;   'starttls' =&gt; false&lt;br /&gt;);&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-weight: bold;"&gt;Yes! Now your webmail connected with OpenLDAP addressbook.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060839567905571834-6719615343673475329?l=konang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konang.blogspot.com/feeds/6719615343673475329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2060839567905571834&amp;postID=6719615343673475329' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/6719615343673475329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/6719615343673475329'/><link rel='alternate' type='text/html' href='http://konang.blogspot.com/2007/09/squirrelmail-integrate-with-openldap.html' title='Squirrelmail with OpenLDAP Addressbook'/><author><name>Web Documentation</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060839567905571834.post-5052390364153976306</id><published>2007-09-06T20:10:00.000-07:00</published><updated>2007-09-06T20:31:19.695-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Building IM Server by Openfire 3.3.2 - Jabber</title><content type='html'>&lt;div id="ignite_bigpanel_content"&gt;&lt;p&gt;You want the IM server at your office ? Use the the &lt;a style="font-weight: bold;" href="http://www.igniterealtime.org/projects/openfire/index.jsp"&gt;Openfire&lt;/a&gt; IM server. This software is free and great. How to install this one ? Its very easy.&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Download source at: &lt;a href="http://www.igniterealtime.org/downloads/index.jsp"&gt;http://www.igniterealtime.org/downloads/index.jsp&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;tar -zxvf openfire_3_3_X.tar.gz&lt;/li&gt;&lt;li&gt;cd openfire_3_3_X/bin/&lt;/li&gt;&lt;li&gt;Run this server by command: openfire start&lt;br /&gt;If you want autostart please put this on /etc/rc.d/rc.local (For Linux platform) :&lt;br /&gt;For example : /data/ftp/mti/software/linux-app/openfire/bin/openfire start&lt;/li&gt;&lt;li&gt;Open web based admin management, example : http://10.80.123.203:9090/&lt;br /&gt;Login as : admin, Password: password&lt;br /&gt;Here you go for anything. Create user, configure port, service, user management and etc.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Please try to connect to Openfire server using Kopete or &lt;a href="http://wwwm.meebo.com/"&gt;Meebo&lt;/a&gt; (must be IP public, Jabber program, format: username@ip-public-your-open-fire-server)&lt;/li&gt;&lt;li&gt;Enjoy it !&lt;/li&gt;&lt;li&gt;You can install various plugins just only select them !&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Here is the text from official website of OpenFire :&lt;br /&gt;&lt;br /&gt;Openfire (formerly Wildfire) is a real time collaboration (RTC) server dual-licensed under      the Open Source GPL and &lt;a href="http://www.jivesoftware.com/products/im?source=Website-Ignite"&gt;commercially&lt;/a&gt;.                     It uses the only widely adopted open protocol for instant messaging, XMPP                     (also called Jabber). Openfire is incredibly easy to setup and administer, but offers                     rock-solid security and performance.&lt;br /&gt;&lt;br /&gt;&lt;div class="ignite_sidebar_body"&gt;      &lt;div class="ignite_sidebar_body_projstat"&gt;&lt;strong&gt;Latest Build&lt;/strong&gt; &lt;span&gt;3.3.2&lt;/span&gt;&lt;/div&gt;                                          &lt;div class="ignite_sidebar_body_projstat"&gt;&lt;strong&gt;Downloads&lt;/strong&gt; &lt;span&gt;890,847&lt;/span&gt;&lt;/div&gt;                                                               &lt;div class="ignite_sidebar_body_projstat"&gt;&lt;strong&gt;License&lt;/strong&gt; &lt;span&gt;Open Source GPL or Commercial&lt;/span&gt;&lt;/div&gt;                                                               &lt;div class="ignite_sidebar_body_projstat ignite_sidebar_body_projstat_last"&gt;&lt;strong&gt;Platforms&lt;/strong&gt; &lt;span&gt;Windows, Linux,&lt;br /&gt;Unix, Mac OS X&lt;/span&gt;&lt;/div&gt;                          &lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060839567905571834-5052390364153976306?l=konang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konang.blogspot.com/feeds/5052390364153976306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2060839567905571834&amp;postID=5052390364153976306' title='30 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/5052390364153976306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/5052390364153976306'/><link rel='alternate' type='text/html' href='http://konang.blogspot.com/2007/09/building-im-server-by-openfire-332.html' title='Building IM Server by Openfire 3.3.2 - Jabber'/><author><name>Web Documentation</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>30</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060839567905571834.post-4535691595066896258</id><published>2007-09-04T23:19:00.000-07:00</published><updated>2007-09-24T18:21:01.220-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Force wallpaper &amp; screen saver by Windows Active Directory</title><content type='html'>&lt;span style="font-family:courier new;"&gt;How to force wallpaper &amp;amp; screen saver by Windows Active Directory ?&lt;/span&gt;&lt;br /&gt;&lt;ol style="font-family: courier new; font-weight: bold; color: rgb(51, 51, 255);"&gt;&lt;li&gt;Menu Start&lt;/li&gt;&lt;li&gt;Programs&lt;/li&gt;&lt;li&gt;Administrative Tools&lt;/li&gt;&lt;li&gt;Active Directory Users &amp;amp; Computers&lt;/li&gt;&lt;li&gt;Right click -&gt; your local domain (example mynetwork.com)&lt;/li&gt;&lt;li&gt;Properties&lt;/li&gt;&lt;li&gt;Choose control tab "Group Policy"&lt;/li&gt;&lt;li&gt;Double click "Default Domain Policy"&lt;/li&gt;&lt;li&gt;You will get window of "Group Policy" and there is 2 main items on root tree, "Computer Configuration" and "User Configuration".&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Choose the "User Configuration".&lt;/li&gt;&lt;li&gt;You will get on tree : "Software Settings", "Windows Settings" and "Administrative Templates"&lt;/li&gt;&lt;li&gt;Choose "Administrative Templates" tree.&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;Next ...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 102, 0);font-family:courier new;" &gt;[Force Wallpaper]&lt;/span&gt;&lt;br /&gt;&lt;ol  style="font-weight: bold; color: rgb(0, 102, 0);font-family:courier new;"&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;In the &lt;/span&gt;Administrative Templates, &lt;span style="font-size:100%;"&gt;Click Desktop&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Click "Active Desktop"&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Please enable :&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;        - Enable Active Desktop      -&gt; enabled&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;        - Prohibit Changes           -&gt; enabled&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;        - Active Desktop Wallpaper   -&gt; enabled&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;                * Type your wallpaper path file :&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;                    * Example : \\10.20.2.2\wallscr\er_wall.jpg&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;                * Choose wallpaper style : strech&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Next ...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(102, 51, 0);font-family:courier new;" &gt;[Force Screensaver]&lt;/span&gt;&lt;br /&gt;&lt;ol style="font-weight: bold; font-family: courier new; color: rgb(102, 51, 0);"&gt;&lt;li&gt;In the Administrative Templates Click Control Panel&lt;/li&gt;&lt;li&gt;Click Display&lt;/li&gt;&lt;li&gt;        - Prevent changing wallpaper        -&gt; enabled&lt;/li&gt;&lt;li&gt;        - Screen Saver                      -&gt; enabled&lt;/li&gt;&lt;li&gt;        - Screen saver executable name      -&gt; enabled&lt;/li&gt;&lt;li&gt;                * Type your screensaver path file :&lt;/li&gt;&lt;li&gt;                * Example: \\10.20.2.2\wallscr\er_scr.scr&lt;/li&gt;&lt;li&gt;        - Screen saver time out             -&gt; enabled&lt;/li&gt;&lt;li&gt;                * Set time out (in second)&lt;/li&gt;&lt;li&gt;Please user to logout and login again (2 times)&lt;/li&gt;&lt;li&gt;Finish&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060839567905571834-4535691595066896258?l=konang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konang.blogspot.com/feeds/4535691595066896258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2060839567905571834&amp;postID=4535691595066896258' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/4535691595066896258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/4535691595066896258'/><link rel='alternate' type='text/html' href='http://konang.blogspot.com/2007/09/force-wallpaper-screen-saver-by-windows.html' title='Force wallpaper &amp; screen saver by Windows Active Directory'/><author><name>Web Documentation</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060839567905571834.post-8382028762535092602</id><published>2007-09-03T18:43:00.000-07:00</published><updated>2007-09-04T01:43:53.510-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>SSH Tunneling</title><content type='html'>You have a trouble when you got your localhost (your computer) has no route to XWindows public server (linux, unix base). Your computer only has route to one of computer in the network which has route to public server that you want.&lt;br /&gt;Somebody that ever install Oracle via remote connection will find this problem.&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;Your local computer is "localhost"&lt;br /&gt;Your server #1 is private IP "10.80.123.203"&lt;br /&gt;Your server #2 is public IP "203.13x.xxx.xx"&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(102, 51, 102);font-family:courier new;" &gt;Localhost ----- Server #1 ------- Server #2&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(102, 51, 102);font-family:courier new;" &gt;     |______ XWindows Application _______|&lt;br /&gt;|___________ No Route ______________|&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;How to get connection via SSH so you can remote your public server include the XWindows application ?&lt;br /&gt;&lt;br /&gt;Here are the steps must be done :&lt;br /&gt;&lt;br /&gt;SSH tunneling from 10.80.123.203 to public IP 202.13x.xxx.xx&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;# ssh konang@10.80.123.203 -p 2350&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;# ssh -L 2211:127.0.0.1:2350 konang@203.13x.xxx.xx -p 2350&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;SSH tunneling from localhost to 10.80.123.203&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;# ssh -L 2211:127.0.0.1:2211 konang@10.80.123.203 -p 2350&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;SSH to 203.13x.xxx.xx via tunnel + forward X&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;# ssh -X konang@localhost -p 2211&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For example on X environment :&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-family:courier new;" &gt;# xclock &amp;amp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You will get "xclock" program from remote 203.13x.xxx.xx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060839567905571834-8382028762535092602?l=konang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konang.blogspot.com/feeds/8382028762535092602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2060839567905571834&amp;postID=8382028762535092602' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/8382028762535092602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/8382028762535092602'/><link rel='alternate' type='text/html' href='http://konang.blogspot.com/2007/09/ssh-tunneling.html' title='SSH Tunneling'/><author><name>Web Documentation</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060839567905571834.post-6898024703873486360</id><published>2007-09-02T18:42:00.000-07:00</published><updated>2008-12-11T07:16:48.690-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Custom Microsoft Windows Taskbar Date</title><content type='html'>I remember when I use this method first time to custom Microsoft Windows 98 Taskbar. This method can be apply too on Windows NT, Windows 2000, Windows XP and Windows 2003. For Windows Vista I am sure this no problem even not tested before. Here is the steps and I hope you are enjoyed.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Click Control Panel.&lt;/li&gt;&lt;li&gt;Double click "Regional and Language Options".&lt;/li&gt;&lt;li&gt;Select (default) "Regional Options" tab.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Click "Customize" next of the Country Language select menu.&lt;/li&gt;&lt;li&gt;Select "Time" tab.&lt;/li&gt;&lt;li&gt;Go to "Time Format".&lt;/li&gt;&lt;li&gt;Default value is : &lt;span style="font-weight: bold;"&gt;hh:mm&lt;/span&gt; change to : &lt;span style="font-weight: bold;"&gt;'MYNAME' HH:mm&lt;/span&gt; (Note! in the singe quote, 24 hour system), for 12 hour system remove one of "&lt;span style="font-weight: bold;"&gt;H&lt;/span&gt;" letter so became &lt;span style="font-weight: bold;"&gt;'MYNAME' H:mm&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Click Apply --&gt; OK --&gt; Apply ... so then you got new taskbar date !&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_VOJCurLV8RI/Rtyzs7lae-I/AAAAAAAAAA0/NjSN8g1npJU/s1600-h/taskbar.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_VOJCurLV8RI/Rtyzs7lae-I/AAAAAAAAAA0/NjSN8g1npJU/s400/taskbar.gif" alt="" id="BLOGGER_PHOTO_ID_5106153662021532642" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_VOJCurLV8RI/Rttpjrlae8I/AAAAAAAAAAk/XXRijaYy4sM/s1600-h/taskbar.gif"&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;Don't forget to Click Apply / OK, and then you got back to previous window and click Apply and OK to effect the taskbar date. Sorry for uncomplete steps on image above.&lt;/span&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060839567905571834-6898024703873486360?l=konang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konang.blogspot.com/feeds/6898024703873486360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2060839567905571834&amp;postID=6898024703873486360' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/6898024703873486360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/6898024703873486360'/><link rel='alternate' type='text/html' href='http://konang.blogspot.com/2007/09/custom-microsoft-windows-taskbar.html' title='Custom Microsoft Windows Taskbar Date'/><author><name>Web Documentation</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_VOJCurLV8RI/Rtyzs7lae-I/AAAAAAAAAA0/NjSN8g1npJU/s72-c/taskbar.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060839567905571834.post-5663400373560653590</id><published>2007-08-30T19:19:00.001-07:00</published><updated>2007-08-30T19:37:27.783-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>When Oracle Going Down</title><content type='html'>So what? when you at the night found your Oracle was dead. Trying start Oracle but occuring the error messages:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Thu Aug 30 21:43:16 2007&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Errors in file /data/oracle/home/admin/pep/bdump/pep_arc0_31074.trc:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ORA-16014: log 1 sequence# 56 not archived, no available destinations&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ORA-00312: online log 1 thread 1: '/data/oracle/data/pep/redo01.log'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;Thu Aug 30 21:44:16 2007&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ARC1: Archiving not possible: No primary destinations&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ARC1: Failed to archive thread 1 sequence 56 (4)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;Thu Aug 30 21:48:17 2007&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Errors in file /data/oracle/home/admin/pep/bdump/pep_arc1_31076.trc:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ORA-19815: WARNING: db_recovery_file_dest_size of 2147483648 bytes is 100.00% used, and has 0 remaining bytes available.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;Thu Aug 30 21:48:17 2007&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;************************************************************************&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;You have following choices to free up space from flash recovery area:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;1. Consider changing RMAN RETENTION POLICY. If you are using Data Guard,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   then consider changing RMAN ARCHIVELOG DELETION POLICY.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;2. Back up files to tertiary device such as tape using RMAN&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   BACKUP RECOVERY AREA command.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;3. Add disk space and increase db_recovery_file_dest_size parameter to&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   reflect the new space.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;4. Delete unnecessary files using RMAN DELETE command. If an operating&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   system command was used to delete files, then use RMAN CROSSCHECK and&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   DELETE EXPIRED commands.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;************************************************************************&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Thu Aug 30 21:48:17 2007&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Errors in file /data/oracle/home/admin/pep/bdump/pep_arc1_31076.trc:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ORA-19809: limit exceeded for recovery files&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ORA-19804: cannot reclaim 48500736 bytes disk space from 2147483648 limit&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;ARC1: Error 19809 Creating archive log file to '/data/oracle/home/flash_recovery_area/PEP/archivelog/2007_08_30/o1_mf_1_56_1_.arc'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;ARC1: Failed to archive thread 1 sequence 56 (19809)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;ARCH: Archival stopped, error occurred. Will continue retrying&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;DONT WORRY&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;You just make Oracle can be startup and then rebuild your configuration by RESIZE your Archive Log file. The steps are :&lt;br /&gt;&lt;br /&gt;&lt;strong  style="font-family:courier new;"&gt;[oracle@black]# sqlplus /nolog&lt;/strong&gt;&lt;br /&gt;&lt;strong  style="font-family:courier new;"&gt;SQL&gt; conn / as sysdba&lt;/strong&gt;&lt;br /&gt;&lt;strong  style="font-family:courier new;"&gt;SQL&gt; shutdown abort&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ORACLE instance shut down.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong face="courier new"&gt;SQL&gt; startup &lt;span style="color: rgb(255, 0, 0);"&gt;nomount&lt;/span&gt; pfile="/data/oracle/home/admin/pep/pfile/init.ora.618200774625"&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ORACLE instance started.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Total System Global Area 1002438656 bytes&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Fixed Size                  1223080 bytes&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Variable Size             247465560 bytes&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Database Buffers          746586112 bytes&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Redo Buffers                7163904 bytes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong face="courier new"&gt;SQL&gt; alter database &lt;span style="color: rgb(255, 0, 0);"&gt;mount&lt;/span&gt;;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Database altered.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong face="courier new"&gt;SQL&gt; alter database &lt;span style="color: rgb(255, 0, 0);"&gt;open&lt;/span&gt;;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Database altered.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong style="font-family: courier new;"&gt;SQL&gt; select * from tab;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Browse : &lt;a href="http://10.80.123.252:1158/em/" target="_blank" title="This external link will open in a new window"&gt;http://your.oracle.web:1158/em/&lt;br /&gt;&lt;/a&gt;Please resize your Archive log file and or the other configuraions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060839567905571834-5663400373560653590?l=konang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konang.blogspot.com/feeds/5663400373560653590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2060839567905571834&amp;postID=5663400373560653590' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/5663400373560653590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/5663400373560653590'/><link rel='alternate' type='text/html' href='http://konang.blogspot.com/2007/08/when-oracle-going-down.html' title='When Oracle Going Down'/><author><name>Web Documentation</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060839567905571834.post-1592875790398319866</id><published>2007-08-23T19:18:00.000-07:00</published><updated>2007-08-23T19:41:38.283-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FreeBSD'/><category scheme='http://www.blogger.com/atom/ns#' term='Postfix'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Mail Gateway - ClamAV &amp; Spamassassin</title><content type='html'>&lt;span style="font-weight: bold;font-family:arial;" &gt;Description&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:arial;"&gt;This system is already test and can receive mail traffic as mail gateway:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:arial;"&gt;200,000 mails/day  for FreeBSD Box, default kernel&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:arial;"&gt;125,000 mails/day  for Linux Box&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:arial;"&gt;, default kernel&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;Services&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Service    Postfix 2.3.4&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;ClamAV 0.88.6&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Amavisd-New 2.4.4&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Spamassassin 3.1.7&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;Download&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;a href="http://www.postfix.org/download.html"&gt;http://www.postfix.org/download.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.clamav.net/"&gt;http://www.clamav.net/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.ijs.si/software/amavisd/"&gt;http://www.ijs.si/software/amavisd/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.spamassassin.org/"&gt;http://www.spamassassin.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;Dependencies&lt;/span&gt;&lt;br /&gt;CPAN – Perl Module&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;# cpan&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;cpan&gt; install Archive::Tar Archive::Zip Compress::Zlib Convert::TNEF Convert::UUlib MIME::Base64 MIME::Parser Mail::Internet Net::Server Net::SMTP Digest::MD5 IO::Stringy Time::HiRes Unix::Syslog HTML::Parser&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;cpan&gt; install MD5 LWP Mail::Internet Archive::Tar Archive::Zip IO::Wrap IO::Stringy Unix::Syslog MIME::Words MIME::Head MIME::Body MIME::Entity MIME::Parser Net::SMTP Net::DNS Net::Ping Net::Server Net::Server::PreForkSimple Convert::TNEF Convert::UUlib MIME::Decoder::Base64 MIME::Decoder::Binary MIME::Decoder::Gzip64 MIME::Decoder::NBit MIME::Decoder::QuotedPrint MIME::Decoder::UU Time::HiRes Digest::SHA1 Digest::Nilsimsa Getopt::Long File::Copy Bit::Vector Date::Calc&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;cpan&gt; install IO::Socket IO::Socket::INET IO::Socket::UNIX&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;cpan&gt; install Net::SMTP Net::Cmd Net::SMTP Net::Server Net::Server::PreForkSimple&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;cpan&gt; install DB_File Unix::Syslog File::Tail Archive::Rar Archive::TarGzip Archive::Any &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;cpan&gt; install Net::DNS Mail::SPF::Query IP::Country Net::Ident IO::Socket::INET6 IO::Socket::SSL&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;cpan&gt; install Inline::C Mail::ClamAV Mail::SpamAssassin DBI Net::LDAP Authen::SASL SAVI Convert::UUlib Compress::Zlib&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Configure&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;groupadd postdrop&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;useradd postfix -s /bin/false&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;groupadd clamav&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;useradd clamav -g clamav -s /bin/false&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mkdir /home/clamav&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mkdir -p /home/clamav/amavis&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mkdir -p /home/clamav/virusmails&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mkdir -p /home/clamav/db&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mkdir -p /home/clamav/var&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mkdir -p /home/clamav/tmp&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mkdir -p /home/clamav/virusdb&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;chmod 750 /home/clamav/amavis&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;chown -R clamav.clamav /home/clamav&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;touch /var/log/clamd.log&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;touch /var/log/freshclam.log&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;touch /var/log/clam-update.log&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;chown clamav.clamav /var/log/clamd.log&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;chown clamav.clamav /var/log/freshclam.log&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;chown clamav.clamav /var/log/clam-update.log&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Postfix&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;# tar –zxvf postfix-2.3.4.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# make&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# make install&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ClamAV&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;# tar –zxvf clamav-0.88.6.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# ./configure --sysconfdir=/usr/local/etc --with-dbdir=/home/clamav/virusdb --libdir=/usr --includedir=/usr&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# make&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# make check&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# make install&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Amavisd-New&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;# tar -zxvf amavisd-new-2.x.x.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# cd amavisd-new-2.x.x&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# cp amavisd /usr/local/sbin/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# chown root /usr/local/sbin/amavisd&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# chmod 755  /usr/local/sbin/amavisd&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Spamassassin&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;# tar –zxvf Mail-SpamAssassin-3.1.7.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# ./configure&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# make&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# make install&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Exec Path&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;/usr/local/sbin/amavisd&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/usr/local/bin/freshclam -d -c 10 --datadir=/home/clamav/virusdb&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/usr/local/sbin/clamd/usr/sbin/postfix start&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;Config File&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;/etc/clamd.conf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;---------------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;AlgorithmicDetection yes&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ArchiveLimitMemoryUsage yes&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ArchiveMaxCompressionRatio 300&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ArchiveMaxFileSize 15M&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ArchiveMaxFiles 1500&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ArchiveMaxRecursion 10&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;DatabaseDirectory /home/clamav/virusdb&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;LeaveTemporaryFiles yes&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;LogClean yes&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;LogFile /var/log/clamd.log&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;LogFileMaxSize 1000M&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;LogTime yes&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;PidFile /home/clamav/var/clamd.pid&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ScanArchive yes&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ScanHTML yes&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ScanMail yes&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;TCPAddr 127.0.0.1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;TCPSocket 3310&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;TemporaryDirectory /var/tmp&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;User clamav&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;/etc/amavisd.conf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-----------------&lt;/span&gt;&lt;br /&gt;KEY POINT:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;$max_servers = 3;            # number of pre-forked children (2..15 is common)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$max_requests  = 10;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$child_timeout=5*60;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$daemon_user  = 'clamav';     # (no default;  customary: vscan or amavis)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$daemon_group = 'clamav';     # (no default;  customary: vscan or amavis)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$mydomain = 'mydomain.com';   # a convenient default for other settings&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$MYHOME   = '/home/clamav';   # a convenient default for other settings&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$TEMPBASE = "$MYHOME/tmp";   # working directory, needs to be created manually&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$ENV{TMPDIR} = $TEMPBASE;    # environment variable TMPDIR&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$QUARANTINEDIR = "$MYHOME/virusmails";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# $daemon_chroot_dir = $MYHOME;   # chroot directory or undef&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$db_home   = "$MYHOME/db";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$helpers_home = "$MYHOME/var";  # prefer $MYHOME clean and owned by root?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$pid_file  = "$MYHOME/var/amavisd.pid";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$lock_file = "$MYHOME/var/amavisd.lock";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#NOTE: create directories $MYHOME/tmp, $MYHOME/var, $MYHOME/db manually&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;@local_domains_maps = ( [".$mydomain"] );&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;@mynetworks = qw( 127.0.0.0/8 ::1 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 );&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$log_level = 0;              # verbosity 0..5&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$log_recip_templ = undef;    # disable by-recipient level-0 log entries&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$DO_SYSLOG = 1;              # log via syslogd (preferred)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$SYSLOG_LEVEL = 'mail.debug';&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#$enable_db = 1;              # enable use of BerkeleyDB/libdb (SNMP and nanny)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#$enable_global_cache = 1;    # enable use of libdb-based cache if $enable_db=1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$inet_socket_port = 10024;   # listen on this local TCP port(s) (see $protocol)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$inet_socket_bind = '127.0.0.1';&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;@inet_acl = qw( 127.0.0.1 );&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#$unix_socketname = "$MYHOME/amavisd.sock";  # when using sendmail milter&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$sa_tag_level_deflt  = -6.0;  # add spam info headers if at, or above that level&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$sa_tag2_level_deflt = 6.0; # add 'spam detected' headers at that level&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$sa_kill_level_deflt = 6.0; # triggers spam evasive actions&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$sa_dsn_cutoff_level = 10;   # spam level beyond which a DSN is not sent&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$sa_mail_body_size_limit = 200*1024; # don't waste time on SA if mail is larger&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$sa_local_tests_only = 0;    # only tests which do not require internet access?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$sa_auto_whitelist = 1;      # turn on AWL in SA 2.63 or older (irrelevant&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$sa_spam_subject_tag = '***SPAM*** ';&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$defang_virus  = 1;  # MIME-wrap passed infected mail&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$defang_banned = 1;  # MIME-wrap passed mail containing banned name&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# for defanging bad headers only turn on certain minor contents categories:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$defang_by_ccat{+CC_BADH.",3"} = 1;  # NUL or CR character in header&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$defang_by_ccat{+CC_BADH.",5"} = 1;  # header line longer than 998 characters&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$defang_by_ccat{+CC_BADH.",6"} = 1;  # header field syntax error&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# OTHER MORE COMMON SETTINGS (defaults may suffice):&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#$myhostname = 'mydomain.com';  # must be a fully-qualified domain name!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$notify_method  = 'smtp:[127.0.0.1]:10025';&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$forward_method = 'smtp:[10.1.1.1]:25';  # Destination Mailserver&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$final_virus_destiny      = D_DISCARD;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$final_banned_destiny     = D_BOUNCE;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$final_spam_destiny       = D_PASS;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$final_bad_header_destiny = D_PASS;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;# ### http://www.clamav.net/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; ['ClamAV-clamd',&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   \&amp;ask_daemon, ["CONTSCAN {}\n", "127.0.0.1:3310"],&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   qr/\bOK$/, qr/\bFOUND$/,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;/etc/freshclam.conf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Checks 24&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;DatabaseDirectory /home/clamav/virusdb&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;DatabaseMirror database.clamav.net&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;PidFile /home/clamav/var/freshclam.pid&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;UpdateLogFile /var/log/freshclam.log&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;/etc/mail/spamassassin/local.cf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;--------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;add_header      all Checker-Version SpamAssassin _VERSION_ (_SUBVERSION_) on _HOSTNAME_&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;add_header      all Status _YESNO_, score=_SCORE_ required=_REQD_ tests=_TESTS_ autolearn=_AUTOLEARN_ version=_VERSION_&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;auto_learn      1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;bayes_path      /home/clamav/amavis/.spamassassin/bayes&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;dns_available   yes&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;report_safe     0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;required_hits   6.0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;rewrite_subject 1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;skip_rbl_checks 1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;subject_tag     *** Spam ***&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;use_bayes       1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;/etc/postfix/main.cf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;--------------------&lt;/span&gt;&lt;br /&gt;KEY POINT:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;header_checks = regexp:/etc/postfix/header_checks&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;relay_domains = hash:/etc/postfix/relay_domains&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;smtpd_client_restrictions = hash:/etc/postfix/access&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;smtpd_delay_reject=no&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;smtpd_helo_restrictions = hash:/etc/postfix/access&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;relay_domains = hash:/etc/postfix/relay_domains&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;smtpd_recipient_restrictions =&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        #permit_mynetworks,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        #reject_non_fqdn_sender,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        #reject_non_fqdn_recipient,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        #reject_unknown_sender_domain,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        #reject_unknown_recipient_domain,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        reject_unauth_destination,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        reject_rbl_client list.dsbl.org,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        permit&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;/etc/postfix/master.cf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;----------------------&lt;/span&gt;&lt;br /&gt;KEY POINT:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;smtp      inet  n       -       n       -       -       smtpd&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  -o content_filter=smtp-amavis:[127.0.0.1]:10024&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;smtp-amavis unix      -      -      n      -      3      lmtp&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  -o smtp_data_done_timeout=1200&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  -o disable_dns_lookups=yes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;127.0.0.1:10025 inet n  -       n     -       -  smtpd&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    -o content_filter=&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    -o local_recipient_maps=&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    -o relay_recipient_maps=&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    -o smtpd_restriction_classes=&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    -o smtpd_client_restrictions=&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    -o smtpd_helo_restrictions=&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    -o smtpd_sender_restrictions=&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    -o smtpd_recipient_restrictions=permit_mynetworks,reject&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    -o mynetworks=127.0.0.0/8&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    -o strict_rfc821_envelopes=yes&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;/etc/postfix/access&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;194.67.23.20    REJECT -- MAIL BOMBING --&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;84.58.99.89     REJECT -- MAIL BOMBING --&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;/etc/postfix/relay_domains&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;--------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;mydomain.com        RELAY&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;/etc/postfix/header_checks&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;--------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;/^(.*)name\=\"(.*)\.(hta|com|pif|vbs|vbe|js|jse|bat|cmd|vxd|scr|shm|hlp|spl|swf)\"$/    DISCARD ---- File attachment yang akan anda kirim ditolak untuk alasan keamanan - Your attachment file(s) rejected for security reason ----&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;/etc/postfix/body_checks&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;/^(.*)V I R U S  A L E R T/             DISCARD virus&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/^(.*)VIRUS NOTIFICATION/               DISCARD virus&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/^(.*)Virus Warning Message/            DISCARD virus&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Data&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;/usr/spool/postfix/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/home/clamav/virusdb&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/home/clamav/virusmails&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Startup&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;/usr/local/sbin/amavisd&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/usr/local/bin/freshclam -d -c 10 --datadir=/home/clamav/virusdb&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/usr/local/sbin/clamd/usr/sbin/postfix start&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Crontab   &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;# crontab –l&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;####CLAMD####&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;0 0 * * * /bin/rm -rf /var/tmp/clamav-*&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;0 0 * * * /bin/rm /home/clamav/virusmails/*&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;0 0 * * * /bin/rm -r /home/clamav/tmp/amavis-*&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Top Command&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Bash# postfix start|stop|restart&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Bash# tail –f /var/log/maillog&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Bash# telnet localhost 10024 | 3310 | 25&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060839567905571834-1592875790398319866?l=konang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konang.blogspot.com/feeds/1592875790398319866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2060839567905571834&amp;postID=1592875790398319866' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/1592875790398319866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/1592875790398319866'/><link rel='alternate' type='text/html' href='http://konang.blogspot.com/2007/08/mail-gateway-clamav-spamassassin.html' title='Mail Gateway - ClamAV &amp; Spamassassin'/><author><name>Web Documentation</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060839567905571834.post-4702835118239045852</id><published>2007-08-21T20:30:00.000-07:00</published><updated>2007-10-05T09:52:14.760-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='CMS'/><title type='text'>Create Drupal Module</title><content type='html'>&lt;span style=";font-family:arial;font-size:100%;"  &gt;Drupal I think is the best CMS to develop a custom applications. Drupal's engine gives you more than you expected. The API and library will reduce your time to develop applications and gears up your business. This below is example to building modules on drupal engine.&lt;br /&gt;&lt;br /&gt;Drupal modules at least need 3 files :&lt;br /&gt;&lt;/span&gt;&lt;ul  style="font-family:arial;"&gt;&lt;li  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;yourmodule.info&lt;/span&gt;&lt;br /&gt;Contains module descriptions&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;yourmodule.install&lt;/span&gt;&lt;br /&gt;Contains module database structure (depend on you need database or not)&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;yourmodule.module&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;The core of your program. Functions and algorithm write down here.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;For example your PATH for drupal is :&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;/usr/local/apache/htdocs/drupal&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In this case, your module name is 'phonedir', so ...your own modules should be :&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;/usr/local/apache/htdocs/drupal/sites/all/modules/phonedir&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;All of your module's files must be prefix 'phonedir'.&lt;br /&gt;&lt;br /&gt;Your drupal configuration file must be placed at:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;/usr/local/apache/htdocs/drupal/sites/default/settings.php&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Please edit settings.php to add MySQL connection to the another database:&lt;br /&gt;&lt;br /&gt;Origin:&lt;br /&gt;&lt;pre class="source-code"&gt;&lt;code&gt;$db_url = 'mysql://drupal:passwd_drupal_db@localhost/drupal';&lt;br /&gt;$db_prefix = '';&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;To :&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="source-code"&gt;&lt;code&gt;## Drupal's db&lt;br /&gt;$db_url['default'] = 'mysql://drupal:passwd_drupal_db@localhost/drupal';&lt;br /&gt;&lt;br /&gt;## phonedir's db&lt;br /&gt;$db_url['phonedir'] = 'mysql://phonedir:kunamjaya@localhost/phonedir';&lt;br /&gt;$db_prefix = '';&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="source-code"&gt;&lt;code&gt;--------------------------------------------&lt;br /&gt;Run the shell scripts:&lt;br /&gt;============================&lt;br /&gt;# mkdir -p /usr/local/apache/htdocs/drupal/sites/all/modules/phonedir&lt;br /&gt;# cd /usr/local/apache/htdocs/drupal/sites/all/modules/phonedir&lt;br /&gt;Create files : phonedir.info, phonedir.install, phonedir.module, phonedir.mysql&lt;br /&gt;# touch phonedir.info&lt;br /&gt;# touch phonedir.install&lt;br /&gt;# touch phonedir.module&lt;br /&gt;# touch phonedir.mysql&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;span style="font-size:85%;"&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;span style="font-weight: bold;"&gt;phonedir.info&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="source-code"&gt;&lt;code&gt;; $Id$&lt;br /&gt;name = Phonedir &lt;br /&gt;description = Phone Directory&lt;br /&gt;package = PEP&lt;br /&gt;project = &amp;quot;drupal&amp;quot;&lt;br /&gt;version = &amp;quot;5.x-1.0&amp;quot;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;phonedir.install&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="source-code"&gt;&lt;code&gt;&amp;lt;?&lt;br /&gt;// $Id: phonedir.install,v MDGTI PEP 2007/08/01 13:44:08 drumm Exp $&lt;br /&gt;&lt;br /&gt;##########################################&lt;br /&gt;# Konang Supian #&lt;br /&gt;# konangsupian@gmail.com #&lt;br /&gt;# 02 Agustus 2007 #&lt;br /&gt;##########################################&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;  Jalankan perintah shell sbb: &lt;br /&gt;  ============================&lt;br /&gt;  mysql -u root -p -e &amp;quot;create database phonedir&amp;quot;&lt;br /&gt;  mysql -u root -p phonedir &amp;lt; phonedir.mysql&lt;br /&gt;  echo &amp;quot;\$db_url['phonedir'] = 'mysql://phonedir:kunamjaya@localhost/phonedir';&amp;quot; &amp;gt;&amp;gt; ../../../default/settings.php&lt;br /&gt;&lt;br /&gt;*/&lt;br /&gt;###################################################&lt;br /&gt;/*&lt;br /&gt;&lt;br /&gt;Tambahkan baris berikut (silakan disesuaikan dengan login password MySQL) di file :&lt;br /&gt;/path/to/drupal/sites/default/settings.php&lt;br /&gt;&lt;br /&gt;$db_url['default']  = 'mysql://drupal:kunamjaya@localhost/drupal';&lt;br /&gt;$db_url['helpdesk'] = 'mysql://helpdesk:kunamjaya@localhost/helpdesk';&lt;br /&gt;$db_url['phonedir'] = 'mysql://phonedir:kunamjaya@localhost/phonedir';&lt;br /&gt;&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;function phonedir_install() {&lt;br /&gt;  switch ($GLOBALS['db_type']) {&lt;br /&gt;    case 'mysql':&lt;br /&gt;    case 'mysqli':&lt;br /&gt;      //db_query(&amp;quot;&amp;quot;);&lt;br /&gt;      break;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function phonedir_uninstall() {&lt;br /&gt;  db_query('DROP TABLE {belomperlu}');&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;phonedir.mysql&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="source-code"&gt;&lt;code&gt;/*&lt;br /&gt;Akses command dibawah ini untuk create database dan grant bila belum ada:&lt;br /&gt;#########################################################################&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;use mysql;&lt;br /&gt;CREATE DATABASE phonedir;&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;GRANT USAGE ON phonedir.* TO phonedir@localhost;&lt;br /&gt;GRANT ALL ON phonedir.* to phonedir@localhost identified by 'kunamjaya';&lt;br /&gt;flush privileges;&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;##########################################################################&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;USE phonedir;&lt;br /&gt;&lt;br /&gt;create table ext (&lt;br /&gt;  ext_id int auto_increment,&lt;br /&gt;        ext_name varchar(40),&lt;br /&gt;  ext_jobdesc varchar(30),&lt;br /&gt;        ext_div tinyint(3) unsigned,&lt;br /&gt;        ext_ext varchar(5),&lt;br /&gt;        ext_fax varchar(15),&lt;br /&gt;  ext_phone varchar(15),&lt;br /&gt;        ext_floor varchar(10),&lt;br /&gt;  ext_mail varchar(30),&lt;br /&gt;        ext_company tinyint(3) unsigned,&lt;br /&gt;        ext_region tinyint(3) unsigned,&lt;br /&gt;  PRIMARY KEY (`ext_id`)&lt;br /&gt;) ENGINE=MyISAM;&lt;br /&gt;&lt;br /&gt;create table region (&lt;br /&gt;  reg_id int auto_increment,&lt;br /&gt;  reg_name varchar(30) not null,&lt;br /&gt;  reg_status tinyint(3) unsigned default 1,&lt;br /&gt;  PRIMARY KEY (`reg_id`),&lt;br /&gt;  UNIQUE KEY `reg_name`(`reg_name`)&lt;br /&gt;)ENGINE=MyISAM;&lt;br /&gt;&lt;br /&gt;create table prsh (&lt;br /&gt;  prsh_id int auto_increment,&lt;br /&gt;  prsh_name varchar(30) not null,&lt;br /&gt;  prsh_status tinyint(3) unsigned default 1,&lt;br /&gt;  PRIMARY KEY (`prsh_id`),&lt;br /&gt;  UNIQUE KEY `prsh_name`(`prsh_name`)&lt;br /&gt;)ENGINE=MyISAM;&lt;br /&gt;&lt;br /&gt;create table divs (&lt;br /&gt;  divs_id int auto_increment,&lt;br /&gt;  divs_name varchar(30) not null,&lt;br /&gt;  divs_status tinyint(3) unsigned default 1,&lt;br /&gt;  PRIMARY KEY (`divs_id`),&lt;br /&gt;  UNIQUE KEY `divs_name`(`divs_name`)&lt;br /&gt;)ENGINE=MyISAM;&lt;br /&gt;&lt;br /&gt;create table fl (&lt;br /&gt;        fl_id int auto_increment,&lt;br /&gt;        fl_name varchar(3) not null,&lt;br /&gt;        fl_status tinyint(3) unsigned default 1,&lt;br /&gt;        PRIMARY KEY (`fl_id`),&lt;br /&gt;        UNIQUE KEY `fl_name`(`fl_name`)&lt;br /&gt;)ENGINE=MyISAM;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* &lt;br /&gt;Dumping data&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;INSERT INTO `divs` (`divs_id`, `divs_name`, `divs_status`) VALUES (1, 'Kwarnas', 1);&lt;br /&gt;INSERT INTO `divs` (`divs_id`, `divs_name`, `divs_status`) VALUES (2, 'SC', 1);&lt;br /&gt;INSERT INTO `divs` (`divs_id`, `divs_name`, `divs_status`) VALUES (3, 'Keuangan', 1);&lt;br /&gt;INSERT INTO `divs` (`divs_id`, `divs_name`, `divs_status`) VALUES (4, 'Dir Hulu', 1);&lt;br /&gt;INSERT INTO `divs` (`divs_id`, `divs_name`, `divs_status`) VALUES (5, 'PWP', 1);&lt;br /&gt;&lt;br /&gt;INSERT INTO `ext` (`ext_name`, `ext_jobdesc`, `ext_div`, `ext_ext`, `ext_fax`, `ext_mail`, `ext_phone`, `ext_floor`) VALUES ('Security lt G', 'Security lt G', '1', '1332', '', '', '', 'G');&lt;br /&gt;INSERT INTO `ext` (`ext_name`, `ext_jobdesc`, `ext_div`, `ext_ext`, `ext_fax`, `ext_mail`, `ext_phone`, `ext_floor`) VALUES ('Pos Depan', 'Pos Depan', '1', '1964', '', '', '', 'G');&lt;br /&gt;INSERT INTO `ext` (`ext_name`, `ext_jobdesc`, `ext_div`, `ext_ext`, `ext_fax`, `ext_mail`, `ext_phone`, `ext_floor`) VALUES ('Storing Listrik', 'Storing Listrik', '1', '1369', ' ', '', '', 'G');&lt;br /&gt;INSERT INTO `ext` (`ext_name`, `ext_jobdesc`, `ext_div`, `ext_ext`, `ext_fax`, `ext_mail`, `ext_phone`, `ext_floor`) VALUES ('Storing AC', 'Storing AC', '1', '1965', '', '', '', 'G');&lt;br /&gt;INSERT INTO `ext` (`ext_name`, `ext_jobdesc`, `ext_div`, `ext_ext`, `ext_fax`, `ext_mail`, `ext_phone`, `ext_floor`) VALUES ('Rec14ionist lt. G', 'Rec14ionist lt. G', '1', '1444', '', '', '', 'G');&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (1, 'B3', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (2, 'B2', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (3, 'B1', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (4, 'G', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (5, '1', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (6, '2', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (7, '3', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (8, '4', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (9, '5', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (10, '6', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (11, '7', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (12, '8', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (13, '9', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (14, '10', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (15, '11', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (16, '12', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (17, '13', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (18, '14', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (19, '15', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (20, '16', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (21, '17', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (22, '18', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (23, '19', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (24, '21', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (25, '22', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (26, '23', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (27, '24', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (28, '25', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (29, '26', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (30, '27', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (31, '28', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (32, '29', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (33, '30', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (34, '31', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (35, '32', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (36, '33', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (37, '34', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (38, '35', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (39, '36', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (40, '37', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (41, '38', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (42, '39', 1);&lt;br /&gt;INSERT INTO `fl` (`fl_id`, `fl_name`, `fl_status`) VALUES (43, '40', 1);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;INSERT INTO `prsh` (`prsh_id`, `prsh_name`, `prsh_status`) VALUES (1, 'MYCOMPANY', 1);&lt;br /&gt;INSERT INTO `prsh` (`prsh_id`, `prsh_name`, `prsh_status`) VALUES (2, 'MYCOMPANY PERSERO', 1);&lt;br /&gt;INSERT INTO `prsh` (`prsh_id`, `prsh_name`, `prsh_status`) VALUES (3, 'PERTAGAS', 1);&lt;br /&gt;INSERT INTO `prsh` (`prsh_id`, `prsh_name`, `prsh_status`) VALUES (4, 'MYCOMPANY PELUMAS', 1);&lt;br /&gt;INSERT INTO `prsh` (`prsh_id`, `prsh_name`, `prsh_status`) VALUES (5, 'REKANAN', 1);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;INSERT INTO `region` (`reg_id`, `reg_name`, `reg_status`) VALUES (1, 'Pusat', 1);&lt;br /&gt;INSERT INTO `region` (`reg_id`, `reg_name`, `reg_status`) VALUES (2, 'Sumatera', 1);&lt;br /&gt;INSERT INTO `region` (`reg_id`, `reg_name`, `reg_status`) VALUES (3, 'Jawa', 1);&lt;br /&gt;INSERT INTO `region` (`reg_id`, `reg_name`, `reg_status`) VALUES (4, 'KTI', 1);&lt;br /&gt;INSERT INTO `region` (`reg_id`, `reg_name`, `reg_status`) VALUES (5, 'MYCOMPANY Pusat', 1);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;phonedir.module&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="source-code"&gt;&lt;code&gt;&amp;lt;?&lt;br /&gt;##########################################&lt;br /&gt;#             Konang Supian              #&lt;br /&gt;#          konangsupian@gmail.com        #&lt;br /&gt;#           02 Agustus 2007              #&lt;br /&gt;##########################################&lt;br /&gt;&lt;br /&gt;function phonedir_help($section='') {&lt;br /&gt;  $output = '';&lt;br /&gt;  switch ($section) {&lt;br /&gt;    case &amp;quot;admin/help#phonedir&amp;quot;:&lt;br /&gt;      $output = '&amp;lt;p&amp;gt;'.  t(&amp;quot;Test buat module&amp;quot;). '&amp;lt;/p&amp;gt;';&lt;br /&gt;      break;&lt;br /&gt;  }&lt;br /&gt;  return $output;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*function phonedir_perm() {&lt;br /&gt;  return array('PT MYCOMPANY  phonedir permission');&lt;br /&gt;}*/&lt;br /&gt;&lt;br /&gt;function phonedir_block($op='list', $delta=0) {&lt;br /&gt;  if ($op == &amp;quot;list&amp;quot;) {&lt;br /&gt;    $block[0][&amp;quot;info&amp;quot;] = t(&amp;quot;Phonedir&amp;quot;);&lt;br /&gt;    return $block;&lt;br /&gt;  } else if ($op == 'view') {&lt;br /&gt;    $block_content = l('Phone Directory', 'phonedir/show') . '&amp;lt;br /&amp;gt;';&lt;br /&gt;  if ($block_content == '') {&lt;br /&gt;          return;&lt;br /&gt;  }&lt;br /&gt;    $block['subject'] = 'Phonedir';&lt;br /&gt;    $block['content'] = $block_content;&lt;br /&gt;    return $block;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*function phonedir_admin() {&lt;br /&gt;  $form['phonedir_maxdisp'] = array(&lt;br /&gt;    '#type' =&amp;gt; 'textfield',&lt;br /&gt;    '#title' =&amp;gt; t('Maximum number of links'),&lt;br /&gt;    '#default_value' =&amp;gt; variable_get('phonedir_maxdisp', 3),&lt;br /&gt;    '#size' =&amp;gt; 2,&lt;br /&gt;    '#maxlength' =&amp;gt; 2,&lt;br /&gt;    '#description' =&amp;gt; t(&amp;quot;The maximum number of links to display in the block.&amp;quot;)&lt;br /&gt;  );&lt;br /&gt;  return system_settings_form($form);&lt;br /&gt;}*/&lt;br /&gt;&lt;br /&gt;function phonedir_menu() {&lt;br /&gt;  $items = array();&lt;br /&gt;  /*$items[] = array(&lt;br /&gt;    'path' =&amp;gt; 'admin/settings/phonedir',&lt;br /&gt;    'title' =&amp;gt; t('Phonedir module settings'),&lt;br /&gt;    'description' =&amp;gt; t('Description of your phonedir settings control'),&lt;br /&gt;    'callback' =&amp;gt; 'drupal_get_form',&lt;br /&gt;    'callback arguments' =&amp;gt; 'phonedir_admin',&lt;br /&gt;    'access' =&amp;gt; user_access('access administration pages'),&lt;br /&gt;    'type' =&amp;gt; MENU_NORMAL_ITEM,&lt;br /&gt;   );*/&lt;br /&gt;  ############ PARENT #########&lt;br /&gt;  $items[] = array(&lt;br /&gt;    'path' =&amp;gt; 'phonedir',&lt;br /&gt;    'title' =&amp;gt; t('Phone Directory'),&lt;br /&gt;    'callback' =&amp;gt; 'phonedir_load_search',&lt;br /&gt;    'access' =&amp;gt; user_access('access phonedir content'),&lt;br /&gt;    'type' =&amp;gt; MENU_NORMAL_ITEM,&lt;br /&gt;  );&lt;br /&gt;  ########### CHILD ##########&lt;br /&gt;  $items[] = array(&lt;br /&gt;    'path' =&amp;gt; 'phonedir/new',&lt;br /&gt;    'title' =&amp;gt; t('New Entry'),&lt;br /&gt;    'callback' =&amp;gt; 'phonedir_load_insert',&lt;br /&gt;    'access' =&amp;gt; user_access('access phonedir content'),&lt;br /&gt;    'type' =&amp;gt; MENU_NORMAL_ITEM,&lt;br /&gt;  );&lt;br /&gt;  $items[] = array(&lt;br /&gt;    'path' =&amp;gt; 'phonedir/list',&lt;br /&gt;    'title' =&amp;gt; t('Search'),&lt;br /&gt;    'callback' =&amp;gt; 'phonedir_load_search',&lt;br /&gt;    'access' =&amp;gt; user_access('access phonedir content'),&lt;br /&gt;    'type' =&amp;gt; MENU_NORMAL_ITEM,&lt;br /&gt;  );&lt;br /&gt;  $items[] = array(&lt;br /&gt;    'path' =&amp;gt; 'phonedir/show',&lt;br /&gt;    'title' =&amp;gt; t('Pencarian'),&lt;br /&gt;    'callback' =&amp;gt; 'phonedir_load_search',&lt;br /&gt;    'access' =&amp;gt; user_access('content'),&lt;br /&gt;    'type' =&amp;gt; MENU_HIDDEN,&lt;br /&gt;  );&lt;br /&gt;  $items[] = array(&lt;br /&gt;    'path' =&amp;gt; 'phonedir/profile',&lt;br /&gt;    'title' =&amp;gt; t('Profile'),&lt;br /&gt;    'callback' =&amp;gt; 'phonedir_load_profile',&lt;br /&gt;    'access' =&amp;gt; user_access('content'),&lt;br /&gt;    'type' =&amp;gt; MENU_HIDDEN,&lt;br /&gt;  );&lt;br /&gt;&lt;br /&gt;  return $items;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;############ GLOBAL FUNCTIONS ##############&lt;br /&gt;&lt;br /&gt;function phonedir_sql_array($query,$key,$key_index=null) {&lt;br /&gt;    db_set_active('phonedir');&lt;br /&gt;    $queryResult  = db_query($query);&lt;br /&gt;    while ($links = db_fetch_object($queryResult)) {&lt;br /&gt;  if ($key_index!=null) {&lt;br /&gt;      $myarray[$links-&amp;gt;$key_index] = $links -&amp;gt; $key;&lt;br /&gt;  } else {&lt;br /&gt;      $myarray[] = $links -&amp;gt; $key;&lt;br /&gt;  }&lt;br /&gt;    }&lt;br /&gt;    db_set_active('default');&lt;br /&gt;    return $myarray;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function phonedir_printfield($table,$field,$field_,$syarat) {&lt;br /&gt;    db_set_active('phonedir');&lt;br /&gt;    $query_  = &amp;quot;select &amp;quot;.$field.&amp;quot; from &amp;quot;.$table.&amp;quot; where &amp;quot;.$field_.&amp;quot;='&amp;quot;.$syarat.&amp;quot;'&amp;quot;;&lt;br /&gt;    $admin_  = mysql_query($query_);&lt;br /&gt;    $row_    = mysql_fetch_array($admin_);&lt;br /&gt;    if (!$admin_) {&lt;br /&gt;        echo mysql_error();&lt;br /&gt;    }&lt;br /&gt;    db_set_active('default');&lt;br /&gt;    return $row_[0];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function phonedir_list_data($caption,$table,$field,$syarat,$start,$script,$isnew,$href,$target,$q) {&lt;br /&gt;    $content = '';&lt;br /&gt;    if ($start &amp;gt; 0) { $anyar = $isnew;}&lt;br /&gt;    $show_per_page = 30;&lt;br /&gt;    $list_page     = 11;&lt;br /&gt;    if ($start &amp;lt; $show_per_page) $start = 0;&lt;br /&gt;    if ($syarat != &amp;quot;&amp;quot;) {&lt;br /&gt;                $mynewquery = &amp;quot;select &amp;quot;.$field.&amp;quot; from &amp;quot;.$table.&amp;quot; &amp;quot;.$syarat.&amp;quot; limit $start,$show_per_page&amp;quot;;&lt;br /&gt;                $mynewquery1 = &amp;quot;select count(*) from &amp;quot;.$table.&amp;quot; &amp;quot;.$syarat;&lt;br /&gt;    } else {&lt;br /&gt;                $mynewquery = &amp;quot;select &amp;quot;.$field.&amp;quot; from &amp;quot;.$table.&amp;quot; limit $start,$show_per_page&amp;quot;;&lt;br /&gt;                $mynewquery1 = &amp;quot;select count(*) from &amp;quot;.$table;&lt;br /&gt;    }&lt;br /&gt;    $result     = mysql_query($mynewquery);&lt;br /&gt;&lt;br /&gt;    #print $mynewquery;&lt;br /&gt;&lt;br /&gt;    if (!$result) {&lt;br /&gt;        print mysql_error();&lt;br /&gt;    }&lt;br /&gt;    $hasil = mysql_query($mynewquery1);&lt;br /&gt;    $hasil = mysql_fetch_row($hasil);&lt;br /&gt;    $hasil = $hasil[0];&lt;br /&gt;&lt;br /&gt;        $content .= '&lt;br /&gt;        &amp;lt;table id=&amp;quot;tbl-phonedir&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;                &amp;lt;tr class=&amp;quot;thead&amp;quot;&amp;gt;&amp;lt;td colspan=&amp;quot;'.mysql_num_fields($result).'&amp;quot;&amp;gt;&lt;br /&gt;                &amp;amp;nbsp;&amp;lt;b&amp;gt;'.$caption.'&amp;lt;/b&amp;gt; &amp;lt;i&amp;gt;('.$hasil.')&amp;lt;/i&amp;gt;&lt;br /&gt;        &amp;lt;/td&amp;gt;&lt;br /&gt;        &amp;lt;/tr&amp;gt;&lt;br /&gt;        &amp;lt;tr class=&amp;quot;tcol&amp;quot;&amp;gt;';&lt;br /&gt;            for ($i = 0; $i&amp;lt; mysql_num_fields($result); $i++) {&lt;br /&gt;                $head  = mysql_field_name( $result,$i);&lt;br /&gt;                $content .= &amp;quot;&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;$head&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;            }&lt;br /&gt;            $content .= &amp;quot;&amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt;            $myrow = 1;&lt;br /&gt;            for ($i=0; $i &amp;lt; $show_per_page; $i++) {&lt;br /&gt;                if ($result &amp;lt;&amp;gt; 0 ) { $row_array = mysql_fetch_row($result);}&lt;br /&gt;                if ($row_array==&amp;quot;&amp;quot;) { break; }&lt;br /&gt;                if ($i % 2 == 0) {&lt;br /&gt;                        $warna = &amp;quot;teven&amp;quot;;&lt;br /&gt;                } else {&lt;br /&gt;                        $warna = &amp;quot;todd&amp;quot;;&lt;br /&gt;                }&lt;br /&gt;                $content .= &amp;quot;\r\n&amp;lt;tr class=\&amp;quot;$warna\&amp;quot;&amp;gt;\r\n&amp;quot;;&lt;br /&gt;                for ($j=0; $j&amp;lt;mysql_num_fields($result); $j++) {&lt;br /&gt;                  if (eregi(&amp;quot;accessed&amp;quot;,mysql_field_name($result,$j))) {&lt;br /&gt;                        $row_array[$j] = tanggalan($row_array[$j]);&lt;br /&gt;                  }&lt;br /&gt;                  if ($j==0) {&lt;br /&gt;                        $content .= &amp;quot;&amp;lt;td align=\&amp;quot;center\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;                        $content .= ($myrow+$start);&lt;br /&gt;                  } else {&lt;br /&gt;                        $content .= &amp;quot;&amp;lt;td align=\&amp;quot;left\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;                        if ($href==$j) {&lt;br /&gt;                           $content .= '&amp;lt;a href=&amp;quot;'.$target.'&amp;amp;id='.$row_array[$q].'&amp;quot;&amp;gt;'.$row_array[$j].'&amp;lt;/a&amp;gt;';&lt;br /&gt;                        } else {&lt;br /&gt;                            if (!eregi(&amp;quot;STATUS&amp;quot;,mysql_field_name($result,$j))) {&lt;br /&gt;                                $tulis = eregi_replace(&amp;quot;\n&amp;quot;,&amp;quot;&amp;lt;br&amp;gt;&amp;quot;,$row_array[$j]);&lt;br /&gt;                                $content .= $tulis;&lt;br /&gt;                            }&lt;br /&gt;                        }&lt;br /&gt;                  }&lt;br /&gt;                $content .= &amp;quot;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;                }&lt;br /&gt;                $myrow++;&lt;br /&gt;                $content .= &amp;quot;&amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt;            }&lt;br /&gt;        $content .= phonedir_idx_page($hasil, $show_per_page, $list_page, $start, $script, $anyar, mysql_num_fields($result) , &amp;quot;#dddddd&amp;quot;);&lt;br /&gt;        $content .= &amp;quot;&lt;br /&gt;&amp;lt;/table&amp;gt;&amp;quot;;&lt;br /&gt;&lt;br /&gt;return $content;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function phonedir_idx_page($hasil, $show_per_page, $list_page, $start, $url, $isnew, $colspan, $warna) {&lt;br /&gt;$content = '';&lt;br /&gt;$content .= '&lt;br /&gt;     &amp;lt;tr class=&amp;quot;tfoot&amp;quot;&amp;gt;&amp;lt;td colspan=&amp;quot;'.$colspan.'&amp;quot;&amp;gt;&lt;br /&gt;     ';&lt;br /&gt;&lt;br /&gt;if ($hasil &amp;gt; 0) {&lt;br /&gt;  $counter   = 1;&lt;br /&gt;  $tmp_start = $start;&lt;br /&gt;  $start     = 0;&lt;br /&gt;  $first     = 0;&lt;br /&gt;  $last      = floor($hasil/$show_per_page)*$show_per_page;&lt;br /&gt;  $next      = $tmp_start+$show_per_page;&lt;br /&gt;  $pembagi   = ($next-($show_per_page * ($list_page-1) ));&lt;br /&gt;  $pembagi   = floor($pembagi / $show_per_page);&lt;br /&gt;  if ($pembagi&amp;gt;0) {&lt;br /&gt;    $prev=$next-(2*$show_per_page);&lt;br /&gt;    $content .= &amp;quot;&amp;lt;a href='$url&amp;amp;start=$first'&amp;gt;&amp;amp;laquo; first&amp;lt;/a&amp;gt; &amp;lt;a href='$url&amp;amp;start=$prev'&amp;gt;prev&amp;lt;/a&amp;gt; &amp;quot;;&lt;br /&gt;  }&lt;br /&gt;  if ($hasil &amp;lt;&amp;gt; 0 ) { $content .= &amp;quot;&amp;quot;;}&lt;br /&gt;  for ($i=0; $i &amp;lt; $hasil; $i++) {&lt;br /&gt;    if (($i %  $show_per_page) == 0) {&lt;br /&gt;     if (($counter % $list_page)==0) {&lt;br /&gt;        if ($next&amp;gt;$last) {$next=$last;}&lt;br /&gt;        $content .= &amp;quot; &amp;lt;a href='$url&amp;amp;start=$next'&amp;gt;next&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;        $content .= &amp;quot; &amp;lt;a href='$url&amp;amp;start=$last'&amp;gt;last &amp;amp;raquo;&amp;lt;/a&amp;gt;&amp;quot;;&lt;br /&gt;        break;&lt;br /&gt;     }&lt;br /&gt;     if ($isnew==&amp;quot;&amp;quot;) {&lt;br /&gt;        if ($counter&amp;gt;1) {&lt;br /&gt;                if ($pembagi&amp;gt;0) {&lt;br /&gt;                    $list=$counter+$pembagi;&lt;br /&gt;                    $urllist=($list-1)*$show_per_page;&lt;br /&gt;                    $content .= &amp;quot;&amp;amp;nbsp;&amp;lt;a href='$url&amp;amp;start=$urllist'&amp;gt;$list&amp;lt;/a&amp;gt;&amp;amp;nbsp;&amp;quot;;&lt;br /&gt;&lt;br /&gt;                  } else {&lt;br /&gt;                      $content .= &amp;quot;&amp;amp;nbsp;&amp;lt;a href='$url&amp;amp;start=$start'&amp;gt;$counter&amp;lt;/a&amp;gt;&amp;amp;nbsp;&amp;quot;;&lt;br /&gt;                  }&lt;br /&gt;              } else {&lt;br /&gt;                if ($pembagi&amp;gt;0) {&lt;br /&gt;                    $list=$counter+$pembagi;&lt;br /&gt;                    $content .= $list . &amp;quot;&amp;amp;nbsp;&amp;quot;;&lt;br /&gt;                } else {&lt;br /&gt;                  $content .= $counter . &amp;quot;&amp;amp;nbsp;&amp;quot;;&lt;br /&gt;                }&lt;br /&gt;              }&lt;br /&gt;&lt;br /&gt;      } else {&lt;br /&gt;       if ($i == $tmp_start ) {&lt;br /&gt;        if ($pembagi&amp;gt;0) {&lt;br /&gt;            $list=$counter+$pembagi;&lt;br /&gt;            $content .= $list . &amp;quot;&amp;amp;nbsp;&amp;quot;;&lt;br /&gt;            } else {&lt;br /&gt;                $content .= $counter . &amp;quot;&amp;amp;nbsp;&amp;quot;;&lt;br /&gt;            }&lt;br /&gt;         } else {&lt;br /&gt;            if ($pembagi&amp;gt;0) {&lt;br /&gt;              $list=$counter+$pembagi;&lt;br /&gt;              $urllist=($list-1)*$show_per_page;&lt;br /&gt;              $content .= &amp;quot;&amp;amp;nbsp;&amp;lt;a href='$url&amp;amp;start=$urllist'&amp;gt;$list&amp;lt;/a&amp;gt;&amp;amp;nbsp;&amp;quot;;&lt;br /&gt;            } else {&lt;br /&gt;               $content .= &amp;quot;&amp;amp;nbsp;&amp;lt;a href='$url&amp;amp;start=$start'&amp;gt;$counter&amp;lt;/a&amp;gt;&amp;amp;nbsp;&amp;quot;;&lt;br /&gt;            }&lt;br /&gt;           }&lt;br /&gt;        }&lt;br /&gt;     $start= $start + $show_per_page;&lt;br /&gt;     $counter = $counter + 1;&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;$content .= '&lt;br /&gt;     &amp;lt;/td&amp;gt;&lt;br /&gt;     ';&lt;br /&gt;return $content;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;############### INSERT DATA ################&lt;br /&gt;&lt;br /&gt;function phonedir_insert_form() {&lt;br /&gt;  $divisi_ = phonedir_sql_array('select * from divs','divs_name','divs_id');&lt;br /&gt;  $pt_     = phonedir_sql_array('select * from prsh','prsh_name','prsh_id');&lt;br /&gt;  $region_ = phonedir_sql_array('select * from region','reg_name','reg_id');&lt;br /&gt;  $lantai_ = phonedir_sql_array('select * from fl','fl_name','fl_name');&lt;br /&gt;&lt;br /&gt;  //$options = array('1' =&amp;gt; t('Enabled'), '0' =&amp;gt; t('Disabled'));&lt;br /&gt;  $form['user'] = array(&lt;br /&gt;    '#type' =&amp;gt; 'fieldset',&lt;br /&gt;    '#title' =&amp;gt; t('Data Ekstensi Telepon'),&lt;br /&gt;    '#tree' =&amp;gt; TRUE,&lt;br /&gt;  );&lt;br /&gt;  $form['user']['name'] = array(&lt;br /&gt;    '#type' =&amp;gt; 'textfield',&lt;br /&gt;    '#title' =&amp;gt; t('Nama Karyawan'),&lt;br /&gt;    '#size' =&amp;gt; 30,&lt;br /&gt;    '#maxlength' =&amp;gt; 64,&lt;br /&gt;  );&lt;br /&gt;  $form['user']['ext'] = array(&lt;br /&gt;    '#type' =&amp;gt; 'textfield',&lt;br /&gt;    '#title' =&amp;gt; t('Ext'),&lt;br /&gt;    '#size' =&amp;gt; 5,&lt;br /&gt;    '#maxlength' =&amp;gt; 5,&lt;br /&gt;  );&lt;br /&gt;  $form['user']['jobdesc'] = array(&lt;br /&gt;    '#type' =&amp;gt; 'textfield',&lt;br /&gt;    '#title' =&amp;gt; t('Jabatan'),&lt;br /&gt;    '#size' =&amp;gt; 30,&lt;br /&gt;    '#maxlength' =&amp;gt; 30,&lt;br /&gt;  );&lt;br /&gt;  $form['user']['mail'] = array(&lt;br /&gt;    '#type' =&amp;gt; 'textfield',&lt;br /&gt;    '#title' =&amp;gt; t('Email'),&lt;br /&gt;    '#size' =&amp;gt; 30,&lt;br /&gt;    '#maxlength' =&amp;gt; 30,&lt;br /&gt;  );&lt;br /&gt;  $form['user']['fax'] = array(&lt;br /&gt;    '#type' =&amp;gt; 'textfield',&lt;br /&gt;    '#title' =&amp;gt; t('Fax'),&lt;br /&gt;    '#size' =&amp;gt; 15,&lt;br /&gt;    '#maxlength' =&amp;gt; 15,&lt;br /&gt;  );&lt;br /&gt;  $form['user']['phone'] = array(&lt;br /&gt;    '#type' =&amp;gt; 'textfield',&lt;br /&gt;    '#title' =&amp;gt; t('Telepon'),&lt;br /&gt;    '#size' =&amp;gt; 15,&lt;br /&gt;    '#maxlength' =&amp;gt; 15,&lt;br /&gt;  );&lt;br /&gt;  $form['user']['floor'] = array(&lt;br /&gt;    '#type' =&amp;gt; 'select',&lt;br /&gt;    '#title' =&amp;gt; t('Lantai'),&lt;br /&gt;    '#options' =&amp;gt; $lantai_,&lt;br /&gt;  );&lt;br /&gt;  $form['user']['div'] = array(&lt;br /&gt;    '#type' =&amp;gt; 'select',&lt;br /&gt;    '#title' =&amp;gt; t('Divisi'),&lt;br /&gt;    '#options' =&amp;gt; $divisi_,&lt;br /&gt;  );&lt;br /&gt;  $form['user']['company'] = array(&lt;br /&gt;    '#type' =&amp;gt; 'select',&lt;br /&gt;    '#title' =&amp;gt; t('Nama Perusahaan'),&lt;br /&gt;    '#options' =&amp;gt; $pt_,&lt;br /&gt;  );&lt;br /&gt;  $form['user']['region'] = array(&lt;br /&gt;    '#type' =&amp;gt; 'select',&lt;br /&gt;    '#title' =&amp;gt; t('Region'),&lt;br /&gt;    '#options' =&amp;gt; $region_,&lt;br /&gt;  );&lt;br /&gt;  $form['submit'] = array('#type' =&amp;gt; 'submit', '#value' =&amp;gt; t('Save'));&lt;br /&gt;  return $form;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function phonedir_load_insert() {&lt;br /&gt;  return drupal_get_form('phonedir_insert_form');&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function phonedir_insert_form_validate($form_id, $form_values) {&lt;br /&gt;  if ($form_values['user']['name'] == '') {&lt;br /&gt;    form_set_error('', t('Nama karyawan tidak boleh kosong!'));&lt;br /&gt;  }&lt;br /&gt;  if ($form_values['user']['ext'] == '') {&lt;br /&gt;    form_set_error('', t('Ekstension telpon tidak boleh kosong!'));&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function phonedir_insert_form_submit($form_id, $form_values) {&lt;br /&gt;  db_set_active('phonedir');&lt;br /&gt;  $result = db_query(&amp;quot;INSERT INTO ext (ext_name,ext_jobdesc,ext_div,ext_ext,ext_fax,ext_floor,ext_mail,ext_company,ext_region)&lt;br /&gt;      VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s')&amp;quot;,&lt;br /&gt;      $form_values['user']['name'], $form_values['user']['jobdesc'], $form_values['user']['div'],$form_values['user']['ext'],$form_values['user']['fax'],$form_values['user']['floor'],$form_values['user']['mail'],$form_values['user']['company'],$form_values['user']['region']);&lt;br /&gt;  if (!$result) {&lt;br /&gt;      drupal_set_message(t('Bermasalah dalam memasukkan data : DUPLIKASI'));&lt;br /&gt;  } else {&lt;br /&gt;      drupal_set_message(t('Data ekstension telepon karyawan telah berhasil disimpan.'));&lt;br /&gt;  }&lt;br /&gt;  db_set_active('default');&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;############# SEARCH ##############&lt;br /&gt;&lt;br /&gt;function phonedir_search_form() {&lt;br /&gt;  $divs__    = array(&amp;quot;0&amp;quot;=&amp;gt;'ALL');&lt;br /&gt;  $divs___   = phonedir_sql_array('select * from divs','divs_name','divs_id');&lt;br /&gt;  $divs_     = array_merge($divs__,$divs___); ## pulldown content&lt;br /&gt;  $search    = $_GET['search'];&lt;br /&gt;  $divs      = $_GET['divs']; ## current divs from GET&lt;br /&gt;  if (!$qq)       $qq = $_GET['qq'];&lt;br /&gt;  if (!$start) $start = $_GET['start'];&lt;br /&gt;&lt;br /&gt;  if ($divs) {&lt;br /&gt;    $caption_divs = strtoupper(phonedir_printfield(&amp;quot;divs&amp;quot;,&amp;quot;divs_name&amp;quot;,&amp;quot;divs_id&amp;quot;,$divs));&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  $form['user'] = array(&lt;br /&gt;    '#type' =&amp;gt; 'fieldset',&lt;br /&gt;    '#title' =&amp;gt; t('Cari Ekstensi Telepon'),&lt;br /&gt;    '#tree' =&amp;gt; TRUE,&lt;br /&gt;  );&lt;br /&gt;  $form['user']['qq'] = array(&lt;br /&gt;    '#type' =&amp;gt; 'textfield',&lt;br /&gt;    '#title' =&amp;gt; t('Nama Karyawan'),&lt;br /&gt;    '#default_value' =&amp;gt; $qq,&lt;br /&gt;    '#size' =&amp;gt; 30,&lt;br /&gt;    '#maxlength' =&amp;gt; 64,&lt;br /&gt;    '#description' =&amp;gt; 'Boleh nama depan, nama tengah atau belakang.',&lt;br /&gt;  );&lt;br /&gt;  $form['user']['fungsi'] = array(&lt;br /&gt;    '#type' =&amp;gt; 'select',&lt;br /&gt;    '#title' =&amp;gt; t('Nama Fungsi'),&lt;br /&gt;    '#options' =&amp;gt; $divs_,&lt;br /&gt;  );&lt;br /&gt;&lt;br /&gt;  $form['submit'] = array('#type' =&amp;gt; 'submit', '#value' =&amp;gt; t('Search'));&lt;br /&gt;  $form['#redirect']=FALSE;&lt;br /&gt;&lt;br /&gt;  $form['spacer'] = array(&lt;br /&gt;    '#type' =&amp;gt; 'item',&lt;br /&gt;    '#size' =&amp;gt; 0,&lt;br /&gt;    '#maxlength' =&amp;gt; 0,&lt;br /&gt;    '#value' =&amp;gt; t('')&lt;br /&gt;  );&lt;br /&gt;&lt;br /&gt;  $form ['hasil'] = array(&lt;br /&gt;    '#type' =&amp;gt; 'fieldset',&lt;br /&gt;    '#title' =&amp;gt; 'Hasil Pencarian1',&lt;br /&gt;    '#tree' =&amp;gt; TRUE,&lt;br /&gt;  );&lt;br /&gt;&lt;br /&gt;  if ($divs) {&lt;br /&gt;  $add_query = ' and ext_div='.$divs;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  if ($qq &amp;amp;&amp;amp; $start&amp;gt;=0) {&lt;br /&gt;        db_set_active('phonedir');&lt;br /&gt;        $content = phonedir_list_data(&amp;quot;EKSTENSI TELEPON &amp;quot;.$caption_divs,&amp;quot;ext&amp;quot;,&lt;br /&gt;            &amp;quot;ext_id as NO,ext_name as NAMA,ext_ext as EXT,ext_floor as LT,divs_name as FUNGSI, ext_jobdesc as JABATAN, ext_phone as TLP&amp;quot;, &amp;quot;left join divs on (ext_div=divs_id) left join region on (ext_region=reg_id) left join prsh on (ext_company=prsh_id) where ext_name like '%&amp;quot;.$qq.&amp;quot;%'&amp;quot;.$add_query,&lt;br /&gt;            $start,&amp;quot;?q=phonedir/show&amp;amp;qq=&amp;quot;.$qq.&amp;quot;&amp;amp;divs=&amp;quot;.$divs,$start,1,&amp;quot;profile&amp;quot;,0);&lt;br /&gt;        db_set_active('default');&lt;br /&gt;  } elseif (!$qq &amp;amp;&amp;amp; $start&amp;gt;0) {&lt;br /&gt;        db_set_active('phonedir');&lt;br /&gt;        $content = phonedir_list_data(&amp;quot;EKSTENSI TELEPON &amp;quot;.$caption_divs,&amp;quot;ext&amp;quot;,&lt;br /&gt;            &amp;quot;ext_id as NO,ext_name as NAMA,ext_ext as EXT,ext_floor as LT,divs_name as FUNGSI,ext_jobdesc as JABATAN, ext_phone as TLP&amp;quot;, &amp;quot;left join divs on (ext_div=divs_id) left join region on (ext_region=reg_id) left join prsh on (ext_company=prsh_id) where  ext_name like '%&amp;quot;.$qq.&amp;quot;%'&amp;quot;.$add_query,&lt;br /&gt;            $start,&amp;quot;?q=phonedir/show&amp;amp;qq=&amp;quot;.$qq.&amp;quot;&amp;amp;divs=&amp;quot;.$divs,$start,1,&amp;quot;profile&amp;quot;,0);&lt;br /&gt;        db_set_active('default');&lt;br /&gt;  } elseif (!$qq &amp;amp;&amp;amp; $start=='0') {&lt;br /&gt;        if ($search) {&lt;br /&gt;            db_set_active('phonedir');&lt;br /&gt;            $content = phonedir_list_data(&amp;quot;EKSTENSI TELEPON &amp;quot;.$caption_divs,&amp;quot;ext&amp;quot;,&lt;br /&gt;                &amp;quot;ext_id as NO,ext_name as NAMA,ext_ext as EXT,ext_floor as LT,divs_name as FUNGSI,ext_jobdesc as JABATAN, ext_phone as TLP&amp;quot;, &amp;quot;left join divs on (ext_div=divs_id) left join region on (ext_region=reg_id) left join prsh on (ext_company=prsh_id) where 1&amp;quot;.$add_query,&lt;br /&gt;                $start,&amp;quot;?q=phonedir/show&amp;amp;qq=&amp;quot;.$qq.&amp;quot;&amp;amp;divs=&amp;quot;.$divs,$start,1,&amp;quot;profile&amp;quot;,0);&lt;br /&gt;            db_set_active('default');&lt;br /&gt;        } elseif (!$search) {&lt;br /&gt;                header(&amp;quot;Location: ?q=phonedir/show&amp;amp;qq=$qq&amp;amp;divs=$divs&amp;amp;start=0&amp;amp;search=Search&amp;quot;);&lt;br /&gt;        }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  $form ['hasil']['test'] = array(&lt;br /&gt;    '#type' =&amp;gt; 'item',&lt;br /&gt;    '#size' =&amp;gt; 0,&lt;br /&gt;    '#maxlength' =&amp;gt; 0,&lt;br /&gt;    '#description' =&amp;gt; $content,&lt;br /&gt;  );&lt;br /&gt;&lt;br /&gt;  return $form;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function phonedir_load_search() {&lt;br /&gt;  return drupal_get_form('phonedir_search_form');&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function phonedir_search_form_submit($form_id, $form_values) {&lt;br /&gt;  db_set_active('phonedir');&lt;br /&gt;  $qq     = eregi_replace(&amp;quot;'&amp;quot;,&amp;quot;`&amp;quot;,$form_values['user']['qq']);&lt;br /&gt;  $divs   = $form_values['user']['fungsi'];&lt;br /&gt;  $search = $form_values['submit'];&lt;br /&gt;  header(&amp;quot;Location: ?q=phonedir/show&amp;amp;qq=$qq&amp;amp;divs=$divs&amp;amp;start=0&amp;amp;search=$search&amp;quot;);&lt;br /&gt;  db_set_active('default');&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;############## Profile ###############&lt;br /&gt;&lt;br /&gt;function phonedir_profile_form() {&lt;br /&gt;  $divs__       = array(&amp;quot;0&amp;quot;=&amp;gt;'ALL');&lt;br /&gt;  $divs___      = phonedir_sql_array('select * from divs','divs_name','divs_id');&lt;br /&gt;  $divs_        = array_merge($divs__,$divs___); ## pulldown content&lt;br /&gt;  $search       = $_GET['search'];&lt;br /&gt;  $divs         = $_GET['divs'];&lt;br /&gt;  $id          = $_GET['id']; # profile's id&lt;br /&gt;  if (!$id) $id = $_GET['id'];&lt;br /&gt;&lt;br /&gt;  db_set_active('phonedir');&lt;br /&gt;  $query        = &amp;quot;select ext_id as NO,ext_name as NAMA,ext_ext as EXT,ext_floor as LT,divs_name as FUNGSI,ext_jobdesc as JABATAN, ext_phone as TLP, prsh_name as PRSH, reg_name as REGION from ext left join divs on (ext_div=divs_id) left join region on (ext_region=reg_id) left join prsh on (ext_company=prsh_id) where ext_id=&amp;quot;.$id;&lt;br /&gt;  $result       = mysql_query($query);&lt;br /&gt;  if ($result)&lt;br /&gt;     $row_array = mysql_fetch_array($result);&lt;br /&gt;  db_set_active('default');&lt;br /&gt;&lt;br /&gt;  if ($divs) {&lt;br /&gt;    $caption_divs = strtoupper(phonedir_printfield(&amp;quot;divs&amp;quot;,&amp;quot;divs_name&amp;quot;,&amp;quot;divs_id&amp;quot;,$divs));&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  $form['pro'] = array(&lt;br /&gt;    '#type' =&amp;gt; 'fieldset',&lt;br /&gt;    '#title' =&amp;gt; t('Cari Ekstensi Telepon'),&lt;br /&gt;    '#tree' =&amp;gt; TRUE,&lt;br /&gt;  );&lt;br /&gt;  $form['pro']['qq'] = array(&lt;br /&gt;    '#type' =&amp;gt; 'textfield',&lt;br /&gt;    '#title' =&amp;gt; t('Nama Karyawan'),&lt;br /&gt;    '#default_value' =&amp;gt; $row_array[&amp;quot;NAMA&amp;quot;],&lt;br /&gt;    '#size' =&amp;gt; 30,&lt;br /&gt;    '#maxlength' =&amp;gt; 64,&lt;br /&gt;    '#description' =&amp;gt; 'Boleh nama depan, nama tengah atau belakang.',&lt;br /&gt;  );&lt;br /&gt;  $form['pro']['fungsi'] = array(&lt;br /&gt;    '#type' =&amp;gt; 'select',&lt;br /&gt;    '#title' =&amp;gt; t('Nama Fungsi'),&lt;br /&gt;    '#options' =&amp;gt; $divs_,&lt;br /&gt;  );&lt;br /&gt;&lt;br /&gt;  $form['submit'] = array('#type' =&amp;gt; 'submit', '#value' =&amp;gt; t('Search'));&lt;br /&gt;  $form['#redirect']=FALSE;&lt;br /&gt;&lt;br /&gt;  $form['spacer'] = array(&lt;br /&gt;    '#type' =&amp;gt; 'item',&lt;br /&gt;    '#size' =&amp;gt; 0,&lt;br /&gt;    '#maxlength' =&amp;gt; 0,&lt;br /&gt;    '#value' =&amp;gt; t('')&lt;br /&gt;  );&lt;br /&gt;&lt;br /&gt;  $form ['mypro'] = array(&lt;br /&gt;    '#type' =&amp;gt; 'fieldset',&lt;br /&gt;    '#title' =&amp;gt; 'Lihat Profile',&lt;br /&gt;    '#tree' =&amp;gt; TRUE,&lt;br /&gt;  );&lt;br /&gt;&lt;br /&gt;  $content = &amp;quot;&amp;lt;h3&amp;gt;&amp;lt;font color='#444444'&amp;gt;&amp;lt;label for='edit-pro-qq'&amp;gt;&amp;quot;;&lt;br /&gt;  $content .= $row_array[&amp;quot;NAMA&amp;quot;] . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;  $content .= $row_array[&amp;quot;JABATAN&amp;quot;] . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;  $content .= $row_array[&amp;quot;FUNGSI&amp;quot;] . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;  $content .= $row_array[&amp;quot;PRSH&amp;quot;] . &amp;quot; &amp;quot; . $row_array[&amp;quot;REGION&amp;quot;];&lt;br /&gt;  $content .= &amp;quot;Ext     : &amp;quot; . $row_array[&amp;quot;EXT&amp;quot;] . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;  $content .= &amp;quot;Lantai  : &amp;quot; . $row_array[&amp;quot;LT&amp;quot;] . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;  $content .= &amp;quot;Telepon : &amp;quot; . $row_array[&amp;quot;TLP&amp;quot;] . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;  $content .= &amp;quot;&amp;lt;/label&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/h3&amp;gt;&amp;quot;;&lt;br /&gt;&lt;br /&gt;  $form ['mypro']['view'] = array(&lt;br /&gt;    '#type' =&amp;gt; 'item',&lt;br /&gt;    '#size' =&amp;gt; 0,&lt;br /&gt;    '#maxlength' =&amp;gt; 0,&lt;br /&gt;    '#description' =&amp;gt; $content,&lt;br /&gt;  );&lt;br /&gt;&lt;br /&gt;  return $form;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function phonedir_load_profile() {&lt;br /&gt;  return drupal_get_form('phonedir_profile_form');&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function phonedir_profile_form_submit($form_id, $form_values) {&lt;br /&gt;  db_set_active('phonedir');&lt;br /&gt;  $qq     = eregi_replace(&amp;quot;'&amp;quot;,&amp;quot;`&amp;quot;,$form_values['pro']['qq']);&lt;br /&gt;  $divs   = $form_values['pro']['fungsi'];&lt;br /&gt;  $search = $form_values['submit'];&lt;br /&gt;  header(&amp;quot;Location: ?q=phonedir/show&amp;amp;qq=$qq&amp;amp;divs=$divs&amp;amp;start=0&amp;amp;search=$search&amp;quot;);&lt;br /&gt;  db_set_active('default');&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;db_set_active('default');&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060839567905571834-4702835118239045852?l=konang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konang.blogspot.com/feeds/4702835118239045852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2060839567905571834&amp;postID=4702835118239045852' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/4702835118239045852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/4702835118239045852'/><link rel='alternate' type='text/html' href='http://konang.blogspot.com/2007/08/create-drupal-module.html' title='Create Drupal Module'/><author><name>Web Documentation</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060839567905571834.post-5859117124697618514</id><published>2007-08-21T20:29:00.001-07:00</published><updated>2007-10-05T04:03:59.899-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='SMS GTW'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Gammu SMS Gateway</title><content type='html'>&lt;strong&gt;&lt;span style="font-family:verdana;"&gt;Source:&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Please download : &lt;/span&gt;&lt;a href="http://www.gammu.org/"&gt;&lt;span style="font-family:verdana;"&gt;http://www.gammu.org/&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;strong&gt;Dependencies&lt;/strong&gt;&lt;br /&gt;Driver USB "&lt;strong&gt;usbserial pl2303&lt;/strong&gt;"&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span style="font-size:100%;"&gt;Please check &lt;strong&gt;&lt;span style="font-family:courier new;"&gt;/var/log/messages&lt;/span&gt;&lt;/strong&gt; when your modem plugged:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;May 2 07:43:08 localhost kernel: usb 4-2: new full speed USB device using&lt;br /&gt;uhci_hcd and address 3&lt;br /&gt;May 2 07:43:08 localhost kernel: usb 4-2: configuration #1 chosen from 1&lt;br /&gt;choice&lt;br /&gt;May 2 07:43:08 localhost kernel: pl2303 4-2:1.0: pl2303 converter detected&lt;br /&gt;May 2 07:43:08 localhost kernel: usb 4-2: pl2303 converter now attached&lt;br /&gt;to ttyUSB0&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;If you see your LOG contain text above so the driver pl2303 has been load and ready to use.&lt;br /&gt;If something problem and you can't find anything in your LOG please try : &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:78%;"  &gt;&lt;span style="font-size:85%;"&gt;# /sbin/modprobe -l grep serial&lt;br /&gt;# /sbin/lspci grep USB&lt;br /&gt;# /sbin/lsmod grep usb&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;Configure GAMMU&lt;br /&gt;&lt;/strong&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;# tar -zxvf gammu-1.10.3.tar.gz&lt;br /&gt;# make&lt;br /&gt;# make install&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;Please read &lt;span style="font-weight: bold;"&gt;README&lt;/span&gt; first for details information. Please create MySQL account, create GRANT and load gammu mysql structure to gammu's mysql user.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;Startup file for GAMMU&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;strong&gt;&lt;span style="font-size:85%;"&gt;startgammu.sh&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;#!/bin/sh&lt;br /&gt;export LANG=en_US.UTF-8&lt;br /&gt;killall -9 gammu&lt;br /&gt;/usr/local/bin/gammu --smsd MYSQL /etc/smsdrc &amp;&lt;br /&gt;echo 'Gammu SMS GTW Starting ...' /usr/local/bin/gammu --sendsmsdsms TEXT &lt;/span&gt;&lt;span style="font-size:85%;"&gt;081112223333 MYSQL /etc/smsdrc&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;Exec Path:&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/usr/local/bin/gammu&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;Config File:&lt;br /&gt;&lt;/strong&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;# /etc/gammurc&lt;br /&gt;[gammu]&lt;br /&gt;port = /dev/ttyUSB0&lt;br /&gt;connection = at115200&lt;br /&gt;logfile = /var/log/gammulog&lt;br /&gt;logformat = textall&lt;br /&gt;startinfo = yes&lt;br /&gt;gammucoding = utf8&lt;br /&gt;&lt;br /&gt;# /etc/smsdrc&lt;br /&gt;[smsd]&lt;br /&gt;PIN = 1234&lt;br /&gt;logfile = /var/log/smsdlog&lt;br /&gt;commtimeout = 1&lt;br /&gt;sendtimeout = 10&lt;br /&gt;deliveryreport = log&lt;br /&gt;phoneid = PEP-SMS-GTW&lt;br /&gt;# MYSQL&lt;br /&gt;user = smsd&lt;br /&gt;password = kunamjaya&lt;br /&gt;pc = localhost&lt;br /&gt;database = smsd&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;Startup: &lt;/strong&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/usr/local/bin/startgammu.sh&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Links:&lt;br /&gt;&lt;/strong&gt;&lt;a href="http://linux2.arinet.org/index.php?option=com_content&amp;amp;task=view&amp;id=121&amp;amp;Itemid=2"&gt;&lt;span style="font-size:78%;"&gt;http://linux2.arinet.org/index.php?option=com_content&amp;task=view&amp;amp;id=121&amp;amp;Itemid=2&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://aswandi.or.id/2006/09/28/sms-gateway-di-windows/#comments"&gt;&lt;span style="font-size:78%;"&gt;http://aswandi.or.id/2006/09/28/sms-gateway-di-windows/#comments&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://wammu.eu/"&gt;&lt;span style="font-size:78%;"&gt;http://wammu.eu/&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New, Courier, mono;font-size:85%;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="font-family:Courier New, Courier, mono;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size="2" face="Courier New, Courier, mono"&gt;&lt;strong&gt;&lt;font size="4"&gt;send.php&lt;/font&gt;&lt;/strong&gt;&lt;br&gt;&lt;br /&gt;&lt;pre class="source-code"&gt;&lt;code&gt;&amp;lt;?&lt;br /&gt;###   konangsupian@gmail.com  ###&lt;br /&gt;###       01 Mei 2007         ###&lt;br /&gt;&lt;br /&gt;$conn = mysql_connect(&amp;quot;10.10.123.252&amp;quot;,&amp;quot;gammu&amp;quot;,&amp;quot;kunamjaya&amp;quot;);&lt;br /&gt;if (!$conn) {&lt;br /&gt;        echo mysql_error();&lt;br /&gt;}&lt;br /&gt;mysql_select_db(&amp;quot;gammu&amp;quot;);&lt;br /&gt;&lt;br /&gt;function hexsms($kata) {&lt;br /&gt;  $tmp  = &amp;quot;&amp;quot;;&lt;br /&gt;  for ($i=0; $i&amp;lt;strlen($kata);$i++) {&lt;br /&gt;        $tmp_ = bin2hex($kata[$i]);&lt;br /&gt;        $tmp .= str_pad($tmp_, 4, &amp;quot;00&amp;quot;, STR_PAD_LEFT);&lt;br /&gt;  }&lt;br /&gt;  return strtoupper($tmp);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function aman($myvar) {&lt;br /&gt;    return eregi_replace(&amp;quot;'&amp;quot;,&amp;quot;`&amp;quot;,$myvar);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$waktu = date(&amp;quot;Y-m-d G:i:s&amp;quot;);&lt;br /&gt;#$Text=hexsms(aman($_POST[&amp;quot;sms&amp;quot;]));&lt;br /&gt;$DestinationNumber=aman($_POST[&amp;quot;to&amp;quot;]);&lt;br /&gt;$Coding=&amp;quot;Default_No_Compression&amp;quot;;&lt;br /&gt;$UDH=&amp;quot;&amp;quot;;&lt;br /&gt;$Class=&amp;quot;-1&amp;quot;;&lt;br /&gt;$TextDecoded=aman($_POST[&amp;quot;sms&amp;quot;]);&lt;br /&gt;$MultiPart=&amp;quot;false&amp;quot;;&lt;br /&gt;$RelativeValidity=&amp;quot;255&amp;quot;;&lt;br /&gt;$SenderID=&amp;quot;&amp;quot;;&lt;br /&gt;$SendingTimeOut=&amp;quot;0000-00-00 00:00:00&amp;quot;;&lt;br /&gt;$DeliveryReport=&amp;quot;default&amp;quot;;&lt;br /&gt;$CreatorID=&amp;quot;Gammu 1.10.3&amp;quot;;&lt;br /&gt;&lt;br /&gt;$result = mysql_query(&amp;quot;insert into outbox (UpdatedInDB,InsertIntoDB,SendingDateTime,Text,DestinationNumber,Coding,UDH,Class,TextDecoded,MultiPart,RelativeValidity,SenderID,&lt;br /&gt;SendingTimeOut,DeliveryReport,CreatorID)&lt;br /&gt;        values&lt;br /&gt;        ('now()','now()','now()','$Text','$DestinationNumber','$Coding','$UDH','$Class','$TextDecoded','$MultiPart','$RelativeValidity','$SenderID','$SendingTimeOut','$Deli&lt;br /&gt;veryReport','$CreatorID')&amp;quot;);&lt;br /&gt;&lt;br /&gt;if (!$result) {&lt;br /&gt;        print mysql_error();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;header('Location: index.html');&lt;br /&gt;&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;font size="2"&gt;&lt;strong&gt;&lt;font size="4"&gt;index.html&lt;/font&gt;&lt;/strong&gt;&lt;pre class="source-code"&gt;&lt;code&gt;&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.01 Transitional//EN&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;MYCOMPANY - SMS Gateway Interface&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=iso-8859-1&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;SCRIPT language=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;function rand()&lt;br /&gt;{&lt;br /&gt;        randomku = Math.random(1234567890);&lt;br /&gt;        strku    = String(randomku);&lt;br /&gt;        strku    = strku.replace('0.0','');&lt;br /&gt;        strku    = strku.replace('0.','');&lt;br /&gt;        return document.form1.code.value = strku;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&amp;lt;/SCRIPT&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;body onLoad=&amp;quot;JavaScript:rand()&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;br&amp;gt;&lt;br /&gt;&amp;lt;br&amp;gt;&lt;br /&gt;&amp;lt;form  action=&amp;quot;http://localhost/sms/send.php&amp;quot; method=&amp;quot;post&amp;quot; name=&amp;quot;form1&amp;quot;&amp;gt;&lt;br /&gt;  &amp;lt;table width=&amp;quot;400&amp;quot; border=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;      &amp;lt;td bgcolor=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;table width=&amp;quot;100%&amp;quot; border=&amp;quot;0&amp;quot; cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;          &amp;lt;tr bgcolor=&amp;quot;#FF9933&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;td colspan=&amp;quot;2&amp;quot; align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot; face=&amp;quot;Arial, Helvetica, sans-serif&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;::: MYCOMPANY - SMS GTW&lt;br /&gt;            &amp;lt;/strong&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;          &amp;lt;/tr&amp;gt;&lt;br /&gt;          &amp;lt;tr align=&amp;quot;left&amp;quot; valign=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#FFFFFF&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;td width=&amp;quot;80&amp;quot; nowrap&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot; face=&amp;quot;Arial, Helvetica, sans-serif&amp;quot;&amp;gt;To&amp;lt;/font&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;            &amp;lt;td width=&amp;quot;100%&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot; face=&amp;quot;Arial, Helvetica, sans-serif&amp;quot;&amp;gt;&lt;br /&gt;              &amp;lt;input  name=&amp;quot;to&amp;quot; type=&amp;quot;text&amp;quot; value=&amp;quot;0812&amp;quot;&amp;gt;&lt;br /&gt;              &amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;          &amp;lt;/tr&amp;gt;&lt;br /&gt;&lt;br /&gt;          &amp;lt;tr align=&amp;quot;left&amp;quot; valign=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#FFFFFF&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;td width=&amp;quot;80&amp;quot; nowrap&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot; face=&amp;quot;Arial, Helvetica, sans-serif&amp;quot;&amp;gt;ID&amp;lt;/font&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;            &amp;lt;td width=&amp;quot;100%&amp;quot;&amp;gt; &amp;lt;font size=&amp;quot;2&amp;quot; face=&amp;quot;Arial, Helvetica, sans-serif&amp;quot;&amp;gt;&lt;br /&gt;              &amp;lt;input  name=&amp;quot;idserver&amp;quot; type=&amp;quot;text&amp;quot; value=&amp;quot;PEP-SMS-GTW&amp;quot; readonly style=&amp;quot;border=0;&amp;quot;&amp;gt;&lt;br /&gt;              &amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;          &amp;lt;/tr&amp;gt;&lt;br /&gt;          &amp;lt;tr align=&amp;quot;left&amp;quot; valign=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#FFFFFF&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;td width=&amp;quot;80&amp;quot; nowrap&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot; face=&amp;quot;Arial, Helvetica, sans-serif&amp;quot;&amp;gt;Code&amp;lt;/font&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;            &amp;lt;td width=&amp;quot;100%&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot; face=&amp;quot;Arial, Helvetica, sans-serif&amp;quot;&amp;gt;&lt;br /&gt;              &amp;lt;input type=&amp;quot;text&amp;quot;  name=&amp;quot;code&amp;quot; readonly style=&amp;quot;border=0;&amp;quot;&amp;gt;&lt;br /&gt;              &amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;          &amp;lt;/tr&amp;gt;&lt;br /&gt;          &amp;lt;tr align=&amp;quot;left&amp;quot; valign=&amp;quot;middle&amp;quot; bgcolor=&amp;quot;#FFFFFF&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;td width=&amp;quot;80&amp;quot; nowrap&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot; face=&amp;quot;Arial, Helvetica, sans-serif&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;Length&amp;lt;/strong&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;            &amp;lt;td width=&amp;quot;100%&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot; face=&amp;quot;Arial, Helvetica, sans-serif&amp;quot;&amp;gt;&lt;br /&gt;              &amp;lt;input  name=&amp;quot;len&amp;quot; type=&amp;quot;text&amp;quot; size=&amp;quot;3&amp;quot; maxlength=&amp;quot;3&amp;quot; readonly style=&amp;quot;border=0; font-family:; color=#ff0000;&amp;quot;&amp;gt;&lt;br /&gt;              &amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;          &amp;lt;/tr&amp;gt;&lt;br /&gt;          &amp;lt;tr valign=&amp;quot;top&amp;quot; bgcolor=&amp;quot;#FFFFFF&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;td width=&amp;quot;80&amp;quot; nowrap&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot; face=&amp;quot;Arial, Helvetica, sans-serif&amp;quot;&amp;gt;SMS&amp;lt;/font&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;            &amp;lt;td width=&amp;quot;100%&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot; face=&amp;quot;Arial, Helvetica, sans-serif&amp;quot;&amp;gt;&lt;br /&gt;              &amp;lt;textarea name=&amp;quot;sms&amp;quot; cols=&amp;quot;40&amp;quot; rows=&amp;quot;5&amp;quot; id=&amp;quot;sms&amp;quot; onKeyUp=&amp;quot;form1.len.value=this.value.length&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&lt;br /&gt;              &amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;          &amp;lt;/tr&amp;gt;&lt;br /&gt;          &amp;lt;tr bgcolor=&amp;quot;#dddddd&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;td width=&amp;quot;80&amp;quot; nowrap&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot; face=&amp;quot;Arial, Helvetica, sans-serif&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;            &amp;lt;td width=&amp;quot;100%&amp;quot;&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot; face=&amp;quot;Arial, Helvetica, sans-serif&amp;quot;&amp;gt;&lt;br /&gt;              &amp;lt;input type=&amp;quot;submit&amp;quot;  name=&amp;quot;Submit&amp;quot; value=&amp;quot;Submit&amp;quot;&amp;gt;&lt;br /&gt;              &amp;lt;/font&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;          &amp;lt;/tr&amp;gt;&lt;br /&gt;&lt;br /&gt;        &amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;  &amp;lt;/table&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060839567905571834-5859117124697618514?l=konang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konang.blogspot.com/feeds/5859117124697618514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2060839567905571834&amp;postID=5859117124697618514' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/5859117124697618514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/5859117124697618514'/><link rel='alternate' type='text/html' href='http://konang.blogspot.com/2007/08/gammu-sms-gateway.html' title='Gammu SMS Gateway'/><author><name>Web Documentation</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060839567905571834.post-8353453498166236911</id><published>2007-08-21T20:24:00.000-07:00</published><updated>2007-08-22T00:26:49.387-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QMail'/><category scheme='http://www.blogger.com/atom/ns#' term='SMTP'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Qmail Footer :  HTML &amp; Attachment Support</title><content type='html'>&lt;span style="font-family:verdana;"&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Qmail version : 1.03&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Please download QMAIL Source from&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://www.qmail.org/"&gt;&lt;span style="font-family:verdana;"&gt;http://www.qmail.org/&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://cr.yp.to/qmail.html"&gt;&lt;span style="font-family:verdana;"&gt;http://cr.yp.to/qmail.html&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.qmailrocks.com/"&gt;&lt;span style="font-family:verdana;"&gt;http://www.qmailrocks.com/&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.tnpi.biz/internet/mail/toaster/"&gt;&lt;span style="font-family:verdana;"&gt;http://www.tnpi.biz/internet/mail/toaster/&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;FOOTER:&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://untroubled.org/bglibs/"&gt;&lt;span style="font-family:verdana;"&gt;http://untroubled.org/bglibs/&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.pldaniels.com/altermime/"&gt;&lt;span style="font-family:verdana;"&gt;http://www.pldaniels.com/altermime/&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://untroubled.org/qmail-qfilter/"&gt;&lt;span style="font-family:verdana;"&gt;http://untroubled.org/qmail-qfilter/&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;strong&gt;Configure BGLIBS – For qmail-qfilter&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://untroubled.org/bglibs/docs/modules.html"&gt;&lt;span style="font-family:verdana;"&gt;http://untroubled.org/bglibs/docs/modules.html&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;# tar –zxvf bglibs-1.102.tar.gz&lt;br /&gt;# cd bglibs-1.102&lt;br /&gt;# make&lt;br /&gt;# make install&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Don't forget to copy share library libbg-sysdeps.so.1 to /usr/lib, this one need by qmail-qfilter.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;strong&gt;ALTERMIME – Program to add mail footer&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;# tar –zxvf altermime-0.3.7.tar.gz&lt;br /&gt;# cd altermime-0.3.7&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Hack source program mime_alter.c (remove char "=")&lt;br /&gt;&lt;br /&gt;Origin:&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:78%;"  &gt;if (dd-&gt;disclaimer_text_HTML == NULL) { &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:78%;"&gt;   fprintf(newf,"=\r\n");&lt;br /&gt; AM_ntorn(qp_data, newf);&lt;br /&gt; fprintf(newf,"=\r\n");&lt;br /&gt;} else {&lt;br /&gt; fprintf(newf,"=\r\n");&lt;br /&gt; AM_ntorn(qp_data, newf);&lt;br /&gt; fprintf(newf,"=\r\n");&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;To:&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:78%;"  &gt;if (dd-&gt;disclaimer_text_HTML == NULL) { &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:78%;"&gt;   fprintf(newf,"\r\n");&lt;br /&gt; AM_ntorn(qp_data, newf);&lt;br /&gt; fprintf(newf,"\r\n");&lt;br /&gt;} else {&lt;br /&gt; fprintf(newf,"\r\n");&lt;br /&gt; AM_ntorn(qp_data, newf);&lt;br /&gt; fprintf(newf,"\r\n");&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;Hack source qpe.c (remove char "=" and length of str)&lt;br /&gt;&lt;br /&gt;Origin:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:78%;"&gt;if (current_line_length +charout_size &gt;= 76) {&lt;br /&gt; snprintf(op, out_remaining, "%s=\r\n", paragraph);&lt;br /&gt; op+= strlen(paragraph) +3; /** jump the output + =\r\n **/&lt;br /&gt; out_remaining-= (strlen(paragraph) +3);&lt;br /&gt;…&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;To:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:78%;"&gt;if (current_line_length +charout_size &gt;= 76) {&lt;br /&gt; snprintf(op, out_remaining, "%s\r\n", paragraph);&lt;br /&gt; op+= strlen(paragraph); /** jump the output + =\r\n **/&lt;br /&gt; out_remaining-= (strlen(paragraph));&lt;br /&gt;…&lt;/span&gt;&lt;br /&gt;# make&lt;br /&gt;# make install&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;QMAIL-QFILTER – Filtering mail and then forward to qmail-queue&lt;/strong&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;# tar –zxvf qmail-qfilter-2.1.tar.gz&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Edit file qmail-qfilter.c, Cumtom as you need:&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;#define TMPDIR "/var/tmp/qmail-qfilter"&lt;br /&gt;#define QMAIL_QUEUE "/var/qmail/bin/qmail-queue"&lt;br /&gt;&lt;br /&gt;# make&lt;br /&gt;# make install&lt;br /&gt;&lt;br /&gt;# mkdir –p /var/tmp/qmail-qfilter&lt;br /&gt;# chmod 777 /var/tmp/qmail-qfilter&lt;br /&gt;# mkdir –p /var/qmail/control/disclaimer&lt;br /&gt;# touch /var/qmail/control/disclaimer/mydomain.com.txt&lt;br /&gt;# touch /var/qmail/control/disclaimer/mydomain.com.html&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Type your disclaimer or footer :&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="font-size:85%;"&gt;&lt;em&gt;-------------------------------------&lt;br /&gt;NOTE: The information contained in this e-mail is intended only for the use of the individual or entity named above and may contain information that is privi&lt;br /&gt;leged, confidential and exempt from disclosure under applicable law. If you are not the intended party to receive the message and its attachment(s), you are&lt;br /&gt;hereby notified that any dissemination, distribution or copy of the message is strictly prohibited. Please immediately notify the sender and delete the messa&lt;br /&gt;ge as soon as possible. Thank you for kind attention.&lt;/em&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Create file:&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;# touch /var/qmail/bin/qmail-disclaimer&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Copy the text below and paste to &lt;span style="font-family:courier new;"&gt;&lt;strong&gt;/var/qmail/bin/qmail-disclaimer&lt;/strong&gt;&lt;/span&gt; :&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:78%;"  &gt;#!/bin/sh&lt;br /&gt;QMAILHOST=mydomain.com&lt;br /&gt;INSPECT_DIR=/var/tmp/qmail-qfilter&lt;br /&gt;if [ ! -f /var/qmail/control/disclaimer/$QMAILHOST.txt ]&lt;br /&gt;then&lt;br /&gt;cat&lt;br /&gt;exit 0&lt;br /&gt;fi&lt;br /&gt;EX_TEMPFAIL=31&lt;br /&gt;EX_UNAVAILABLE=31&lt;br /&gt;trap "rm -f /var/tmp/qmail-qfilter/in.$$" 0 1 2 3 15&lt;br /&gt;cd $INSPECT_DIR { echo Error: $INSPECT_DIR does not exist; exit $EX_TEMPFAIL; }&lt;br /&gt;cat &gt;$INSPECT_DIR/in.$$ { echo $QMAILHOST - Error: Cannot write to disk; exit $EX_TEMPFAIL; }&lt;br /&gt;/usr/local/bin/altermime --input=$INSPECT_DIR/in.$$ \&lt;br /&gt;--htmltoo \&lt;br /&gt;--disclaimer=/var/qmail/control/disclaimer/$QMAILHOST.txt \&lt;br /&gt;--disclaimer-html=/var/qmail/control/disclaimer/$QMAILHOST.html { echo Error: message rejected; exit $EX_UNAVAILABLE; }&lt;br /&gt;cat $INSPECT_DIR/in.$$&lt;br /&gt;rm in.$$&lt;br /&gt;exit $?&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Create file:&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;# touch /var/qmail/bin/qmail-tail&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Copy the text below and paste to &lt;strong&gt;&lt;span style="font-family:courier new;"&gt;/var/qmail/bin/qmail-tail&lt;/span&gt;&lt;/strong&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;#!/bin/sh&lt;br /&gt;exec /usr/bin/qmail-qfilter /var/qmail/bin/qmail-disclaimer /var/qmail/bin/qmail-inject -n&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;Edit file /etc/smtpd:&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:78%;"  &gt;127.:allow,RELAYCLIENT="",QMAILQUEUE="/var/qmail/bin/qmail-tail"&lt;br /&gt;10.80.120.:allow,RELAYCLIENT="",RBLSMTPD="",QMAILQUEUE="/var/qmail/bin/qmail-tail"&lt;br /&gt;10.80.121.:allow,RELAYCLIENT="",RBLSMTPD="",QMAILQUEUE="/var/qmail/bin/qmail-tail "&lt;br /&gt;10.80.122.:allow,RELAYCLIENT="",RBLSMTPD="",QMAILQUEUE="/var/qmail/bin/qmail-tail"&lt;br /&gt;#10.80.123.:allow,RELAYCLIENT="",RBLSMTPD=""&lt;br /&gt;10.80.123.:allow,RELAYCLIENT="",RBLSMTPD="",QMAILQUEUE="/var/qmail/bin/qmail-tail"&lt;br /&gt;10.11.:allow,RELAYCLIENT="",RBLSMTPD="",QMAILQUEUE="/var/qmail/bin/qmail-tail"&lt;br /&gt;10.3.4.:allow,RELAYCLIENT="",RBLSMTPD="",QMAILQUEUE="/var/qmail/bin/qmail-tail"&lt;br /&gt;192.168..:allow,RELAYCLIENT="",RBLSMTPD="",QMAILQUEUE="/var/qmail/bin/qmail-tail"&lt;br /&gt;#:allow&lt;br /&gt;:allow,HELODNSCHECK="",MFDNSCHECK="" &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;# /var/qmail/bin/qmailctl cdb&lt;br /&gt;# /var/qmail/bin/qmailctl restart&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;Exec Path :&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;/usr/bin/qmail-qfilter&lt;br /&gt;/usr/local/bin/altermime&lt;br /&gt;/usr/local/bglibs/lib&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Config file can be found at source tree before compilation.&lt;br /&gt;Links : &lt;/span&gt;&lt;a href="http://forum.qmailrocks.org/showthread.php?t=2412"&gt;&lt;span style="font-family:verdana;"&gt;http://forum.qmailrocks.org/showthread.php?t=2412&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060839567905571834-8353453498166236911?l=konang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konang.blogspot.com/feeds/8353453498166236911/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2060839567905571834&amp;postID=8353453498166236911' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/8353453498166236911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/8353453498166236911'/><link rel='alternate' type='text/html' href='http://konang.blogspot.com/2007/08/qmail-footer-html-attachment-support.html' title='Qmail Footer :  HTML &amp; Attachment Support'/><author><name>Web Documentation</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060839567905571834.post-1658768096032614077</id><published>2007-08-21T20:21:00.000-07:00</published><updated>2007-08-22T00:28:10.598-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Oracle Instant Client for PHP &amp; Linux</title><content type='html'>&lt;p&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Service&lt;/strong&gt; &lt;/span&gt;&lt;br /&gt;instantclient-basic-linux32-10.2.0.2-20060331&lt;br /&gt;instantclient-sdk-linux32-10.2.0.2-20060331&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:arial;"&gt;&lt;p align="left"&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Download&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://www.oracle.com/technology/software/tech/oci/instantclient/index.html"&gt;&lt;span style="font-size:85%;"&gt;http://www.oracle.com/technology/software/tech/oci/instantclient/index.htm&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;&lt;a href="http://www.oracle.com/technology/software/htdocs/client_lic.html?url=http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linuxsoft.html"&gt;http://www.oracle.com/technology/software/htdocs/client_lic.html?url=http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linuxsoft.h&lt;br /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;&lt;a href="http://download.oracle.com/otn/linux/instantclient/10202/instantclient-basic-linux32-10.2.0.2-20060331.zip"&gt;http://download.oracle.com/otn/linux/instantclient/10202/instantclient-basic-linux32-10.2.0.2-20060331.zip&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;a href="http://download.oracle.com/otn/linux/instantclient/10202/instantclient-sdk-linux32-10.2.0.2-20060331.zip"&gt;&lt;span style="font-size:85%;"&gt;http://download.oracle.com/otn/linux/instantclient/10202/instantclient-sdk-linux32-10.2.0.2-20060331.zip&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:130%;"  &gt;&lt;strong&gt;Links&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;a href="http://us3.php.net/oci8"&gt;http://us3.php.net/oci8&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Configure Oracle Client&lt;/span&gt;&lt;br /&gt;&lt;/strong&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;Install Oracle instant client&lt;br /&gt;&lt;br /&gt;# mkdir -p /usr/lib/oracle/10.2.0.2/client&lt;br /&gt;# unzip -jd /usr/lib/oracle/10.2.0.2/client \&lt;br /&gt;instantclient-basic-linux-x86-32-10.2.0.2-20060331.zip&lt;br /&gt;# mkdir -p /usr/include/oracle/10.2.0.2/client&lt;br /&gt;# unzip -jd /usr/include/oracle/10.2.0.2/client \&lt;br /&gt;instantclient-sdk-linux-x86-32-10.2.0.2-20060331.zip&lt;br /&gt;# ln -s /usr/lib/oracle/10.2.0.2/client/libclntsh.so.10.1 \&lt;br /&gt;/usr/lib/oracle/10.2.0.2/client/libclntsh.so&lt;br /&gt;# cp /usr/include/oracle/10.2.0.2/client/* /usr/lib/oracle/10.2.0.2/client/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Configure Apache&lt;/span&gt;&lt;br /&gt;&lt;/strong&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;# ./configure --prefix=/usr/local/apache \&lt;br /&gt;--enable-shared=max --enable-module=vhost_alias&lt;br /&gt;Alternate compile to another directory&lt;br /&gt;## ./configure --prefix=/usr/local/apache4 \&lt;br /&gt;--enable-shared=max --enable-module=so \&lt;br /&gt;--enable-module=vhost_alias&lt;br /&gt;## Reconfigure PHP 4.x.x&lt;br /&gt;# ./configure --with-mysql \&lt;br /&gt;--with-ldap \&lt;br /&gt;--with-gettext \&lt;br /&gt;--with-apxs=/usr/sbin/apxs \&lt;br /&gt;--with-oci8-instant-client=/usr/lib/orale/10.2.0.2/client&lt;br /&gt;## Reconfigure PHP 5.x.x&lt;br /&gt;# ./configure --with-mysql=/usr --with-ldap \&lt;br /&gt;--with-gettext --enable-versioning \&lt;br /&gt;--enable-memory-limit --enable-zend-multibyte \&lt;br /&gt;--enable-zip --enable-track-vars \&lt;br /&gt;--with-apxs=/usr/local/apache/bin/apxs \&lt;br /&gt;--with-calendar \&lt;br /&gt;--with-oci8=instantclient,/usr/lib/oracle/10.2.0.2/client&lt;br /&gt;# export LD_LIBRARY_PATH=\&lt;br /&gt;/usr/lib/oracle/10.2.0.2/client:$LD_LIBRARY_PATH&lt;br /&gt;# make&lt;br /&gt;# make install&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Please restart apache and test connection with source code below :&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;### Test your PHP Oracle connection ####&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:78%;"  &gt;### oci.php ###&lt;br /&gt;&lt;br /&gt;&amp;lt;?&lt;br /&gt;&lt;br /&gt;define("_USER","ora");&lt;br /&gt;&lt;br /&gt;define("_PASSWD","ora");&lt;br /&gt;&lt;br /&gt;define("_DB","10.8.8.8/ORA"); &lt;/span&gt;&lt;span style="font-family:Courier New,Courier,mono;"&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;$conn = OCILogon(_USER,_PASSWD,_DB) or die(OCIError());&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;if ($conn){&lt;br /&gt;&lt;br /&gt;print "Terkoneksi ke database ". _DB . " sebagai user "&lt;br /&gt;. _USER."&amp;lt;BR&amp;gt;";&lt;br /&gt;&lt;br /&gt;echo "CONN=".$conn."&amp;lt;br&amp;gt;";&lt;br /&gt;&lt;br /&gt;} else {&lt;br /&gt;&lt;br /&gt;exit;&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;$cmdstr = "select * from TB_VENDOR";&lt;br /&gt;&lt;br /&gt;$parsed = ociparse($conn, $cmdstr);&lt;br /&gt;&lt;br /&gt;ociexecute($parsed);&lt;br /&gt;&lt;br /&gt;$nrows = ocifetchstatement($parsed, $results);&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;echo "&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;Oracle PHP Test&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;";&lt;br /&gt;&lt;br /&gt;echo "&amp;lt;center&amp;gt;&amp;lt;h2&amp;gt;Oracle PHP Test for &amp;lt;i&amp;gt;&amp;lt;u&amp;gt;Obsolete&amp;lt;/u&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;Command&amp;lt;/h2&amp;gt;&amp;lt;/center&amp;gt;";&lt;br /&gt;&lt;br /&gt;echo "&amp;lt;center&amp;gt;&amp;lt;h2&amp;gt;Connecting &amp; Accessing Oracle Database&amp;lt;/h2&amp;gt;&amp;lt;br&amp;gt;";&lt;br /&gt;&lt;br /&gt;echo "&amp;lt;table border=1 cellspacing='0' width='50%'&amp;gt;\n&amp;lt;tr&amp;gt;\n";&lt;br /&gt;&lt;br /&gt;echo "&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;NAMA PT&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;\n&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;ALAMAT&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;\n&amp;lt;/tr&amp;gt;\n";&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;for ($i = 0; $i &amp;lt; $nrows; $i++ )&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;echo "&amp;lt;tr&amp;gt;\n";&lt;br /&gt;&lt;br /&gt;echo "&amp;lt;td&amp;gt;" . $results["NM_VENDOR"][$i] . "&amp;lt;/td&amp;gt;";&lt;br /&gt;&lt;br /&gt;echo "&amp;lt;td&amp;gt; " . $results["ALAMAT"][$i] . "&amp;lt;/td&amp;gt;";&lt;br /&gt;&lt;br /&gt;echo "&amp;lt;/tr&amp;gt;\n";&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;echo "&amp;lt;tr&amp;gt;&amp;lt;td colspan='2'&amp;gt; Number of Rows:&lt;br /&gt;$nrows&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;";&lt;br /&gt;&lt;br /&gt;echo "&amp;lt;br&amp;gt;&amp;lt;em&amp;gt;If you see data, then it works!&amp;lt;/em&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;\n";&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;print "&amp;lt;hr&amp;gt;";&lt;br /&gt;&lt;br /&gt;echo "&amp;lt;center&amp;gt;&amp;lt;h2&amp;gt;Oracle PHP Test for &amp;lt;i&amp;gt;&amp;lt;u&amp;gt;Newest&amp;lt;/u&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;Command&amp;lt;/h2&amp;gt;&amp;lt;/center&amp;gt;";&lt;br /&gt;&lt;br /&gt;echo "&amp;lt;center&amp;gt;&amp;lt;h2&amp;gt;Connecting &amp; Accessing Oracle Database&amp;lt;/h2&amp;gt;&amp;lt;br&amp;gt;";&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;$conn = OCILogon(_USER,_PASSWD,_DB) or die(OCIError());&lt;br /&gt;&lt;br /&gt;if (!$conn) {&lt;br /&gt;&lt;br /&gt;$e = oci_error();&lt;br /&gt;&lt;br /&gt;print htmlentities($e['message']);&lt;br /&gt;&lt;br /&gt;exit;&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt; $query = 'SELECT * FROM TB_SOLUSI';&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt; $stid = oci_parse($conn, $query);&lt;br /&gt;&lt;br /&gt;if (!$stid) {&lt;br /&gt;&lt;br /&gt;$e = oci_error($conn);&lt;br /&gt;&lt;br /&gt;print htmlentities($e['message']);&lt;br /&gt;&lt;br /&gt;exit;&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt; $r = oci_execute($stid, OCI_DEFAULT);&lt;br /&gt;&lt;br /&gt;if (!$r) {&lt;br /&gt;&lt;br /&gt;$e = oci_error($stid);&lt;br /&gt;&lt;br /&gt;echo htmlentities($e['message']);&lt;br /&gt;&lt;br /&gt;exit;&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt; print '&amp;lt;table border="1"&amp;gt;';&lt;br /&gt;&lt;br /&gt;while ($row = oci_fetch_array($stid, OCI_RETURN_NULLS)) {&lt;br /&gt;&lt;br /&gt;print '&amp;lt;tr&amp;gt;';&lt;br /&gt;&lt;br /&gt;foreach ($row as $item) {&lt;br /&gt;&lt;br /&gt;print '&amp;lt;td&amp;gt;'.($item?htmlentities($item):' ').'&amp;lt;/td&amp;gt;';&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;print '&amp;lt;/tr&amp;gt;';&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;print '&amp;lt;/table&amp;gt;';&lt;br /&gt;&lt;br /&gt;echo "&amp;lt;center&amp;gt;&amp;lt;br&amp;gt;&amp;lt;em&amp;gt;If you see data, then it works!&amp;lt;/em&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/center&amp;gt;";&lt;br /&gt;&lt;br /&gt;oci_close($conn);&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:78%;"  &gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New,Courier,mono;"&gt; &lt;/span&gt; &lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060839567905571834-1658768096032614077?l=konang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konang.blogspot.com/feeds/1658768096032614077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2060839567905571834&amp;postID=1658768096032614077' title='20 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/1658768096032614077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/1658768096032614077'/><link rel='alternate' type='text/html' href='http://konang.blogspot.com/2007/08/oracle-instant-client-for-php-linux.html' title='Oracle Instant Client for PHP &amp; Linux'/><author><name>Web Documentation</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>20</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2060839567905571834.post-8217518896377421717</id><published>2007-08-21T20:19:00.000-07:00</published><updated>2007-08-22T00:28:41.232-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='FTP'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Proftpd MySQL Authentication</title><content type='html'>&lt;strong&gt;&lt;span style=";font-family:Arial,Helvetica,sans-serif;font-size:130%;"  &gt;Description&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style=";font-family:Arial,Helvetica,sans-serif;font-size:85%;"  &gt;Building FTP server based on ProFTPD and support by MySQL authentication.&lt;br /&gt;User separate by 2 groups, user full access and user readonly.&lt;/span&gt;&lt;span style=";font-family:Arial,Helvetica,sans-serif;font-size:130%;"  &gt;&lt;strong&gt;&lt;br /&gt;&lt;br /&gt;Download&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;&lt;a href="ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.0a.tar.gz"&gt;ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.0a.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;a href="http://dev.mysql.com/downloads/"&gt;http://dev.mysql.com/downloads/&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family:Arial,Helvetica,sans-serif;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Configure [Configure ProFTPD]&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;# ./configure --with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql \&lt;br /&gt;--with-includes=/usr/include/mysql/ --with-libraries=/usr/lib/mysql/&lt;br /&gt;# make&lt;br /&gt;# make install &lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=";font-family:Arial,Helvetica,sans-serif;font-size:130%;"  &gt;[Login To MySQL]&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;# mysql -u root -p&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;mysql&gt; create database ftp;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;mysql&gt; use mysql;&lt;br /&gt;mysql&gt; GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO 'proftp'@'localhost'&lt;br /&gt;IDENTIFIED BY 'kunam';&lt;br /&gt;&lt;br /&gt;mysql&gt; GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO 'proftp'@'localhost.localdomain'&lt;br /&gt;IDENTIFIED BY 'kunam';&lt;br /&gt;&lt;br /&gt;mysql&gt; FLUSH PRIVILEGES;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;mysql&gt; USE ftp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;CREATE TABLE ftpgroup (&lt;br /&gt;groupname varchar(16) NOT NULL default '',&lt;br /&gt;gid smallint(6) NOT NULL default '5500',&lt;br /&gt;members varchar(16) NOT NULL default '',&lt;br /&gt;KEY groupname (groupname)&lt;br /&gt;) TYPE=MyISAM COMMENT='ProFTP group table';&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;CREATE TABLE ftpquotalimits (&lt;br /&gt;name varchar(30) default NULL,&lt;br /&gt;quota_type enum('user','group','class','all') NOT NULL default 'user',&lt;br /&gt;per_session enum('false','true') NOT NULL default 'false',&lt;br /&gt;limit_type enum('soft','hard') NOT NULL default 'soft',&lt;br /&gt;bytes_in_avail int(10) unsigned NOT NULL default '0',&lt;br /&gt;bytes_out_avail int(10) unsigned NOT NULL default '0',&lt;br /&gt;bytes_xfer_avail int(10) unsigned NOT NULL default '0',&lt;br /&gt;files_in_avail int(10) unsigned NOT NULL default '0',&lt;br /&gt;files_out_avail int(10) unsigned NOT NULL default '0',&lt;br /&gt;files_xfer_avail int(10) unsigned NOT NULL default '0'&lt;br /&gt;) TYPE=MyISAM;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;CREATE TABLE ftpquotatallies (&lt;br /&gt;name varchar(30) NOT NULL default '',&lt;br /&gt;quota_type enum('user','group','class','all') NOT NULL default 'user',&lt;br /&gt;bytes_in_used int(10) unsigned NOT NULL default '0',&lt;br /&gt;bytes_out_used int(10) unsigned NOT NULL default '0',&lt;br /&gt;bytes_xfer_used int(10) unsigned NOT NULL default '0',&lt;br /&gt;files_in_used int(10) unsigned NOT NULL default '0',&lt;br /&gt;files_out_used int(10) unsigned NOT NULL default '0',&lt;br /&gt;files_xfer_used int(10) unsigned NOT NULL default '0'&lt;br /&gt;) TYPE=MyISAM;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;CREATE TABLE ftpuser (&lt;br /&gt;id int(10) unsigned NOT NULL auto_increment,&lt;br /&gt;userid varchar(32) NOT NULL default '',&lt;br /&gt;passwd varchar(32) NOT NULL default '',&lt;br /&gt;uid smallint(6) NOT NULL default '5500',&lt;br /&gt;gid smallint(6) NOT NULL default '5500',&lt;br /&gt;homedir varchar(255) NOT NULL default '',&lt;br /&gt;shell varchar(16) NOT NULL default '/sbin/nologin',&lt;br /&gt;count int(11) NOT NULL default '0',&lt;br /&gt;accessed datetime NOT NULL default '0000-00-00 00:00:00',&lt;br /&gt;modified datetime NOT NULL default '0000-00-00 00:00:00',&lt;br /&gt;PRIMARY KEY (id),&lt;br /&gt;UNIQUE KEY userid (userid)&lt;br /&gt;) TYPE=MyISAM COMMENT='ProFTP user table';&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;##### Create Group Full Access #####&lt;br /&gt;INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES ('ftpgroup', 2001,&lt;br /&gt;'ftpuser');&lt;br /&gt;&lt;br /&gt;##### Create Group Read Only #####&lt;br /&gt;INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES ('readftpgroup',&lt;br /&gt;2002, 'readftpuser');&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;##### Create Test User Full Access #####&lt;br /&gt;INSERT INTO `ftpquotalimits` (`name`, `quota_type`, `per_session`, `limit_type`,&lt;br /&gt;`bytes_in_avail`, `bytes_out_avail`, `bytes_xfer_avail`, `files_in_avail`, `files_out_avail`,&lt;br /&gt;`files_xfer_avail`) VALUES ('demouser', 'user', 'true', 'hard', 157286400, 0,&lt;br /&gt;0, 0, 0, 0);&lt;br /&gt;&lt;br /&gt;INSERT INTO `ftpuser` (`id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`,&lt;br /&gt;`count`, `accessed`, `modified`) VALUES (1, 'demouser', 'secret', 2001, 2001,&lt;br /&gt;'/data/ftp/demouser', '/sbin/nologin', 0, '', '');&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;##### Create Test User Readonly #####&lt;br /&gt;&lt;br /&gt;INSERT INTO `ftpquotalimits` (`name`, `quota_type`, `per_session`, `limit_type`,&lt;br /&gt;`bytes_in_avail`, `bytes_out_avail`, `bytes_xfer_avail`, `files_in_avail`, `files_out_avail`,&lt;br /&gt;`files_xfer_avail`) VALUES ('userdemo', 'user', 'true', 'hard', 157286400, 0,&lt;br /&gt;0, 0, 0, 0);&lt;br /&gt;&lt;br /&gt;INSERT INTO `ftpuser` (`id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`,&lt;br /&gt;`count`, `accessed`, `modified`) VALUES (2, 'userdemo', 'wedhus', 2002, 2002,&lt;br /&gt;'/data/ftp/demouser', '/sbin/nologin', 0, '', '');&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;mysql&gt; quit&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;##### Linux Shell ###############&lt;br /&gt;##### Add Group Full Access #####&lt;br /&gt;groupadd -g 2001 ftpgroup&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;##### Add User Full Access #####&lt;br /&gt;useradd -u 2001 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup&lt;br /&gt;ftpuser&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;##### Add Group Read Only #####&lt;br /&gt;groupadd -g 2002 readftpgroup &lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style=";font-family:Arial,Helvetica,sans-serif;font-size:85%;"  &gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Exec Path:&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-family:Courier New,Courier,mono;"&gt;/usr/local/sbin/proftpd&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Config File:&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-family:Courier New,Courier,mono;"&gt;/usr/local/etc/proftpd.conf&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Data:&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-family:Courier New,Courier,mono;"&gt;/data/ftp/&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:Arial,Helvetica,sans-serif;font-size:130%;"  &gt;&lt;strong&gt;# Basic ProFTPD Configuration&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;ServerName "FTP Server"&lt;br /&gt;ServerType standalone&lt;br /&gt;DefaultServer on&lt;br /&gt;ServerAdmin admin@localhost.com&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;# Port 21 is the standard&lt;br /&gt;FTP port.&lt;br /&gt;&lt;br /&gt;Port 21&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;# Umask 022 is a good standard&lt;br /&gt;umask to prevent new dirs and files&lt;br /&gt;&lt;br /&gt;# from being group and world writable.&lt;br /&gt;&lt;br /&gt;Umask 022&lt;br /&gt;&lt;br /&gt;MaxInstances 30&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;# Set the user and group under&lt;br /&gt;which the server will run.&lt;br /&gt;&lt;br /&gt;User ftpuser&lt;br /&gt;Group ftpgroup&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;# To cause every FTP user to be "jailed" (chrooted) into their home&lt;br /&gt;# directory, uncomment this line.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;DefaultRoot ~&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;# Normally, we want files&lt;br /&gt;to be overwriteable.&lt;br /&gt;&lt;br /&gt;AllowOverwrite on&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;# Bar use of SITE CHMOD by default&lt;br /&gt;&lt;br /&gt;&lt;limit&gt;&lt;br /&gt;&lt;br /&gt;DenyAll&lt;br /&gt;&lt;/limit&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;#####################&lt;br /&gt;&lt;br /&gt;TransferLog /var/log/proftpd.xferlog&lt;br /&gt;LogFormat default "%h %l %u %t \"%r\" %s %b"&lt;br /&gt;LogFormat auth "%v [%P] %h %t \"%r\" %s"&lt;br /&gt;LogFormat write "%h %l %u %t \"%r\" %s %b"&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;# Log file/dir access&lt;br /&gt;ExtendedLog /var/log/proftpd.access_log WRITE,READ write&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;# Record all logins&lt;br /&gt;ExtendedLog /var/log/proftpd.auth_log AUTH auth&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;# Paranoia logging level....&lt;br /&gt;ExtendedLog /var/log/proftpd.paranoid_log ALL default&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;#####################&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;# The passwords in MySQL are encrypted using CRYPT&lt;br /&gt;&lt;br /&gt;SQLAuthTypes Plaintext Crypt&lt;br /&gt;SQLAuthenticate users* groups*&lt;/span&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;&lt;br /&gt;&lt;br /&gt;# used to connect to the database&lt;br /&gt;# databasename@host database_user user_password&lt;br /&gt;SQLConnectInfo ftp@localhost proftpd kunam&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;# Here we tell ProFTPd the names of the database columns in the "usertable"&lt;br /&gt;# we want it to interact with. Match the names with those in the db&lt;br /&gt;&lt;br /&gt;SQLUserInfo ftpuser userid passwd uid gid homedir shell&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;# Here we tell ProFTPd the names of the database columns in the "grouptable"&lt;br /&gt;# we want it to interact with. Again the names match with those in the db&lt;br /&gt;&lt;br /&gt;SQLGroupInfo ftpgroup groupname gid members&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;# set min UID and GID - otherwise these are 999 each&lt;br /&gt;SQLMinID 500&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;# create a user's home directory on demand if it doesn't exist&lt;br /&gt;SQLHomedirOnDemand on&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;# Update count every time&lt;br /&gt;user logs in&lt;br /&gt;SQLLog PASS updatecount&lt;br /&gt;SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'"&lt;br /&gt;ftpuser&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;# Update modified everytime&lt;br /&gt;user uploads or deletes a file&lt;br /&gt;SQLLog STOR,DELE modified&lt;br /&gt;SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;# User quotas&lt;br /&gt;# ===========&lt;br /&gt;QuotaEngine on&lt;br /&gt;QuotaDirectoryTally on&lt;br /&gt;QuotaDisplayUnits Mb&lt;br /&gt;QuotaShowQuotas on&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;SQLNamedQuery get-quota-limit&lt;br /&gt;SELECT "name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avail,&lt;br /&gt;bytes_xfer_avail, files_in_avail, files_out&lt;br /&gt;&lt;br /&gt;_avail, files_xfer_avail FROM ftpquotalimits WHERE name = '%{0}' AND quota_type&lt;br /&gt;= '%{1}'"&lt;br /&gt;&lt;br /&gt;SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used,&lt;br /&gt;bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used&lt;br /&gt;FROM f&lt;br /&gt;&lt;br /&gt;tpquotatallies WHERE name = '%{0}' AND quota_type = '%{1}'"&lt;br /&gt;&lt;br /&gt;SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used&lt;br /&gt;+ %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used&lt;br /&gt;+ %{&lt;br /&gt;&lt;br /&gt;2}, files_in_used = files_in_used + %{3}, files_out_used = files_out_used +&lt;br /&gt;%{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = '%{6}' AND quota_type&lt;br /&gt;= '%{7}'" ftpquotatallies&lt;br /&gt;&lt;br /&gt;SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4},&lt;br /&gt;%{5}, %{6}, %{7}" ftpquotatallies&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;QuotaLimitTable sql:/get-quota-limit&lt;br /&gt;QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;RootLogin off&lt;br /&gt;RequireValidShell off&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;######### end of proftpd.conf #########&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style=";font-family:Arial,Helvetica,sans-serif;font-size:130%;"  &gt;&lt;strong&gt;[Start proftpd]&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:Courier New,Courier,mono;font-size:85%;"  &gt;/usr/local/sbin/proftpd&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2060839567905571834-8217518896377421717?l=konang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://konang.blogspot.com/feeds/8217518896377421717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2060839567905571834&amp;postID=8217518896377421717' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/8217518896377421717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2060839567905571834/posts/default/8217518896377421717'/><link rel='alternate' type='text/html' href='http://konang.blogspot.com/2007/08/proftpd-mysql-authentication.html' title='Proftpd MySQL Authentication'/><author><name>Web Documentation</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry></feed>
