Mail Toaster Changes

5.51 - Mar 28. 2014

removed Apache support
removed config settings for qmailadmin install dirs (use default)

5.50 - Sep 17, 2014

added encoding declaration in docs/Changes.pod

5.49 - Sep 11, 2014

updated t/Utility.t to check for perl process (was 'init')

5.48 - Sep 10, 2014

fix POD error in Mail/Toaster/Setup/Test 
bump version number
remove ispell/aspell from port install (renamed in ports)

5.47 - May 20, 2014

fix for qpop3d not having service symlink installed
added CHKUSER_MBXQUOTA to tcp.smtp
apply utmp patch to FreeBSD 9 & 10 (was only 9)

5.46 - Apr 24, 2014

test fix in t/Apache.t

5.44 - Apr 20, 2014

speed up dspam training
added supervise support for qpsmtpd
added support for unusual (intl) file name characters
correct detection of pop3 daemon
updated install_deps.pl
added simscan debug option in tw.conf
added qmail-deliverable setting and build support

5.43 - Jul NN, 2013

minor improvements to test suite

5.42 - Jul 07, 2013

replace bunches of /var/log/mail with get_log_dir
consolidate tcp.smtp functions to setup->tcp_smtp
lazy load some modules, so 'make test' runs w/o dependencies
added supervise/run file creation for qmail-deliverabled and vpopmaild
moved email_send* tests from Toaster to Setup/Tests.pm
replaced hard coded vpopmail dir with $vpopmail->get_vpop_dir
replaced many hard coded '/var/qmail' paths with $qmail->get_qmail_dir
install tcp.smtp during tests, if missing
conf: removed vpopmail_enable_netblocks option (barely used, if at all)
abstracted some code into new control_sql method
added get_control_dir, get_supervise_dir (reduce duplicated code)
deleted Qmail::check_control (moved logic into qqtool.pl)
changed API of service_dir_get (1 positional arg)
updated port options for sqlite3 & openssl
fixes for audit & error logging

5.41 - Jul 04, 2013

config changes: vpopmaild disabled, roaming users disabled,
    default log method changed from multilog to syslog
automatic startup for vpopmaild
removed maillogs postprocessor support (fragile)
vpopmail port install now honors most config settings

5.40 - Apr 26, 2013

updated install_deps.pl
pod cleanups
updated contrib/swaks
training improvements for dspam

5.38 - Apr 23, 2013

removed Proc::ProcessTable (causes test failures)
handfuls of Test::More tweaks
disabled defunct RBLs in config

5.37 - Apr 18, 2013

added bin/email_restore.pl (thx Alex R.)
pkgng support additions (Rob Lensen)
some support for running with qpsmtpd

5.35 - Oct 23, 2012

api change for get_dir_files, clean_tmp_dir, file_delete
moved subs from Toaster to Utility: audit, error, dump_audit, dump_errors, has_module, find_config, find_readable, get_std_args, parse_config & parse_line
replaced non-ASCII • with *
added IO::Socket::SSL to bin/install_deps
check just the 'standard' places for httpd.conf instead of using `find $dir`
apache test failed if no httpd.conf found on test machines, this is quite likely. The lack of finding the file now skips the test.
more argument unpacking with get_std_args
toaster-watcher attempts to create missing service dirs
added 'quiet' to %std_args (was manually passing it around)
removed qmail_service_* settings

5.33 - Oct 13, 2012

updated path to maildir-deliverquota
updated path to freshclam.log
added more support for qpsmtpd future
added vpopmail_daemon setting to tw.conf
added supervise support for qpsmtpd, vpopmaild, and qmail-deliverable daemons.
get_maildir_messages now uses File::Find instead of `find …`
deprecated rfc-ignorant DNSBLs
replaced split '..' with split /../ syntax

5.32 - Aug 19, 2012

fix for spamassassin mysql import on MySQL 5.5+
added qmail utmpx patch for compat. with FreeBSD 9
increase RAM for daemons (for 64-bit systems)
qmail: fixed chkuser build support for vpopmail extensions
dspam: added to mailfilter
dspam: only train on error
improved build support on Darwin (Mac OS X)
added support for dovecot 2

