Admin Books

DOWNLOAD Free e-Books for Linux Admin Servers :

Testing Debug Exim Installation Error

Test that Exim has been installed by running: 
$ /usr/exim/bin/exim -bV
     which should tell you Exim's version number and some other information about which features are included. Replace Sendmail with Exim All the MUAs call /usr/sbin/sendmail to pass messages to the MTA. We want them to call Exim instead of Sendmail. 
---> We want programs to call exim rather than sendmail, but leave sendmail installed so that if there is any existing mail in sendmail's queue, it can be flushed later. Red Hat lets us choose a new MTA by setting a symlink in the /etc/alternatives directory. We redirect the programs 'sendmail' and 'mailq' to point to exim. 
# cd /etc/alternatives 
    # rm mta
 # ln -s /usr/exim/bin/exim mta 
# rm mta-mailq 
    # ln -s /usr/exim/bin/exim mta-mailq 
---> Now try that basic test again, but this time using the standard path name: 
$ /usr/sbin/sendmail -bV
     You should get the same output as before, which shows that Exim is now being used instead of Sendmail. 
    
Testing Exim
 If you are doing a real installation on a live system, you might want to work on the configuration and do lots of testing before removing Sendmail and replacing it with Exim. Test the standard installation and configuration 
 ---> To save typing, adjust your PATH variable so that the command exim can be used to run the Exim binary. Take great care when you do this, because messing up your PATH will make many commands ``vanish''. Type this command exactly, taking care with the colon and dollar in the middle: 
$ export PATH=/usr/exim/bin:$PATH 
Make sure you substitute a real local user name for localuser in what follows. Remember, you should not be root when running these tests. 
First, check what Exim will do with a local address: 
$ exim -bt localuser
     This tests the delivery routing for a local account. See what output you get. 
     Try with a non-existent local user and see what happens: 
