Thursday, November 01, 2007

What version of Linux am I running?

3 commands to check Linux version:

cat /proc/version
cat /etc/redhat-release
uname -a

Should work with Redhat based systems, e.g. CentOS, Fedora..
BTW, I'm using CentOS...

Wednesday, October 17, 2007

Virtual Exim cyrus-imap saslauthd pam-mysql Login Problem

Cyrus POP3 Login Error:
[root@ ~]# telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
+OK centos.domain.com Cyrus POP3 v2.3.7-Invoca-RPM-2.3.7-1.1.el5 server ready <3974298939.1192619430@centos.domain.com>
user user@domain.com
+OK Name is a valid mailbox
pass password
-ERR [AUTH] Invalid login
quit
+OK
Connection closed by foreign host.


saslauthd error:
[root@ ~]# tail -f /var/log/messages
Oct 17 17:12:52 centos5 saslauthd[24323]: do_auth : auth failure: [user=user] [service=pop] [realm=domain.com] [mech=pam] [reason=PAM auth error]


To allow the user@domain.com to be used for pam_mysql authentication, edit /etc/sysconfig/saslauthd and set FLAGS=-r

[root@ ~]# nano /etc/sysconfig/saslauthd
# Directory in which to place saslauthd's listening socket, pid file, and so
# on. This directory must already exist.
SOCKETDIR=/var/run/saslauthd

# Mechanism to use when checking passwords. Run "saslauthd -v" to get a list
# of which mechanism your installation was compiled with the ablity to use.
MECH=pam

# Additional flags to pass to saslauthd on the command line. See saslauthd(8)
# for the list of accepted flags.
FLAGS=-r



[root@ ~]# cat /etc/pam.d/pop
#%PAM-1.0
auth sufficient pam_mysql.so user=vexim passwd=vexim_pw host=localhost db=vexim table=users usercolumn=username passwdcolumn=crypt crypt=1
account required pam_mysql.so user=vexim passwd=vexim_pw host=localhost db=vexim table=users usercolumn=username passwdcolumn=crypt crypt=1

Cyrus Virtual Domains Login Problem

Cyrus POP3 Login Error:
[root@ ~]# telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
+OK centos.domain.com Cyrus POP3 v2.3.7-Invoca-RPM-2.3.7-1.1.el5 server ready <3974298939.1192619430@centos.domain.com>
user user@domain.com
+OK Name is a valid mailbox
pass password
-ERR [AUTH] Invalid login
quit
+OK
Connection closed by foreign host.

To allow '@' in username during login, edit imapd.conf and set virtdomains: yes
[root@ ~]# nano /etc/imapd.conf
postmaster: postmaster
configdirectory: /var/lib/imap
partition-default: /var/spool/imap
#admins: cyrus # no admins!
virtdomains: yes
allowanonymouslogin: no
allowplaintext: yes
sendmail: /usr/sbin/sendmail
hashimapspool: true
sasl_pwcheck_method: saslauthd
sasl_mech_list: PLAIN
servername: centos.domain.com
autocreatequota: 10000
reject8bit: no
quotawarn: 90
timeout: 30
poptimeout: 10
dracinterval: 0
drachost: localhost
sievedir: /var/lib/imap/sieve
sieve_maxscriptsize: 32
sieve_maxscripts: 5
##unixhierarchysep: yes
tls_ca_file: /etc/pki/cyrus-imapd/cyrus-imapd.pem
tls_cert_file: /etc/pki/cyrus-imapd/cyrus-imapd.pem
tls_key_file: /etc/pki/cyrus-imapd/cyrus-imapd.pem

Restart cyrus-imapd:
service cyrus-imapd restart

Test IMAP login:
/usr/bin/imtest -a user@domain.com -w password localhost

Monday, October 15, 2007

Yum Install "Development Tools" on CentOS 5.0

yum -y groupinstall "Development Tools"

Installing pam-mysql on CentOS 5.0

yum -y install pam pam-devel openssl openssl-devel mysql mysql-devel mysql-server
cd /usr/src
wget http://downloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz?modtime=1136835566&big_mirror=0
tar -xvzf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1
./configure --bindir=/usr/bin --sbindir=/usr --with-openssl=/usr --with-mysql=/usr --with-pam=/usr --with-pam-mods-dir=/lib/security
make
make install

Check installed files:

