Mail Toaster Changes

  5.54 - Feb 16, 2017
        added updated #10
        fix spamassassin install detection #9
        test perl 5.22 (on Travis)
        fix Utility test broken due to README rename

  5.53 - Feb 16, 2017
        apply utmp.h patch on FreeBSD 11 too

  5.52 - Aug 06, 2016
        add CGI to deps
        replace Util::path_parse with File::Basename

  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
        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/
        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
        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
        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/ (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 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 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 and ezmlm.cgi -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
       install_portupgrade now defaults to off, install_portmaster added 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
       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/, greatly simplified structure.
       many changes in, 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 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/
       removed InstallMysqlTool, and with_linuxthreads from
       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, 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 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, so can anyone else
       License in bin/ 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/ in perl (was sh) loads in $conf when ->new is called. 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 and
       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 - honor $debug setting in DBD & DBD install subs

  5.09 - Nov   , 2007
       playing Kwalitee (
       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 - renamed only sub to _only - package install logic was forcing package install - 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 - added missing pod doc for file_mode

  5.08 - Nov 21, 2007
       tw.conf: added rbl
       tw.conf: added rwl - adjust the RBL positive tests to accommodate pattern used by - 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
       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/
     Added bin/
     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

       - 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 with
       - added DirectoryIndex index.php declaration to PHP webmail apps in
       - added v-webmail Alias and Directory declarations
       - enable v-webmail Alias by default in apache include
       - turned debugging off in syscmd call in port install sub
       - port location of portupgrade updated (sysutils->ports-mgmt)
       - report how old ports tree is
       - 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)
       - new user sub, $vals->{'username'} needed to be $vals->{'user'}
       - on FreeBSD, be smarter about disabling sendmail and enabling qmail -
       - 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 - 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 - comment out a print statement that caused a snmp counting error in maillogs - 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

        Better pod descriptions for,,,,,,,,,, and 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

       added install_roundcube option
       updated $utility calls with MT 5 syntax updates
       udpated test file to use Test::More

        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

       added file to distribution

       added RT URL to bug section for reporting

       updated for MT 5 syntax
        mt 5 syntax updates, add in warnings for failures
       formatting cleanups, and added a few missing debug=>0 settings.
        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)
       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
        added options install_ezmlm_mysql, vpopmail_mysql_repl_master_port,

        get_dir_files tests the file size to see if any domains are added
        yet (more reliable test)
         fixed a recursion bug in ports_update (portsnap)
         install a default portsnap.conf if missing
         FreeBSD version detection wasn't working
         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
        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

        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
        defined debug (caused it to not work)
        test for toaster_apache_vhost

        add alias for v-webmail, and roundcube to apache's vhost config
         define any missing cgi params to suppress errors messages
         filled in pod description - detection of portsdb wasn't working
        supress notification of new toaster-watcher.conf install if its
        missing - prettied up the yesterday report a little bit.
         added checks to prevent warnings when logs are empty
         log archiving was failing (invalid test)
         added pod doc for has_module
         phpmyadmin_install was not passing $conf
        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 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

        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

        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
        * 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.

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

        * Greatly simplified Makefile.PL by moving "make cgi" and "make
        conf" logic into 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.

        * 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 urls to
         shortened most urls to
         updated copyright notices to 2006
         moved usage() subs into pod docs and use pod2usage

        * 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.

        * 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

        * 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 <>