$ exim -bt junkjunkjunk

 ---> Try something that is in /etc/aliases: $ exim -bt postmaster Exim will not normally deliver mail to a root mailbox (for security reasons) so what people usually do is to make root an alias for the sysadmin. In Red Hat, all the default aliases point to root. Therefore, you should add a new alias to /etc/aliases. Add this line at the end: # Person who should get root's mail root: yourname Now try this again: $ exim -bt postmaster ---> Now we are going to try a real local delivery. You can pass a message directly to Exim without using an MUA: $ exim -v -odf localuser This is a test message. . Note: the message is terminated by a line that just contains a dot. Be sure to type it! (Alternatively, you can send ``end of file'' by pressing CTRL-D.) The -v option turns on user verification output, which shows you copies of Exim's log lines. The -odf option requests `foreground' delivery, which means that the exim command won't return until the delivery is complete. (This avoids your shell prompt getting mixed up with Exim's output.) ---> Check what is in Exim's logs: $ cat /var/spool/exim/log/mainlog $ cat /var/spool/exim/log/paniclog The panic log should normally be empty, and if nothing has ever been written to it, it will not even exist. Tip: On a live system it is helpful to set up a cron job that mails you a warning if it ever finds a non-empty panic log. If you get a permission error, make sure that your username is in the 'exim' group, then logout and login again to become a member of that group. If the delivery succeeded, you should see two lines in the main log, one containing <= for the message arriving, and one containing => for the delivery. ---> Now go check the local user's mailbox: $ ls -l /var/spool/mail/localuser $ cat /var/spool/mail/localuser If the delivery didn't succeed, you need to find out why. If the information in the log doesn't help, you can try the delivery again, with debugging turned on: $ exim -d -odf localuser <there will be output from Exim here> This is another test message. . The -d option turns on debugging, which gives a lot more information than -v. You need to be an Exim administrator to use -d. If you get a `Permission denied' error, check that you are a member of the Exim group. ---> If you are logged on as localuser, you can use the mail command to read the mail in the usual way. You could also try sending a message from the mail command. The next thing is to test whether Exim can send to a remote host. The speed of this may vary, depending on the state of the network connection. In what follows, replace user@remote.host with your home email address. ---> First, check that Exim can route to the address: $ exim -bt user@remote.host ---> Now send a message to the remote address: $ exim -v -odf user@remote.host This is a test message. . This time, the -v option causes Exim to display the SMTP dialogue as well as the log lines. If you can, check that the message arrived safely. If there are problems, see if you can figure out what went wrong and why. ---> You won't be able to receive messages from a remote host until you start the Exim daemon: $ /usr/exim/bin/exim -bd -q20m The -bd option causes the daemon to listen for incoming SMTP calls, and the -q20m option causes it to start a queue runner process every 20 minutes. On a live system, starting the daemon should happen automatically on a reboot, by putting this command in /etc/rc.local . ---> Use telnet to check that the daemon is accepting SMTP calls: $ telnet localhost 25 You should see an Exim greeting message. Use QUIT to exit. ---> Now check that a remote host can send a message to your host, and see how Exim logs what happens. If that succeeds, you have a working basic installation correctly installed. ---> Try sending to an invalid address from a remote host, and see what error message you get, and how Exim logs this case. Look in bothmainlog and rejectlog. Starting the Exim Monitor You need to have an X-windows session running to run the monitor. ---> Start the monitor: $ /usr/exim/bin/eximon The upper window shows a `tail' of the main log; the lower window shows the messages that are waiting in the queue. Expect both to be empty to start with. Send a few messages and watch what the monitor displays. Queue management tests There are several command line options (and equivalent menu items in the monitor) for doing things to messages. ---> To put a message on the queue without its being delivered, run $ exim -odq address1 address2 ... Test message. . The message stays on the queue until a queue runner process notices it. ---> List the messages on the queue: $ exim -bp ---> Do a manual queue run, with minimal verification output: $ exim -v -q (Without -v you won't see any output at all on the terminal, but there will be entries in the log.) Checking relay control ---> To demonstrate that Exim will relay by default via the loopback interface, try the following sequence of SMTP commands. Wait for Exim to respond to each command before typing the next one. Substitute the number of your pc for nn: $ telnet 127.0.0.1 25 ehlo localhost mail from:<localuser@pcnn.taller.nsrc.org> rcpt to:<localuser@pcnn.taller.nsrc.org> rcpt to:<user@some.remote.domain> You should get an OK response to all the SMTP commands. Type `quit' to end the SMTP session without actually sending a message. ---> Now try the same thing, but use your host's IP address instead of 127.0.0.1. $ telnet xx.xx.xx.nn 25 ehlo localhost mail from:<localuser@pcnn.taller.nsrc.org> rcpt to:<localuser@pcnn.taller.nsrc.org> rcpt to:<user@some.remote.domain> In this case, you should get the error message 550 relay not permitted for the second RCPT command, which is the one that is trying to relay. The first RCPT command should be accepted, because it specifies a local delivery. You could also try telnetting from an external host and running the same check. Processing log data ---> Run exigrep to extract all information about a certain message, or a certain user's messages, or messages for a certain domain. For example: $ exigrep localuser /var/spool/exim/log/mainlog That extracts all the log information for all messages that have any log line containing `localuser'. It's a Perl pattern match, so you can use Perl regular expressions. ---> To extract simple statistics from a log, run $ eximstats /var/spool/exim/log/mainlog | more There are options for selecting which bits you don't want. Details are in the manual. If you have time, experiment with the options for outputting the statistics as HTML. 3. Changing the configuration To change Exim's runtime configuration, you must edit /usr/exim/configure and then HUP the Exim daemon (as root). The daemon stores its process id (pid) in a file, in order to make this easy. This command restarts the daemon: # cat /var/spool/exim/exim-daemon.pid # kill -HUP nnnn where nnnn is the pid from the previous line. You can confirm that the daemon has restarted by checking the main log. You are going to be restarting Exim a lot, so make yourself a script to save typing. Use vi to create a file called /usr/local/bin/hupexim, containing these lines: #!/bin/bash kill -HUP $(cat /var/spool/exim/exim-daemon.pid) Note that the # character in the first line is part of the file (it's not a prompt). Now make the new file into an executable script: # chmod a+x /usr/local/bin/hupexim [!] If you are using the C-shell (csh) you must also run this command: # rehash This causes the internal hash table of the contents of the directories in the PATH variable to be recomputed. This is not necessary if you are using bash. Now you can restart Exim just by running: # hupexim The following sections contain some suggestions for configuration modifications that you can try, just to get a feel for how the configuration file works. You do not have to stick rigidly to these examples; use different domain names or user names if you want to. Adding more local domains ---> Edit the configuration, and change the local_domains setting so that it looks like this: domainlist local_domains = @ : testnn.nsrc.org where nn is the number of your host. Remember to HUP the daemon afterwards. Now you have a new local domain. Try sending it some mail: $ mail yourname@testnn.afnog.org Check that it arrives in your mailbox. [!] Note: The domains that we are adding now can only be used from your own host, because there are no DNS records for them. When you are adding domains to a production host, you must of course also add MX records for them. If you want to add a lot of domains, or if you want to keep changing them, it is easier to keep the list of domains in a file instead of in the Exim configuration. (You can also keep them in several different kinds of database, such as LDAP or MySQL, but we don't cover that in this workshop.) We are now going to add some domains like this, and then make them into virtual domains. ---> Use vi to create a file called /usr/exim/vdomains that contains a list of domains (as many as you like): vdom1.nsrc.org vdom2.nsrc.org ... ---> Edit /usr/exim/configure to change the local domains setting: domainlist local_domains = @ : testnn.nsrc.org : \ lsearch;/usr/exim/vdomains Note: There is no space following the semicolon. This change makes all the new domains into local domains. ---> Now we add a new router to handle these domains as virtual domains. Put this router first, before all the other routers, immediately after the line ``begin routers'': virtual_domains: driver = redirect domains = lsearch;/usr/exim/vdomains data = ${lookup{$local_part}lsearch{/usr/exim/aliases-$domain}} no_more There must be no space after the semicolon in the ``domains'' line. (Remember to HUP the daemon.) ---> Create an alias file for the first virtual domain -- use vi to make the file /usr/exim/aliases-vdom1.nsrc.org containing these lines: brian: b.candler@pobox.com yourname: your email address The local parts brian and yourname should now be valid for the first virtual domain. ---> Test that Exim recognizes the virtual addresses: $ exim -bt philip@vdom1.afnog.org Please don't actually send test mail to that address -- I get too much junk already! ---> Now create a different alias file for the second virtual domain, with brian aliased to somebody else, and check (with -bt) that Exim treats that address differently. Note: It is always important to test that incorrect addresses are handled the way you want. So you need to run this test: $ exim -bt unknown@vdom1.nsrc.org Catching undeliverable mail ---> Add a redirect router that sends all undeliverable mail in your domain to the postmaster. Where in the list of routers should this go? See if you can work out how to do this on your own without looking at the answer below. Do you think that having a router like this is a good idea on a busy host? Here is a sample router that does this job: unknown_to_postmaster: driver = redirect data = postmaster It should be placed last, after all the other routers. Test it by sending mail to an unknown user. 4. Relaying from another host In section 2 above, there is test to demonstrate that relaying is blocked if you connect to your host's IP address. ---> We are now going to remove this block by changing a line in the configuration to let all the classroom hosts relay through your host. Change this line: hostlist relay_from_hosts = 127.0.0.1 to hostlist relay_from_hosts = 127.0.0.1 : xx.xx.xx.xx/mm where xx.xx.xx.xx/mm is the classroom network. (Don't forget to HUP the daemon.) Then try the telnet test from section 2 again. This time it should accept the request to relay. Ask one of the other students to try relaying through your host -- it should work. If you can, telnet from a host outside the classroom network, and confirm that relaying is still blocked. Allowing relaying to specific domains The default configuration contains the line domainlist relay_to_domains = This defines domains to which your host will relay, wherever the message comes from. As you can see, the default list is empty, so no domains match. ---> Add some domains to this line. For example, add the domain of your home email. In my case, this would be: domainlist relay_to_domains = pobox.com Now we need to test that Exim will indeed relay to those domains (but not to others) from a host that does not matchrelay_from_hosts. Exim has a testing facility that lets you simulate an SMTP call from a remote host. Run it like this: $ exim -bh 192.168.1.1 You will see some debugging output, and then an SMTP greeting line. Now type SMTP commands, waiting for a response between each one: ehlo testhost mail from:<localuser@pcnn.taller.nsrc.org> rcpt to:<user@your.home.domain> rcpt to:<user@some.other.domain> You will see the tests that Exim is making as it runs the ACL after each RCPT command. Check that it allows relaying to the right domains, and not to any others. End the SMTP session with QUIT. 5. More advanced configuration These are ideas for things to do for those who have time. Don't worry if you do not get to this part. Not everything here is covered in the lectures, but it is all in the manual and Philip Hazel's Exim 4 book. Demonstrate retry mechanisms The easiest way to demonstrate what happens when Exim cannot deliver a message is to force connections to remote hosts to fail. ---> Edit the configuration, and change the remote_smtp transport to be like this: remote_smtp: driver = smtp port = 3456 (Remember to HUP the daemon.) This makes Exim try port 3456 instead of the SMTP port (25) when delivering, causing the remote host to refuse the connection (assuming you've chosen an unused port!) ---> Send a message to a remote address and see what happens. ---> Start a queue run $ exim -q and see what happens and what gets logged. Have a look at the message's own msglog file, which you can do from the monitor or by using the -Mvl option. For example: $ exim -Mvl 19EdUm-00016A-IA (That is an example message ID; you must use the real one for the message that is on your queue.) ---> Use exinext to see when Exim is next scheduled to deliver to the host that failed: $ exinext remote.domain ---> Remember to remove the setting of port when you have finished playing with retries (and HUP the daemon). Add a system filter ---> Use vi to create a test system filter file in /usr/exim/system.filter, containing these lines: # Exim filter if $h_subject: is "spam" then save /dev/null endif ---> Arrange for Exim to use the system filter by adding these lines to the configuration (somewhere near the beginning, before the first ``begin'' line): system_filter = /usr/exim/system.filter system_filter_file_transport = address_file ---> Now send yourself a message with the subject `spam' and see what happens. Configure some address rewriting ---> Find the rewriting section of the configuration (the part that starts with ``begin rewrite''). Then add this line: othernameotherdomain.com postmasteryour.domain ---> Now send a message to othername@otherdomain.com and see what happens. ---> You can test rewriting rules with the -brw command line option: $ exim -brw othername@otherdomain.com Common mistakes These are the most common mistakes that have been made: Doing everything as root. You only need to be root to install Exim and change its configuration. Otherwise, you should do everything (including building Exim) under your normal login. In the sample commands, the command prompt is shown as # for commands that must be run as root, and $ otherwise.In particular, running email tests as root is a bad idea, because root has privileges. You want to test that Exim is working when an ordinary, unprivileged user calls it. Forgetting the dot that terminates a message. When you type a message directly into Exim, it needs a line containing just a dot to terminate it. Until you type that line, all input is taken as part of the message. Setting PATH incorrectly. Whenever you change your PATH setting, be sure to check what you have typed carefully before pressing RETURN. If you mess up with PATH, you'll find that lots of commands ``disappear''. Adding dots to email domains. You should now have got used to inserting trailing dots in fully qualified domains in DNS zones. Unfortunately, in email configurations, trailing dots are not used and will cause problems if you use them. 