5.30 - Sep 26, 2011

Apache Config Changes
   shortened config file comments
   removed IfModule ssl_module from apache config file
   added vqadmin declaration
   removed deprecated apacheconf build target
   default config password protects ezmlm.cgi, isoqlog, vqadmin, phpmyadmin
   http auth files use Digest authentication, for both lighttpd and apache
   add .cgi handler to apache vhost
   add qmailadmin http alias, so graphics will load if docroot is not default
   automatically add pear include path to php.ini, used by squirrel mail
   added munin declarations in apache config
updated horde web address, added apache config settings for horde
added periodic (cron) task for dccd cleanup (if installed)
build updates for lighttpd
removed php4 build support
updates for roundcube webmail support
added portmaster build target
added gnupg install to spam assassin build (used by sa-update)
moved rrdtool install from munin into its own sub
added maildrop build option for vpopmail build
added squirrelmail sasql plugin configuration
isoqlog build did not install config file, fixed
update ezmlm-idx build for v7
remove mysql db type, future mysql versions use a different syntax
added qmailadmin catchall preference, defaults to disabled
added horde support to lighttpd config
give smtpd and pop3 processes more RAM (better accomodate 64bit)
reduce default multilog file size from 1M to 100k
change user=matt to 'valid-user' in http config

5.29 - Jun 12, 2011

updated migrate script for compatibility with 5.26 changes
updated lighttpd.conf config file location (FreeBSD port change)
reverted simscan user back to clamav (works more reliably)
if a perl module is already installed, prompt to reinstall

5.28 - Jan 03, 2011

detect location of maillogs when configuring /etc/mailer.conf
allow building qmail with no patches
explicitly include a few more perl modules required by SpamAssassin
automatically password protect isoqlog in apache vhost file
'maillogs yesterday' exits 0, so periodic is content
t/Utility: test if file exists before testing ability to delete

5.27 - Jul 08, 2010

style updates to Ezmlm.pm and fix test failures in t/Ezmlm.t
maillogs fails more gracefully when the log files are unreadable
POD doc cleanups
fixed inverted regexp match that caused control/me to be set to the system
  hostname instead of toaster-watcher.conf configured value
added URI to prereq list in Makefile.PL
skip rbl tests if client can't resolv bl.spamcop.net properly
FreeBSD->is_port_installed does a better job of port detection when there
  are multiple ports with similar names (qmail, qmailanalog, etc)
corrected whitespace related test error in get_list_of_rbls test
added install_munin to toaster-watcher.conf
fixed 'maillogs yesterday' report
other minor cleanups for PBP and cleaner 'make test' results

5.26 - Jun 31, 2010

