-------------------------------------------------------------------------------
Changes in version 0.97.1

Bug Fixes:
- Fixed bug in making a maildir over top of an existing account.
  Thanks Dale Woolridge.
-------------------------------------------------------------------------------
Changes in version 0.97

New Features:
- Aliases can now have autoresponders.
- New "stat" command in the daemon to lookup the mailbox size.
- Added a "dumpvuser" command, to output all of an account's data.
- Renamed vpasswd2db to vupgrade and allvpasswd2db to vupgrade-all.
- Authentication recognizes plain text (null-crypt) passwords.
- Added options to turn off execution of vdeliver-predeliver and
  vdeliver-postdeliver.
- Added option to vadduser to specify the pre-encrypted password.

Internal Changes:
- All accounts are created with an account directory now.
- Created a vpwtable writer interface, and removed the CDB-specific
  commands.
- Added adduser3 daemon function, which works the same as the existing
  adduser2 function but with an additional has-mailbox parameter.
- New CDB library that uses mmap instead of file reads for efficiency.
- Removed the vcheckquota and vpopbull tools that are now part of the
  vmailmgr-tools package.

Bug Fixes:
- Fixed a bug in Python library that caused the listdomain command to fail
  on some OS's.
- Fixed a bug in the PHP library that caused long listdomains to fail.
- Exit code 99 from vdeliver-predeliver now causes vdeliver to exit
  (with code 99) without delivering the message.
- Fixed a bug that caused creating directories with a trailing slash to
  fail.
- Fixed the use of libstdc++ in showvconfig.
- Personal information can now be changed by the virtual user in the daemon.
-------------------------------------------------------------------------------
Changes in version 0.96.9

New Features:
- vdeluser now has an option to prevent it from deleting users with a
  mailbox.
- All the Python CGI code has been dropped.  A stand-alone vpyadmin
  package (to be release very shortly) will replace the Python CGIs.
  Between this new interface and the PHP code, the C++ CGIs are
  depricated and will be removed in a future version, unless somebody
  violently objects.

Internal Changes:
- Cleaned up the vpwtable API.
- New CLI documentation generator, should help keep the man pages and
  the programs in sync.
- Major overhaul to the Python library.

Bug Fixes:
- Fixed error handling in vdeliver to properly handle file-system quota
  errors.
- Fixed a bug in the Courier IMAP authentication module that prevented
  non-virtual users from authenticating.
- The daemon now exits immediately if a SIGALRM or SIGPIPE is caught,
  instead of completing the action.
- Fixed a bug in autodetecting Python.  It should now work with any
  version of make.
-------------------------------------------------------------------------------
Changes in version 0.96.8

New Features:
- Added a quota checking program for use in vdeliver-predeliver.
- The authvmailmgr Courier-IMAP auth module now executes
  authvmailmgr-presetuid and authvmailmgr-postsetuid before and after
  executing the setuid respectively, just like checkvpw.

Internal Changes:
- The daemon lookup command now returns all of the virtual user data,
  not just the mailbox and forwarding.

Bug Fixes:
- Fixed a typo in the vmailmgrd run script.
- Fixed a bug in the daemon that would cause actions to be applied to
  the default virtual user if the named virtual user did not exist.
- Fixed a bug in the daemon that would allow disabled autoresponders to
  be written to.
- Fixed a bug in the subprogram execution code that would cause the
  wrong exit status to be returned.
- vdeliver now rewinds standard input before executing postdeliver.
- The autoresponse daemon command will now read the disabled
  autoresponse file if the enabled one does not exist.
- Fixed note on setting up a domain in the HOWTO.
- Fixed a bug in the fdbuf library.
-------------------------------------------------------------------------------
Changes in version 0.96.7

New Features:
- Contains configure-time switchable support for GDBM virtual user tables.
- Added a new utility, vpasswd2db, to convert a plain text password
  table into whatever vpwtable format is configured.  This utility will
  be much slower than vpasswd2cdb for CDB files (for now), so only use
  it for other (ie GDBM) formats.

Internal Changes:
- Updated PHP code.
- The daemon now relies on ucspi-unix to handle connections and forking
  instead of doing it internally.
- The autoresponse is written into a new subdirectory of the virtual
  user's mailbox directory.  This makes it work better with the
  autoresponder, which requires a directory to store temporary files in.
- Reorganized the vpwtable code somewhat.

Bug Fixes:
- The daemon now initializes its random number generator each time it
  handles a command, which should make it generate different salts for
  password hashes.