exim 550 relay not permitted Webuzo Squirrel Fix

exim 550 relay not permitted error can be happened when you set squirrel mail config wrong , especially if you set 'localhost' as imap / smtp server.
Solution: edit config.php to be your true dns host domain.

Change SQUIRREL MAIL CONFIG:
/home/soft/www/squirrelmail/config/config.php

edit :

to become :

$smtpServerAddress = 'smtp.yourdomain.com';
$smtpPort = 25;
$use_smtp_tls = false;
$smtp_auth_mech = 'none';
$smtp_sitewide_user = '';
$smtp_sitewide_pass = '';
$pop_before_smtp = false;
$pop_before_smtp_host = '';

$imapServerAddress = 'imap.yourdomain.com';
$imapPort = 143;
$imap_server_type = 'dovecot';
$use_imap_tls = false;
$imap_auth_mech = 'login';



Then check your DNS entry for your main domain.
should  have:


imap 14400 IN A 192.6.162.148
smtp 14400 IN A 192.6.162.148

whereas 192.6.162.148 is your public ip of your vps.

Also, set Email Settings in Webuzo admin interface to use Exim smtp server
username: arealuseraccount@yourdomain.com
password: 12345678
port: 25
host: smtp.yourdomain.com

Bash find syntax

 Find syntax