added php build and post-install config (php.ini) support for freebsd
replaced inline squirrelmail config with local overrides
added build and post-install config support for lighttpd
added sqlite build option for roundcube when install_mysql = 0
added t/01.syntax (syntax checks for bin/*, lib/*, cgi_files/ezmlm.cgi)
renamed port_install to install_port (see DEVELOP)
added munin install support and configuration
updated t_setup -s mailtoaster target (from $util-> to $toaster->)
cleaned up more debug and log messages
changed API for cwd_source_dir, chown, extract_archive, get_url, is_readable,
  is_writable, check_pidfile, install_package
changed some builtin chown calls to using $util->chown
renamed util->file_get to util->get_url
renamed util->file_archive to archive_file
renamed util->pidfile_check to check_pidfile
renamed M:T:U:archive_expand to extract_archive
for objects in classes beneath Mail::Toaster:
  new objects inherit debug and fatal settings from the Mail::Toaster object
  when loading a M:T:Utility, use $toaster->get_util instead of loading
  when a method is run, it can inherit its parents values for debug and
    fatal by adding %std_opts to its own parameter validation
  removed hundreds of places where debug settings were explicity passed.
renamed M:T:F:package_install to install_package
renamed M:T:F:ports_update to update_ports
fixed vqadmin install directories (due to change in FreeBSD port)
util->get_my_ips is done in perl now, instead of using CLI cut & grep
added config questions for squirrelmail, roundcube, spamassassin, and
  phpMyAdmin database passwords (requested by Carmi)
updated Ezmlm.pm and ezmlm.cgi
t_setup.pl -s webmail will try to find the cgi_files folder before error

5.25 - Jun 10, 2010

added M:T:get_util & get_config methods (rathan than having other classes accessing the object data.
removed $conf from calls to M:T:U:install_from_source
M:T:Apache::start method is more reliable
split M:T:Setup::config into config_ methods
renamed M:T:FreeBSD::rc_dot_conf_check to conf_check, and added file option
  can be used to add entries to other config files, like make.conf now
first argument to M:T:Utility::find_bin and syscmd are positional
default vpopmail version is now 'port'
new M:T objects include a $util object (it's usually loaded anyway)
pass in $toaster objects when instantiating M:T subclasses
added log and error methods to $toaster class, used by all subclasses
removed M:T:Perl, replaced by methods in $util
added freebsd port options for dovecot and roundcube
abstracted Qmail::netqmail into several methods
added qmail_openssl_ciphers option (thanks Craig Green).
fixed URL to patches directory on www.tnpi.net
install_portupgrade now defaults to off, install_portmaster added
subscribeIMAP.sh test was fatal, now installs if missing
M:T:DNS and t/DNS.t upgraded with better error handling and status reporting
removed M:T:Passwd, replaced with simpler methods in M:T:Qmail
removed qmail_(users) from toaster-watcher.conf (still honored if set)
in t/Qmail.t, service_dir_get tests are non-fatal now
changed IP used in RBL tests (my mail server got whitelisted?!)
changed API for file_read, file_write, file_archive, is_port_installed,
  install_port (first arg is filename)
dovecot.conf altered using search/replace function instead of patch
after installing spamassassin, run 'sa-update' to initialize
create a single SSL cert and use it for qmail, dovecot, courier, apache
courier imap startup scripts that broke due to FreeBSD changes are detected
  and fixed. rc.conf values are automatically updated by toaster_setup.pl
default cgi-bin location changed to www/cgi-bin.toaster (statically defined
  will avoid problems when ports opt to install cgi-bin, or cgi-bin.default,
  or cgi-bin-default, or whatever comes next)
qmail_openssl_ciphers renamed openssl_ciphers. Used with Apache as well.
reworked and updated the tests for better reporting and less code
added config for roundcube: creates mysql db, user, and updates configs
added negative smtp-auth test, make sure only valid auth works
reworked bin/toaster-watcher.pl, greatly simplified structure.
many changes in Mail::Toaster.pm, focused on brevity and legibility (-500 l)
improved debug/status event reporting. Now mostly silent (unless -v) until
  something errs, then it reports the audit and error logs
consolidated Qmail restart functions into one 'restart' method (-200 l)
moved log rotation, compression, and cleanup from maillogs to toaster-watcher
refinements to logging and setup of supervised services (-300 l)
moved sqwebmail cleancache invocation to toaster-watcher
deprecated toaster_os_release from tw.conf
updated sourceforge URL
added support for lighttpd

5.15 - Sep 21, 2009

added missing valias to vpopmai port install
replaced a couple vpopmail_qmail_extensions calls with vpopmail_qmail_ext
remove some debugging info from toaster_setup -s toaster

5.14 - Apr 12, 2009

remove blank entries from ordered rbl blacklists where ordering was
  not strictly sequential.
ucspi mysql support is based on vpopmail_mysql instead of install_mysql
update vpopmail version to 5.4.27
use vpopmail from /usr/ports/disfiles if available (instead of d/l)
updated Utility.pm to latest from P:U, main feature is better error handling
install Mail::SPF instead of Mail::SPF::Query
added install_mysqld config setting, can install mysql client w/o server
renamed config vpopmail_qmail_extensions to vpopmail_qmail_ext (match --config)
deleted jail_create, delete, get_hostname, start functions (deprecated)
removed base from install_port calls, deprecated
removed qmailscanner support
removed rrdutil support
removed legacy CGI applications
deprecated cvsup based functions. Use portsnap and freebsd-update instead.
api for ask and yes_or_no changed, slightly
updated bin/install_deps
updated bin/install_deps.pl
removed InstallMysqlTool, and with_linuxthreads from MySQL.pm
perl seems to default to installing scripts in bin now instead of sbin, add
    checks to detect where scripts are installed.
updates to make courier, sqwebmail, and simscan install from ports correctly
vpopmail.mysql gets updated when -s vpopmysql target is run
added munin support to M::T Webmail
default simscan user is now simscan (was clamav). clamav user is a member of
  qmail group now, which is the group owner of the simscan dir.
updated list of RBLs

5.13 - Oct 19, 2008

packaging updates:
  removed 'use lib "inc"'
  changed #!/usr/bin/perl to #!perl (for portability)
  commented out warnings pragma in tests

5.12 - Oct 17, 2008

tweaks to t/Utility.t so tests pass on systems w/o sudo installed
ripped out Provision.pm, bin/sysadmin, bin/useradmin, bin/webadmin
ripped out Build.PL & inc/*
bumped toaster_os_release to 7.1 in t-w.conf
updated META.yml
Makefile.PL, removed Mail::Toaster dependency
removed portsdb from portsnap sub and 'all' target
install_deps.pl installs a few more dependencies
removed openssl stable bits from -s pre target
perl modules have #!perl instead of a full path to perl (portability)
moved $VERSION to top of modules, help remind me to update it
removed contrib/netqmail-* patches (installer fetches them from
  mail-toaster.org/patches), so can anyone else
License in bin/migrate.pl was perl artistic, made BSD for consistency
removed contrib/mailfilter (it's autogenerated) and contrib/pkgtools.conf

5.11 - Aug 20, 2008

use current (instead of stable) openssl port
added test for permissions on toaster.conf
added =head1 VERSION to modules
rewrote bin/install_deps.pl in perl (was sh)
Toaster.pm loads in $conf when ->new is called.
Setup.pm loads in $conf from $toaser->{conf}
renamed pop3_ip_address_listen_on to pop3_listen_on_address
 in toaster-watcher.conf
created _set_config accessors in Qmail.pm and Setup.pm
renamed $utility to $util globally
bumped (c) year to 2008
install_sqwebmail defaults to 0 now
net_snmpd defaults to v5 now
updated dovecot.conf patch to v1.1.3
deleted Setup->mattbundle

5.10 - Apr 17, 2008

disable apache2_fixups until it can be fixed
renamed item_installdsacert to item_install_dsa_cert
update copyrights to 2008
added the function "get_yesterdays_smtp_log" which provides the same functionality
  as get_yesterdays_send_log. -- patch from Georg von Itzenplitz
Mysql.pm - honor $debug setting in DBD & DBD install subs

5.09 - Nov , 2007

playing Kwalitee (http://cpants.perl.org/highscores/)
added 'use warnings' pragma to several modules
updated Copyright dates to 2007
Build.PL - added several modules to build_requires
t/DNS.t - added suffixes to tests to more easily identify exactly which test failed.
updated inc/Module/Install to 0.68
CGI.pm - renamed only sub to _only
Mysql.pm - package install logic was forcing package install
Setup.pm - updated dovecot patch so it applies cleanly to 1.0.7
         - don't pass mysql args to FreeBSD port install, no loger
           necessary and doing so causes port build to fail
Utility.pm - added missing pod doc for file_mode

5.08 - Nov 21, 2007

tw.conf: added rbl psbl.surriel.com
tw.conf: added rwl list.dnswl.org
DNS.pm - adjust the RBL positive tests to accommodate pattern used by dnswl.org
Qmail.pm - smtp_set_rbls invoked get_list_of_rwls incorrectly (Bugz #3)
t/qqtool.t & toaster_setup.t - run the script using the same version of
  perl as the test is being run as. - (for CPAN testers)
t/Logs.t - see if syslog's mail.log exists before testing against it
t/Utility.t - only run network tests on darwin and FreeBSD (for now).

5.07 - Oct 19, 2007

qmail_toaster_patch_version = 3.1
missing \ in qmail-pop3d/run file caused pop3 not to run
updated logmonster download URL
rrdtool port moved from net to databases
snmpd rc.d file can be named snmpd or snmpd.sh
ucspi-tcp source install, updated patch format
only pass vpopmail mysql defines if selected (port now checks this)

5.06 - Sep 19, 2007

Added bin/swaks
Added bin/audit.pl
Added bin/install_deps.sh
Changed several default values in tw.conf:
  toaster_os_release to RELENG_6_2
  simscan_received = 0
  qmail_toaster_patch_version = 3.2
  install_vpopmail = 5.4.17
  install_php = 5
  install_dovecot = 1.0.2 (Linux only)
Install OpenSSL stable port by default
Updated dovecot.conf patch
Added ./configure to dovecot source install
rewrote install_squirrelmail sub
only test submit service if its selected.
format the service/run files for easier legibility
Check permissions on toaster-watcher.conf file
Don't ask about mysql package if package install selected
Always run portsnap fetch update when ports_update is called
Source installs for dovecot, ripmime, ucspi-tcp, and
  rrdtool were passing an invalid patches value.
Altered netstat invocation on Linux so it works reliably
Only test snmp if it is enabled
Put the contents of "openssl ciphers" into
  /var/qmail/control/tlsserverciphers. Should resolve some
  openssl issues.

5.05 - Feb 7, 2007

Extensive updates for Darwin and Linux platforms
Support for Yahoo DomainKeys
Fixed -s allspam target (thanks Georg)
Support for dovecot IMAP/POP3 server

toaster-watcher.conf
  - added install_gnupg option
  - added install_dovecot option (alternative to courier-imap)
  - added qmail_domainkeys option
  - added smtpd_verbose, pop3_verbose, submit_verbose options (adds -v flag
     to tcpserver in */run files)
  - replaced sbl_xbl.spamhaus.org with zen.spamhaus.org