- The python subdirectory no longer requires GNU make to build, and
  should no longer build at all if Python cannot be located.
-------------------------------------------------------------------------------
Changes in version 0.96.6

New Features:
- Added autoresponse command to daemon, modified from code submitted by
  Mike Bell.  This allows the user to upload a autoresponse file to
  their virtual mailbox, to be used by an autoresponder (not included).
- Added autoresponse CGI written in Python, as well as updated Python
  library code.
- Updated PHP code from Mike Bell.
- Replaced the FAQ and HOWTO documents with the revised ones by Dan
  Kuykendall.

Internal Changes:
- The necessary parts of the Courier IMAP "authlib" library is now
  included in this package.  The Courier IMAP authentication module is
  now always built.
- The Courier IMAP module is now part of the standard RPM.

Bug Fixes:
- Fixed a problem with converting from old records that didn't set the
  virtual user flags properly.
- Fixed a problem with the virtual user creation time field not being
  set properly.
- Fixed a bug in vdeliver that would cause any error from the predeliver
  script to be treated as a temporary failure.
- Fixed a bug in the domain name lookup code that caused case sensitive
  domain name comparisons.
-------------------------------------------------------------------------------
Changes in version 0.96.5

New Features:
- Mailbox delivery can be temporarily disabled on a per-virtual-user
  basis, through either the CGIs, command-line tools, or PHP, without
  deleting the mailbox.
- Account expiry is handled by the authentication tools and by vdeliver.

Internal Changes:
- The binary record format has changed to handle the new boolean flags.
  Note that this new format is backwards compatible, so no conversion is
  needed.

Bug Fixes: None
-------------------------------------------------------------------------------
Changes in version 0.96.4

New Features:
- Added an upgrading section in the FAQ.
- The command-line tools now have a "--quiet" option to suppress all
  status messages.
- Added a "vchforwards" CGI interface.
- Modified the "vaddalias" CGI program to accept a comma-seperated list
  of destinations.
- Added some sample HTML pages for the CGIs.

Internal Changes:
- Minor updates to the mystring and fdbuf libraries.

Bug Fixes:
- Fixed a problem that caused the Courier IMAP authentication module to
  fail for users of the form "baseuser-virtuser".  It should work now.
-------------------------------------------------------------------------------
Changes in version 0.96.3

New Features: None

Internal Changes:
- Removed the "include" directory.
- Made vpwtable & vpwentry a seperate source directory.
- Merged the "adduser", "addalias", and "addaliasp" daemon interfaces
  into one new inteface named "adduser2".  The C++ CGIs and the PHP3
  code has been modified to use the new interface.

Bug Fixes: None
-------------------------------------------------------------------------------
Changes in version 0.96.2

New Features:
- Updated the FAQ, and added some new answers.
- Added a Courier IMAP authentication module.  This module does not yet
  work, unfortunately.
- Tossed the existing non-functional PHP3 module and added a working one
  (written in PHP3) from Mike Bell.
- Modified vsetup to call programs before and after setting up the
  domain.
- Added new "vauthenticate" command.
- Turned the small vaddalias program into a simple shell script.

Internal Changes:
- Moved the Python code into its own directory, like the PHP3 stuff.
- Moved the checkvpw module into an "authenticate" directory.
- Imported changes to the CLI library to make it behave more like the
  standard getopt.

Bug Fixes:
- Fixed some bugs in the Kerberos5 configuration handling.
-------------------------------------------------------------------------------
Changes in version 0.96.1

New Features:
- Output of listvdomain CGI has changed slightly to reflect the change
  in internal data structures.

Internal Changes:
- Changed listdomain daemon protocol to speed up domain listings and to
  allow for more information (not yet present in the listdomain CGI).

Bug Fixes:
- Fixed bug in building Python code from input files with non-GNU make.
-------------------------------------------------------------------------------
Changes in version 0.96

New Features:
- Record data format has been enhanced to add personal information,
  simple quotas, and expiry information, plus other extra data.
- Messages can now be delivered to both a mailbox and a list of
  forwarding addresses at once.
- Programs executed from checkvpw or vdeliver will have all the above
  data set in environment variables.
- listvdomain can now list only users, only aliases, or selected names.
- The listvdomain CGI has improved formatting ability.
- Preliminary support for Kerberos5 authentication.  Please tell me if
  this works for you if you need this, as I can't test it myself.
- New "vchattr" command to change a virtual user's attributes.
- New "vchforwards" command to change the forwarding addresses of a
  user.
- Executable configuration settings are treated as executable files
  rather than lists of statements to execute.