[icon]
   

This section requires expansion.(August 2008)

find [-H] [-L] [-P] path... [expression]

The three options control how the find command should treat symbolic links. The default behaviour is never to follow symbolic links. This can be explicitly specified using the -P flag. The -L flag will cause the find command to follow symbolic links. The -H flag will only follow symbolic links while processing the command line arguments. These flags are not available with some older versions of find.

At least one path must precede the expression. find is capable of interpreting wildcards internally and commands must be constructed carefully in order to control shell globbing.

Expression elements are whitespace-separated and evaluated from left to right. They can contain logical elements such as AND (-a) and OR (-o) as well as more complex predicates.

The GNU find has a large number of additional features not specified by POSIX.
[edit]POSIX protection from infinite output

Real-world filesystems often contain looped structures created through the use of hard or soft links. The POSIX standard requires that

The find utility shall detect infinite loops; that is, entering a previously visited
directory that is an ancestor of the last file encountered. When it detects an infinite
loop, find shall write a diagnostic message to standard error and shall either recover
its position in the hierarchy or terminate.

[edit]Examples
[edit]From current directory

find . -name 'my*'

This searches in the current directory (represented by the dot character) and below it, for files and directories with names starting with my. The quotes avoid the shellexpansion — without them the shell would replace my* with the list of files whose names begin with my in the current directory. In newer versions of the program, the directory may be omitted, and it will imply the current directory.