Apache.pm
  - added DirectoryIndex index.php declaration to PHP webmail apps in
    apache/Includes/mail-toaster.conf
  - added v-webmail Alias and Directory declarations
  - enable v-webmail Alias by default in apache include

Darwin.pm
  - turned debugging off in syscmd call in port install sub

FreeBSD.pm
  - port location of portupgrade updated (sysutils->ports-mgmt)
  - report how old ports tree is

Mysql.pm
  - instead of looking for the dports dir on Darwin, look for the "port"
    binary to detect if DarwinPorts is configured
  - offer to install the mysql package instead of port (to save time)

Passwd.pm
  - new user sub, $vals->{'username'} needed to be $vals->{'user'}

Qmail.pm
  - on FreeBSD, be smarter about disabling sendmail and enabling qmail

Setup.pm -
  - Georg von Itzenplitz - allspam target created an empty .qmail with
    invalid ownership, sent patch.
  - fix for installing phpMyAdmin with php5
  - the squirrelmail sub does a better job of setting up squirrelmail with
    mysql prefs (no guarantees yet).
  - added sub for installing roundcube, domainkeys, and dovecot
  - RRDutil was not fetching dist properly
  - autorespond failed to build on darwin due to quoting error
  - if $config_dir ($prefix/etc)  is missing, create it
  - added vpopmail_valias to Darwin config tweaks
  - added an entire section of Linux config tweaks
  - search for gmake is no longer fatal (on Linux, gmake is installed as make)
  - isoqlog source build now works again (patches needed to be an arrayref)
  - added port_ options for Apache2-SOAP perl module
  - added download addresses for NicTool installs
  - added WITH_DATABASE to squirrelmail installs (so pear-DB will be installed)
  - suppress build time prompt if vpopmail_learn_passwords is disabled
  - updated vpopmail creategroup syntax, it now creates user/groups on
    Linux/Darwin again.
  - only check for service/pop3 symlink if pop3_daemon = qpop3d