Internal Changes:
- Record parsing routines will read either record format but will write
  out new record format.
- Daemon command dispatching now requires seperate virtual domain and
  virtual user arguments (all the CGIs do this anyways), as opposed to
  allowing "baseuser-virtual".

Bug Fixes:
- Fixed non-portable increment statement in vconf2dir shell script, as
  well as a couple of other bugs.
- Fixed bug in vdeliver that would cause it to loop without sleeping
  when it couldn't write to the output file.

NOTES:
- I would consider this an unstable release.  Adding and deleting users,
  delivery, and password checking have been tested, but little else.  I
  just want to get this out.  There are so many big changes in this one
  that there are bound to be unexpected bugs.
- Despite the change in the record format, no password table upgrading
  will be necessary, as this version can read in both new and old
  records.
- The "vaddalias" command has been superceeded by "vadduser -D".
- The "vchalias" command has been replace with "vchforwards".
- The "vdelalias" command has been removed since "vdeluser" does both
  jobs.
- Support for quota management and account expiry are not included yet.
- The C++ CGIs are limited to adding aliases with a single forwarding
  address.  The generic Python CGI can be used to create users with
  multiple forwarding addresses.  I intend to remove most or all of the
  C++ CGIs in favour of a more generic interface.
-------------------------------------------------------------------------------
Changes in version 0.95

New Features:
- vdeliver now has a hook to execute a list of programs before and after
  delivering an email.  See doc/configuration.* for full details.
- checkvpw now has a hook to execute a list of programs before and after
  changing its uid, and after executing the subprogram
- The bulletins facility is now a standalone program called vpopbull.
- There is a new program showvconfig which can list the configuration
  information.

Internal Changes as above.

Bug Fixes:
- The call to execl in vdeliver when calling qmail-queue was missing a
  parameter.
-------------------------------------------------------------------------------
Changes in version 0.94

New Features:
- vdeliver and checkvpw no longer call up to vmailmgrd to do user
  lookups and authentication.  This makes them significantly faster,
  since the daemon no longer does any useful memorization of any kind of
  data (no password or virtualdomains caches, etc.), and the socket
  connection and fork took significant amounts of time.

Internal Changes:
- The virtual user and virtual password table manipulation were moved
  into a class interface.  This will be (once the password content
  changes are integrated in the next couple of versions) the official
  API target for building alternative database backends (like the much
  requested MySQL interface).
- Removed the "check" command from the daemon, since it's no longer
  used.

Bug Fixes:
- vdeliver still used a hard coded /var/qmail instead of
  config->qmail_root().

NOTES:
* You will no longer need to have vmailmgrd running to use checkvpw,
  vdeliver, and the command-line tools.  You only need vmailmgrd (and
  the vmailmgr-daemon RPM package) if you need to use the CGIs.
-------------------------------------------------------------------------------
Changes in version 0.93

New Features:
- New configuration system, based on individual files per configuration
  parameter rather than one big file.  Should be more extensable this
  way, and has been benchmarked to be faster.  The configuration files
  are documented in the configuration.{html,texi,txt} files.
- New configuration system also set up to allow domain-local
  configurations by putting a directory named ".vmailmgr" in the domain
  directory.  This IS (unlike my last attempt) read properly by the
  daemon and all the utilities and clients.  The daemon switches over to
  checking for local configuration items immediately after determining
  what user/domain is being handled.
- A new "qmail-root" configuration parameter to allow for installations
  where qmail is not installed in /var/qmail.

Internal Changes:
- All the v* commands now do a chdir to $HOME before continuing.
- A virtual domain class has been set up, and is used to reference each
  domain through a user, with both a user-local and domain-local
  configuration structure.  This will shortly be used to set up multiple
  virtual domains per user.
- Imported new and improved mystring and fdbuf libraries.

Bug Fixes:
- The .qmail-default file is created with mode r--r--r-- to prevent
  qmail problems with a writable delivery file in situations where the
  umask is less restrictive than 022.

IMPORTANT NOTES:
* This version uses a new configuration structure.  You *MUST* run the
  included vconf2dir program.  The RPM tries to do this automatically.
-------------------------------------------------------------------------------
Changes in version 0.92.2

Bug Fixes:
- Delivery to partially qualified aliases was broken again in a few hard
  to trace cases by potentially changing one character in the domain
  address.  Fixed by rewriting the envelope building code into something
  simpler and more efficient.
-------------------------------------------------------------------------------
Changes in version 0.92.1