Note that for RedHat Linux Version 9: find . -name my* returns this error find: paths must precede expression. Double quotes find . -name "my*" works fine.
[edit]Files only

find . -name "my*" -type f

This limits the results of the above search to only regular files, therefore excluding directories, special files, pipes, symbolic links, etc. my* is enclosed in quotes as otherwise the shell would replace it with the list of files in the current directory starting with my...
[edit]Commands

The previous examples created listings of results because, by default, find executes the '-print' action. (Note that early versions of the find command had no default action at all; therefore the resulting list of files would be discarded, to the bewilderment of users.)

find . -name "my*" -type f -ls

This prints extended file information.
[edit]Search all directories

find / -name "myfile" -type f -print

This searches every file on the computer for a file with the name myfile and prints it to the screen. It is generally not a good idea to look for data files this way. This can take a considerable amount of time, so it is best to specify the directory more precisely. Some operating systems may mount dynamic filesystems that are not congenial to find.
[edit]Search all but one directory subtree

find / -path excluded_path -prune -o -type f -name myfile -print

This searches every folder on the computer except the subtree excluded_path (pull path including the leading /), for a file with the name myfile. It will not detect directories, devices, links, doors, or other "special" filetypes.
[edit]Specify a directory

find /home/weedly -name "myfile" -type f -print

This searches for files named myfile in the /home/weedly directory, the home directory for userid weedly. You should always specify the directory to the deepest level you can remember.
[edit]Search several directories

find local /tmp -name mydir -type d -print