5.04 - Nov 25, 2006

Setup.pm - mailfilter generation code generated an invalid filter
     file if filtering_spamassassin_method was not = site.
   - installing phpmyadmin attempted to install php4-gd
     despite install_php = 5.
*.pm - updated calls to darwin->install_port to reflect an internal API change.

5.03 - Nov 8, 2006

Logs.pm - comment out a print statement that caused a snmp counting error in maillogs

Setup.pm - install Params-Validate port on FreeBSD & Darwin

t/maillogs - return a more specific error message if Date::Parse not installed

5.03rc1 - Oct 15, 2006

Packaging Updates

Moved Params::Validate into inc directory (prevent CPAN from presuming I provide it), moved Changes back into doc/Changes.pod, added include lib "inc" into all test files (forgot that with 5.02 release).

Better pod descriptions for FreeBSD.pm, Mysql.pm, Apache.pm, Ezmlm.pm, Darwin.pm, DNS.pm, Provision.pm, Setup.pm, Passwd.pm, Perl.pm, and Toaster.pm. Updated META.yml to include license.

FreeBSD Port preparations

Default htdocs directory is now /usr/local/www/toaster.

CPAN test tweaks

Don't do passwd test on cygwin. Don't do network tests on Cygwin

toaster-watcher.conf
  added install_roundcube option