ls -al /lib/security/pam_m*
-rwxr-xr-x 1 root root 8060 Mar 15 2007 /lib/security/pam_mail.so
-rwxr-xr-x 1 root root 15848 Mar 15 2007 /lib/security/pam_mkhomedir.so
-rwxr-xr-x 1 root root 3864 Mar 15 2007 /lib/security/pam_motd.so
-rwxr-xr-x 1 root root 880 Oct 16 01:18 /lib/security/pam_mysql.la
-rwxr-xr-x 1 root root 95126 Oct 16 01:18 /lib/security/pam_mysql.so

Friday, July 20, 2007

SME Server - qmail queue

Find messages in qmail's queue:
[root@sme queue]# cd /var/qmail/queue
[root@sme queue]# find bounce local mess remote todo -type f


Delete messages in qmail's queue:

Stop, Start and Restarting qmail:
[root@sme queue]# /etc/init.d/qmail
usage: /etc/init.d/qmail {start|stop|restart|status|sigalrm|sigcont|sighup|sigint|sigkill|sigstop|sigterm}
/etc/init.d/qmail stop
/etc/init.d/qmail start
/etc/init.d/qmail restart


Using qmHandle to handle qmail's queue:
References:

Thursday, April 12, 2007

Finding Database Tables used in ASP files - grep.exe sort.exe uniq.exe

We have a few websites sharing a single database.
We need to split the database, so that each website uses an separate database.

The problem was to find the set of tables used by a single website.

Instead of manually going through all the *.asp files,
I harness the power of Unix command line tools: grep

We use a standard naming convention for all database table names.
We prefix all database table names with "tbl".

Open Windows Command Prompt:
cd C:\websites\www
grep -o -r tbl[A-Za-z0-9]* *

Output:
test\view_tblCustomer.asp:tblCustomer
test\view_tblCustomer.asp:tblCustomer
test\view_tblMember.asp:tblMember
test\view_tblMember.asp:tblMember
test\view_tblMember.asp:tblMember
test\view_tblUser2.asp:tblUser2
test\view_tblUser2.asp:tblUser2

grep command usage:
Usage: grep [OPTION]... PATTERN [FILE] ...
Search for PATTERN in each FILE or standard input.
Example: grep -i 'hello world' menu.h main.c

Regexp selection and interpretation:
-E, --extended-regexp PATTERN is an extended regular expression
-F, --fixed-strings PATTERN is a set of newline-separated strings
-G, --basic-regexp PATTERN is a basic regular expression
-P, --perl-regexp PATTERN is a Perl regular expression
-e, --regexp=PATTERN use PATTERN as a regular expression
-f, --file=FILE obtain PATTERN from FILE
-i, --ignore-case ignore case distinctions
-w, --word-regexp force PATTERN to match only whole words
-x, --line-regexp force PATTERN to match only whole lines
-z, --null-data a data line ends in 0 byte, not newline

Miscellaneous:
-s, --no-messages suppress error messages
-v, --invert-match select non-matching lines
-V, --version print version information and exit
--help display this help and exit
--mmap use memory-mapped input if possible

Output control:
-m, --max-count=NUM stop after NUM matches
-b, --byte-offset print the byte offset with output lines
-n, --line-number print line number with output lines
--line-buffered flush output on every line
-H, --with-filename print the filename for each match
-h, --no-filename suppress the prefixing filename on output
--label=LABEL print LABEL as filename for standard input
-o, --only-matching show only the part of a line matching PATTERN
-q, --quiet, --silent suppress all normal output
--binary-files=TYPE assume that binary files are TYPE
TYPE is 'binary', 'text', or 'without-match'
-a, --text equivalent to --binary-files=text
-I equivalent to --binary-files=without-match
-d, --directories=ACTION how to handle directories
ACTION is 'read', 'recurse', or 'skip'
-D, --devices=ACTION how to handle devices, FIFOs and sockets
ACTION is 'read' or 'skip'
-R, -r, --recursive equivalent to --directories=recurse
--include=PATTERN files that match PATTERN will be examined
--exclude=PATTERN files that match PATTERN will be skipped.
--exclude-from=FILE files that match PATTERN in FILE will be skipped.
-L, --files-without-match only print FILE names containing no match
-l, --files-with-matches only print FILE names containing matches
-c, --count only print a count of matching lines per FILE
-Z, --null print 0 byte after FILE name

Context control:
-B, --before-context=NUM print NUM lines of leading context
-A, --after-context=NUM print NUM lines of trailing context
-C, --context=NUM print NUM lines of output context
-NUM same as --context=NUM
--color[=WHEN],
--colour[=WHEN] use markers to distinguish the matching string
WHEN may be `always', `never' or `auto'.
-U, --binary do not strip CR characters at EOL (MSDOS)
-u, --unix-byte-offsets report offsets as if CRs were not there (MSDOS)