This searches for directories named mydir in the local subdirectory of the current working directory and the /tmp directory.
[edit]Ignore errors

If you're doing this as a user other than root, you might want to ignore permission denied (and any other) errors. Since errors are printed to stderr, they can be suppressed by redirecting the output to /dev/null. The following example shows how to do this in the bash shell:

find / -name "myfile" -type f -print 2>/dev/null

If you are a csh or tcsh user, you cannot redirect stderr without redirecting stdout as well. You can use sh to run the find command to get around this:

sh -c find / -name "myfile" -type f -print 2>/dev/null

An alternate method when using csh or tcsh is to pipe the output from stdout and stderr into a grep command. This example shows how to suppress lines that contain permission denied errors.

find . -name "myfile" |& grep -v "Permission denied"

[edit]Find any one of differently named files

find . \( -name "*jsp" -o -name "*java" \) -type f -ls

The -ls option prints extended information, and the example finds any file whose name ends with either 'jsp' or 'java'. Note that the parentheses are required. Also note that the operator "or" can be abbreviated as "o". The "and" operator is assumed where no operator is given. In many shells the parentheses must be escaped with a backslash, "\(" and "\)", to prevent them from being interpreted as special shell characters. The -ls option and the -or operator are not available on all versions offind.
[edit]Execute an action

find /var/ftp/mp3 -name "*.mp3" -type f -exec chmod 644 {} \;

This command changes the permissions of all files with a name ending in .mp3 in the directory /var/ftp/mp3. The action is carried out by specifying the option -execchmod 644 {} \; in the command. For every file whose name ends in .mp3, the command chmod 644 {} is executed replacing {} with the name of the file. The semicolon (backslashed to avoid the shell interpreting it as a command separator) indicates the end of the command. Permission 644, usually shown as rw-r--r--, gives the file owner full permission to read and write the file, while other users have read-only access. In some shells, the {} must be quoted.

Note that the command itself should *not* be quoted; otherwise you get error messages like

find: echo "mv ./3bfn rel071204": No such file or directory

which means that find is trying to run a file called 'echo "mv ./3bfn rel071204"' and failing.

If running under Windows, don't include the backslash before the semicolon:

find . -exec grep blah {} ;

If you will be executing over many results, it is more efficient to pipe the results to the xargs command instead. xargs is a more modern implementation, and handles long lists in a more intelligent way. The print0 option can be used with this.

The following command will ensure that filenames with whitespaces are passed to the executed COMMAND without being split up by the shell. It looks complicated at first glance, but is widely used.

find . -print0 | xargs -0 COMMAND

The list of files generated by find (whilst it is being generated) is simultaneously piped to xargs, which then executes COMMAND with the files as arguments. Seexargs for more examples and options.
[edit]Delete files and directories

Delete empty files and directories and print the names

find /foo -empty -delete -print

Delete empty files

find /foo -type f -empty -delete

Delete empty directories

find /foo -type d -empty -delete

Delete files and directories (if empty) named bad

find /foo -name bad -delete

Warning: -delete should be use with other operators such as -empty or -name.

find /foo -delete  (this deletes all in foo)

[edit]Search for a string

This command will search for a string in all files from the /tmp directory and below:

find /tmp -exec grep "search string" '{}' /dev/null \; -print

The /dev/null argument is used to show the name of the file before the text that is found. Without it, only the text found is printed. An equivalent mechanism is to use the "-H" or "--with-filename" option to grep:

find /tmp -exec grep -H "search string" '{}' \; -print

GNU grep can be used on its own to perform this task:

grep -r "search string" /tmp

Example of search for "LOG" in jsmith's home directory

find ~jsmith -exec grep "LOG" '{}' /dev/null \; -print
/home/jsmith/scripts/errpt.sh:cp $LOG $FIXEDLOGNAME
/home/jsmith/scripts/errpt.sh:cat $LOG
/home/jsmith/scripts/title:USER=$LOGNAME

Example of search for the string "ERROR" in all XML files in the current directory and all sub-directories