Darwin.pm
  updated $utility calls with MT 5 syntax updates
  udpated test file to use Test::More

t/Utility.t
   only attempt to chown_system if we are root, don't run get_my_ips on
   netbsd (until I figure out why it doesn't work

Changes
  added file to distribution

bin/toaster_setup.pl
  added RT URL to bug section for reporting

bin/sysadmin
  updated for MT 5 syntax

Passwd.pm
   mt 5 syntax updates, add in warnings for failures

Qmail.pm
  formatting cleanups, and added a few missing debug=>0 settings.

Provision.pm
   mt 5 updates and rewrite. If values are missing and we are interactive,
      prompt for the missing values.
   pass debug and $conf variables in the $provision object (accomplish
      the same result with less code)

Utility.pm
  ask sub now returns $default value (instead of 0) if not interactive
  yes_or_no supports q shortcut for question argument

5.02 - 2006.10.11

toaster-watcher.conf

added options install_ezmlm_mysql, vpopmail_mysql_repl_master_port, vpopmail_mysql_repl_slave_port

t/Toaster.pm

get_dir_files tests the file size to see if any domains are added yet (more reliable test)

FreeBSD.pm
fixed a recursion bug in ports_update (portsnap)
install a default portsnap.conf if missing
FreeBSD version detection wasn't working
Apache.pm
added security options to mail-toaster.conf to harden Apache
added PHP AddType declarations
added directory block for phpmyadmin
only add phpmyadmin block if selected in toaster-watcher.conf
Setup.pm

ezmlm mysql support now depends on install_ezmlm_mysql setting instead of install_mysql.

added support for vpopmail mysql database port number (thanks Erik!)

vpopmail_mysql_database setting is now honored.

busted huge vpopmail sub into a dozen smaller ones for easier maintenance.

heredoc's used in creation of tcp.smtp used ' and needed "

logic for NO_SENDMAIL test was inverted causing it to be added to /etc/make.conf more than once.

5.02b - 2006.09.28

index.cgi

defined debug (caused it to not work)

Apache.pm

test for toaster_apache_vhost

add alias for v-webmail, and roundcube to apache's vhost config file(mail-toaster.conf)

Ezmlm.pm
define any missing cgi params to suppress errors messages
filled in pod description
FreeBSD.pm - detection of portsdb wasn't working

supress notification of new toaster-watcher.conf install if its missing

Logs.pm - prettied up the yesterday report a little bit.
added checks to prevent warnings when logs are empty
log archiving was failing (invalid test)
Perl.pm
added pod doc for has_module
Setup.pm
phpmyadmin_install was not passing $conf
Utility.pm

Fixed a bug in mailtoaster sub that prevented it from finding the tw.conf file

added _progress_??? subs for providing status messages on the CLI

added pod documentation for several subs that had none

5.01 - 2006.09.22

added help->vpopmail option to web interface
added setup -s allspam option (enabled mail filtering for all users)
default ports update mechanism is now portsnap
removed dependency on Net::DNS (using dig)

commented out v-webmail, roundcube, vqadmin, and ezmlm menu options. Those items are not installed by Mail::Toaster (yet).

added code in -s all target to refresh the $conf hashref after -s config target is run

moved $conf into the Setup.pm object. Significantly reduced the amount of passing $conf around from sub to sub.

added options and explicit port install options for gnupg and Archive::Tar to surpress dialog boxes.

timer was not working in yes_or_no due to typo in param validation block

disabled ezmlm and vqadmin in webmail. Activate them by removing the comments in mt-top.html

default cvsup_supfile_sources settings is now cvsup-sources (was cvsup-stable)

tweaks so "make test" runs with fewer warnings

toaster_setup -s sources now auto-builds cvsup-sources if missing. The location for it is /usr/local/etc now.

5.00 - 2006.09.18

CODE QUALITY

* Parameter validation for nearly all subroutines using Params::Validate. Backwards compatability is now destroyed, but that should not affect anyone as all published software that uses these functions is included with the distribution. Params::Validate is included in MT distribution.

* Tests. Hundreds of new tests. In version 4, I added a plethora of tests, basically just making sure each sub and function would execute. Now most subs and functions have tests that verify inputs and results.

* Switched to Test::More for tests. Provides more and better options for writing tests, comparing results, and figuring out where the tests failed.

* Maillogs - a number of optimizations to make processing logs faster (shorter regexps, optimized ternaries to match common stuff first, removed POSIX requirement (lighten memory requirements), updated several of the counter functions to complain about unknown errors and values, more sanity checking in functions so they give up on errors instead of blithely charging ahead.

* instead of eval's strewn all over to test for certain modules, added $perl->has_module

* all objects are created with Class->new intead of new Class.

* all errors raise exceptions by default. This requires callers to take specific action to change.

* run tests early in subroutines, reduces giant if nests and makes it easier to read the code.

MISC

* Added Build.PL for use with Module::Build fans.

* Greatly simplified Makefile.PL by moving "make cgi" and "make conf" logic into Setup.pm. Those functions are now accessed by toaster_setup targets.

* OpenSSL config files are now updated automatically. Auto-generated certs now have the accurate information in them. Courier-IMAP certs are also updated automatically.

DOCUMENTATION

* Added three new test modules that test for: pod documentation for subs, pod formatting, and automatic checking of code to test for best practices.

* moved POD documentation from being strewn about the files to the end of each file.

* wrote and re-wrote significant portions of the documentation, as well as cleaned up formatting. Documentation is now easier to find as well.

changed all tnpi.biz urls to tnpi.net
shortened most tnpi.net urls to mail-toaster.org
updated copyright notices to 2006
moved usage() subs into pod docs and use pod2usage
CODE FORMATTING & READABILITY

* Used perltidy to format most of the source code.

* Used perlcritic to identify and correct (almost) all instances where my code was not using best practices, as identified in Perl Best Practices.

* All subroutines now take named arguments, making it easier to read the code and understand what is being sent and returned.

* added "use English" pragma and replaced all the arcane $^ and $[ perl variables with their english name equivalents.

WEB INTERFACE/CGI

* Completely new webmail/logon interface. Written entirely in HTML, CSS, and JavaScript.

* The format of toaster-watcher.conf is altered slightly. It is more consistent in the internal layout so that my programs can alter it reliably.

* removed httpd.conf patches in favor of installing a mail-toaster.conf file with all the requisite apache directives.

* Organized all the cgi related docs into cgi_files directory. They are now installed via the -s webmail target to toaster_setup.

See Also 4.x Changes http://mail-toaster.org/changes/4.x-changes.html