Bug Fixes:
- Delivery to partially qualified aliases (such as the common 'root@')
  caused vdeliver to either crash itself or to cause qmail-queue to
  crash (since qmail-queue expects FQDN addresses).  This behavior has
  been fixed to make such addresses use a domain name of the contents of
  control/me.
-------------------------------------------------------------------------------
Changes in version 0.92

New Features:
- Aliases can now have passwords.  See the man page for vaddalias or the
  CGI documentation for details on how to create such an alias.  The
  intended effect is that, once set up, a virtual user could "own" an
  alias, for the purpose of changing its destination (or password, of
  course).

Bug Fixes:
- Delivery to aliases in vdeliver used to go through qmail-inject.  This
  would cause qmail to reformat headers or even bounce the message.
  vdeliver now sends aliases through qmail-queue, the same way that
  qmail itself does it.
-------------------------------------------------------------------------------
Changes in version 0.91

New Features:
- Command-line and CGI programs to change an alias (to avoid the delete,
  recreate cycle).

Bug Fixes:
- Always set the mode on created files to be read-write-only by owner.

Other Changes:
- vdeliver now uses fdbuf instead of raw I/O to deliver content.
- Changed the default default username from '*' to '+', to avoid
  confusion when typing '*' at a shell prompt.
- Command-line tools now count and report the number of errors
  encountered and exit false if any errors occurred.
-------------------------------------------------------------------------------
Changes in version 0.90.2

New Features: None

Bug Fixes:
- Fixed compile problem on systems lacking the O_SYNC definition.
- Fixed compile problem on systems where perror is in stdio.h, and
  stdio.h is not included through other includes.

NOTES: If you did not have a problem compiling 0.90 or 0.90.1, don't
bother with this version.
-------------------------------------------------------------------------------
Changes in version 0.90.1

New Features: None

Bug Fixes:
- Added definitions for MIN and MAX in md5-crypt.c if they aren't
  defined by the included headers.
- Removed the include of errnos.h in vpwentry_putpw.cc

NOTES: If you did not have a problem compiling 0.90, don't bother with
this version.
-------------------------------------------------------------------------------
Changes in version 0.90

New Features:
- Eliminated all dependance on any C++ library by incorporating my own
  C++ I/O library.
- Dropped the RSA MD5 library and incorporated the GNU MD5 code.
- Added the GNU md5-crypt module which should provide compatibility with
  all systems that do MD5-based passcodes.  The new code will read in
  and authenticate against standard DES-crypted codes, the new standard
  MD5-crypted '$1$' style codes, and my mistaken MD5 hashes (for
  temporary backwards compatibility), and will write out the '$1$' style
  MD5 codes.

Bug Fixes:
- Fixed a nearly invisible bug in the parsing of the configuration file
  (it was too lenient in the syntax it allowed).
- In the bulletin code, the timestamp file was named wrong
  ("maildir/cur/.timestamp" instead of "maildir/.timestamp"), and it was
  not created with a proper mode flag.

Other Changes:
- This package is now distributed under the GPL.
- The daemon will now not print out any "Accepted Connection" messages
  unless the verbose flag is set.
- Inverted the sense of the crypt flag in configure.  There is now a
  "--enable-crypt" flag which causes the code to revert to only using
  crypt for password encryption and comparison (the default is to use
  the built-in md5-crypt module).

NOTES:
- My plan to move from a fork-based daemon to a thread-based one is on
  temporary hold until I can complete several other more important
  reorganizations and cleanups, most importantly completing a generic DB
  interface layer.
-------------------------------------------------------------------------------
Changes in version 0.89

New Features:
- Changed the file format for the virtual password tables to using CDB
  tables.
- The daemon now forks immediately after accepting a connection,
  allowing for greater concurrency in the POP3 server.

Bug Fixes:
- Use a ".timestamp" file in a virtual user's maildir to determine the
  last login time for bulletin delivery.

Other Changes:
- Removed all the cache tables in the daemon.
- Did a major reorganization of the libraries and header files.

IMPORTANT NOTES:
* This package now uses an incompatible file format for the virtual
  domain password tables.  You *MUST* run "vpasswd2cdb" in each
  domain to convert your tables before starting the new daemon!
-------------------------------------------------------------------------------
Changes in version 0.88

New Features:
- Long passwords are now supported using MD5 hashing to create the
  encoded version.  The code will still read the older passwords but
  will always write out MD5 hashes.

Bug Fixes:  None

Other Changes:
- I am now finally using automake to build the package.
-------------------------------------------------------------------------------