`egrep' means `grep -E'. `fgrep' means `grep -F'.
With no FILE, or when FILE is -, read standard input. If less than
two FILEs given, assume -h. Exit status is 0 if match, 1 if no match,
and 2 if trouble.

Display only Table Names (without FileName):
grep -o -r -h tbl[A-Za-z0-9]* *

Output:
tblCustomer
tblCustomer
tblMember
tblMember
tblMember
tblUser2
tblUser2

Removing duplicate Table Names:
grep -o -r -h tbl[A-Za-z0-9]* * | sort.exe | uniq.exe

Output:
tblCustomer
tblMember
tblUser2

Finding only ASP files:
grep --include=*.asp -o -r tbl[A-Za-z0-9]* *

References:

Tuesday, April 03, 2007

Wusage Rewrite Rules with Regular Expressions

I have edited Wusage's configuration file to rewrite the url before Wusage engine process the url. The Wusage's Rewrite Rules below shows the use of Wusage's Regular Expressions.

Wusage's documentation on the usage of Regular Expressions is not well documented. There were no examples to write Regular Expressions with Replacement using Backreferences.

NOTE: Wusage's regular expression must begin with @

After some trial and error, here is what I have learnt.

Example 1:
URL to match:
/flash/header.swf?rnd=0.24753951619780357


Regular expression:
@^([^\.]*\.swf)\?.*$

Replacement expression:
\1 Returns the entire string matched by the regular expression, e.g. /flash/header.swf?rnd=0.24753951619780357
\2 Returns the first sub-match, e.g. ([^\.]*\.swf), /flash/header.swf

Example 2:
URL to match:
/resize_image.aspx?FilePath=/resource_docs/SEA_Sewar.jpg&width=640


Regular expression:
@^/resize_image\.aspx\?FilePath=([^\.]*\.(jpg|gif|tif|bmp))&.+$

Replacement expression:
\1 Returns the entire string matched by the regular expression, e.g. /resize_image.aspx?FilePath=/resource_docs/SEA_Sewar.jpg&width=640
\2 Returns the first sub-match, e.g. ([^\.]*\.(jpg|gif|tif|bmp)), /resource_docs/SEA_Sewar.jpg

Wusage's config file snippet:
#Rewrite Rules...
rewrite
# /flash/header.swf?rnd=0.24753951619780357
# /flash/header_exhibition.swf?rnd=0.7556053221950332
# /flash/header_learning.swf?rnd=0.0028210814865592404
# /flash/header_visitus.swf?rnd=0.01042118194914482
url @^([^\.]*\.swf)\?.*$ \2

# /resize_image.aspx?FilePath=/resource_docs/SEA_Sewar.jpg&width=640
url @^/resize_image\.aspx\?FilePath=([^\.]*\.(jpg|gif|tif|bmp))&.+$ \2

url /exhibitions/events.asp?* /exhibitions/events.asp
url /exhibitions/eventdetail.asp?* /exhibitions/eventdetail.asp
url /exhibitions/exhibitions.asp?* /exhibitions/exhibitions.asp
url /exhibitions/booking.asp?* /exhibitions/booking.asp
url /exhibitions/thankyou.asp?* /exhibitions/thankyou.asp
url /exhibitions/booking_clear.asp?* /exhibitions/booking_clear.asp
url /exhibitions/ticketdetail.asp?* /exhibitions/ticketdetail.asp

url /booking/login/loginaction.asp?* /booking/login/loginaction.asp
url /booking/payment/add_booking.asp?* /booking/payment/add_booking.asp
url /booking/report/attendence.asp?* /booking/report/attendence.asp
url /booking/report/payment_details.asp?* /booking/report/payment_details.asp
url /booking/report/details.asp?* /booking/report/details.asp
url /booking/payment/details.asp?* /booking/payment/details.asp
url /booking/report/excel_details.asp?* /booking/report/excel_details.asp
url /booking/report/excel_payment_details.asp?* /booking/report/excel_payment_details.asp

url /pressroom/releasesdetail.asp?* /pressroom/releasesdetail.asp
url /pressroom/newsdetail.asp?* /pressroom/newsdetail.asp
url /pressroom/news.asp?* /pressroom/news.asp
url /pressroom/releases.asp?* /pressroom/releases.asp

url /learning/imagepopup.asp?* /learning/imagepopup.asp
url /learning/museumartefacts.asp?* /learning/museumartefacts.asp

url /themuseum/galleries2.asp?* /themuseum/galleries2.asp
end rewrite