# Release History

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