find . -name "*.xml" -exec grep "ERROR" '{}' \; -print

The double quotes (" ") surrounding the search string and single quotes (' ') surrounding the braces are optional in this example, but needed to allow spaces and other special characters in the string.
[edit]Search for all files owned by a user

find . -user <userid>

[edit]Search in case insensitive mode

find . -iname "MyFile*"

If the -iname switch is not supported on your system then workaround techniques may be possible such as:

find . -name "[mM][yY][fF][iI][lL][eE]*"

This uses Perl to build the above command for you:

echo "'MyFile*'" |perl -pe 's/([a-zA-Z])/[\L\1\U\1]/g;s/(.*)/find . -name \1/'|sh

[edit]Search files by size

Example of searching files with size between 100 kilobytes and 500 kilobytes.

find . -size +100k -a -size -500k

Example of searching empty files.

find . -size 0k

Example of searching non-empty files.

find . -not -size 0k

[edit]Search files by name and size

find /usr/src -not \( -name "*,v" -o -name ".*,v" \) '{}' \; -print

This command will search in the /usr/src directory and all sub directories. All files that are of the form '*,v' and '.*,v' are excluded. Important arguments to note are:

   -not means the negation of the expression that follows
   \( means the start of a complex expression.
   \) means the end of a complex expression.
   -o means a logical or of a complex expression.
      In this case the complex expression is all files like '*,v' or '.*,v'

for file in `find /opt \( -name error_log -o -name 'access_log' -o -name 'ssl_engine_log' -o -name 'rewrite_log' -o
-name 'catalina.out' \) -size +300000k -a -size -5000000k`; do cat /dev/null > $file; done

The units should be one of [bckw], 'b' means 512-byte blocks, 'c' means byte, 'k' means kilobytes and 'w' means 2-byte words. The size does not count indirect blocks, but it does count blocks in sparse files that are not actually allocated.
[edit]Operators

Operators can be used to enhance the expressions of the find command. Operators are listed in order of decreasing precedence:

    ( expr ) Force precedence.
    ! expr True if expr is false.
    -not expr Same as ! expr.
    expr1 expr2 And (implied); expr2 is not evaluated if expr1 is false.
    expr1 -a expr2 Same as expr1 expr2.
    expr1 -and expr2 Same as expr1 expr2.
    expr1 -o expr2 Or; expr2 is not evaluated if expr1 is true.
    expr1 -or expr2 Same as expr1 -o expr2.
    expr1 , expr2 List; both expr1 and expr2 are always evaluated. The value of expr1 is discarded; the value of the list is the value of expr2.

find . -name 'fileA_*' -or -name 'fileB_*'

This command searches files whose name has a prefix of "fileA_" or "fileB_" in the current directory.

find . -name 'foo.cpp' -not -path '.svn'

This command searches for files with the name "foo.cpp" in all subdirectories of the current directory (current directory itself included) other than ".svn".

Webuzo Squirrel Mail, Exim and Dovecot Problem Fix

Webuzo Free Control Panel Notes.

Create a new email user first.

Squirrel Mail , try not using https first.
If you can not login, try to check dovecot was installed or not. If Dovecot was installed, but still can not login, try to add new DNS Zone records like this:

imap 14400 IN A 192.3.111.111
smtp 14400 IN A 192.3.111.111

save and restart named and dovecot services.

You should be able to login to Squirrel now.

Try to test sending a mail, to outside domain's mail and cc to  your email too.

If you get error SMTP, SMTP server in webuzo use Exim.

Set the Email Settings menu in webuzo admin first. Use SMTP , not PHP Mail. Guides here: http://webuzo.com/wiki/Add_Email_Account

In SMTP setting:
set them like this:
username:you@yourdomain.com  that you have created before
password:the password of  you@yourdomain.com  that you have created before
port:25
host:localhost

shoot a test mail again from inside of squirrel mail. Should have done now.

This is just a quick note when I try to install webuzo in centos 6 x64. Sorry I can not write better.
If you any questions, feel free to ask me here.