==============================
Cyrus IMAP 2.0.x Release Notes
==============================

Changes to the Cyrus IMAP Server since 2.0.16

*   migrated to SASLv2 (Rob Siemborski)
*   altnamespace: it is now possible to display user mailboxes as siblings to the INBOX at the top-level (Ken Murchison)
*   unixhierarchysep: it is now possible to use slash as the hierarchy separator, instead of a period. (Ken Murchison, inspired by David Fuchs, dfuchs@uniserve.com)
*   SSL/TLS session caching (Ken Murchison)
*   support for IMAP CHILDREN & LISTEXT extensions (Ken Murchison, work in progress)
*   check recipient quota & ACL at time of RCPT TO: in lmtpd (Ken Murchison)
*   support for LMTP STARTTLS & SIZE extensions (Ken Murchison)
*   unified deliver.db, using cyrusdb interface, hopefully improving concurrency and performance (Ken Murchison)
*   fixed STORE FLAGS () bug (Ken Murchison)
*   fixed SEARCH SUBJECT vs. SEARCH HEADER SUBJECT bug (Ken Murchison)
*   users without an INBOX can have subscriptions (Ken Murchison; noticing a trend here?)
*   added cyrusdb_db3_nosync backend, used for duplicatedb and session cache, to postpone non-critical writes. (Ken Murchison)
*   support for STARTTLS and AUTH=ANONYMOUS for timsieved (Ken Murchison)
*   do setgid and initgroups in master (as urged by several people)
*   added more config info to IMAP ID (in a vain attempt to improve debugging)
*   configure now checks for DB3.3
*   SQUAT (Rob O'Callahan, roc@cs.cmu.edu)
*   change SEARCH HEADER x to SEARCH x utilizing internal cache where possible (Rob O'Callahan, roc@cs.cmu.edu)
*   an improved directory hashing option (Gary Mills, mills@cc.UManitoba.CA)
*   use of EGD for SSL/TLS (Amos Gouaux, amos@utdallas.edu)
*   separate certs/keys for services (Henning P. Schmiedehausen, hps@intermeta.de)
*   ability to force ipurge to traverse personal folders (Carsten Hoeger, choeger@suse.de)
*   fixed zero quota bugs in cyradm (Leena Heino, liinu@uta.fi)
*   ignore trailing whitespace in imapd.conf
*   Received: header (with TLS and AUTH info)
*   added '-i' switch to sendmail command line for SIEVE reject, redirect and vacation
*   small fixes to notify_unix
*   added "duplicatesuppression" switch to imapd.conf for enabling/disabling duplicate delivery suppression (Birger Toedtmann, birger@takatukaland.de)

Changes to the Cyrus IMAP Server since 2.0.15

*   fixed a longstanding bug in quota that would affect people with unusual top-level hierarchy, fix by John Darrow, John.P.Darrow@wheaton.edu.
*   some important fixes to db3 interface code, by Walter Wong wcw@cmu.edu, prompted by complaints from Scott Adkins adkinss@ohio.edu.
*   fixed some memory leaks in imclient and in the Perl IMAP module, prompted by Toni Andjelkovic toni@soth.at.
*   fixed a longstanding authentication error in the Perl IMAP module, should remove pesky extra Password: prompt.
*   fixed some allocation bugs in the managesieve perl module.

Changes to the Cyrus IMAP Server since 2.0.14

*   fixed memory management bugs in imapd, lmtpd that were being hit due to the connection reuse code and causing subtle and annoying problems.
*   we now clean up better when deleting a user
*   fixed an endian bug in ipurge
*   pop3d now can also reuse processes.
*   fix a bug in imclient that would strike when cyradm specifies a mechanism on the command-line. (SASL mechanism names aren't case sensitive.)
*   fix some bugs in handling SIGHUP in master
*   fix a couple of goofs in Admin.pm

Changes to the Cyrus IMAP Server since 2.0.13

*   fixed a silly bug with reusing SSL connections
*   lmtpd can now service multiple clients in sequence, hopefully improving performance
*   changed how Berkeley db databases are opened, hopefully lessening the chance of deadlock and improving performance
*   fixed a couple of memory leaks
*   lessened the chance of a race condition during index_check()

Changes to the Cyrus IMAP Server since 2.0.12

*   refactored code so less duplication
*   added alternate config file for partial virtual domain support
*   pop3d can now disable USER/PASS commands.
*   STARTTLS now accepts a SSLv23 hello but doesn't allow SSLv23 to be negotiated.
*   imtest no longer buffers to aid use as an automated layer.
*   master now supports maximum number of service processes via the "maxchild" modifier.
*   fixed a bug in the Sieve string lexer.
*   one imapd process can now service multiple clients in sequence, eliminating a large number of forks.

Changes to the Cyrus IMAP Server since 2.0.11

*   portability fixes involving setrlimit()
*   fixed compiler warnings
*   the STARTTLS command will only accept TLSv1 now, not SSLv2/v3. The imaps port is unaffected by this change.
*   timsieved no longer returns garbage strings.

Changes to the Cyrus IMAP Server since 2.0.9

*   some small memory savings
*   the "fud" daemon once again works correctly
*   the IDLE extension now uses signals correctly
*   problems with libwrap have been resolved
*   imapd and pop3d now log connections protected via TLS.
*   efficiency improvements when searching for a particular message-id
*   fixed an envelope-parsing bug affecting SORT and THREAD
*   made RENAME keep the same mailbox uniqueid, preserving seen state across renames
*   STOREing flags to multiple messages in one command is now more efficient
*   RENAME now preserves the ACL
*   LIST is now as efficient as Cyrus v1.6, modulo Berkeley DB issues.
*   Sieve zephyr notifications are now correct.
*   crash in reconstruct now fixed.
*   man pages added for cyrus.conf, master, lmtpd, idled, ctl_mboxlist, and ctl_deliver.
*   master can now listen on specific interfaces
*   master can now reread /etc/cyrus.conf on SIGHUP.
*   timsieved now uses symlinks instead of hard links.

Changes to the Cyrus IMAP Server since 2.0.8

*   remembered to update this file
*   bug in Cyrus::IMAP perl module affecting cyradm's setquota fixed
*   portability fix with socklen_t

Changes to the Cyrus IMAP Server since 2.0.7

*   preliminary implementation of the IDLE extension (Ken Murchison, ken@oceana.com).
*   THREAD=REFERENCES now part of the normal build.
*   tweaks to the installation documentation and suggested Sendmail configuration
*   portability fixes and other small bugfixes
*   added "-a" flag to lmtpd
*   master process can now export statistics about running processes via UCD SNMP AgentX
*   many fixes to Cyrus Murder-related code
*   fixes to perl code, especially the Sieve interface. added an IMSP interface to the perl code, but it still needs work.

Changes to the Cyrus IMAP Server since 2.0.6

*   some number of random static variables eliminated, to save on memory footprint
*   recursive RENAME was a little to eager; fixed. RENAME will also give the client a hint that a sub-RENAME failed. (mostly probably useful for cyradm, but cyradm doesn't take advantage of it yet.)
*   THREAD=X-JWZ has turned into THREAD=REFERENCES (Ken Murchison)
*   DELETE wasn't failing cleanly in database code; fixed.
*   off-by-one bug in seen_db fixed.
*   starting/committing/aborting transactions now logged more correctly in cyrsudb_db3
*   master will now accept port numbers instead of just service names in cyrus.conf. also logs even more verbosely (see bug #115.)
*   libwrap_init() is now inside the loop, since I don't quite understand the semantics of libwrap calls.
*   setquota in cyradm now behaves more sanely (and gives correct usage message).
*   bugfixes to the managesieve client perl api. (still needs work.)
*   small fixes in timsieved.
*   added a "make dist" target so I won't dread releases as much.

Changes to the Cyrus IMAP Server since 2.0.5

*   APPEND now honors the \Seen flag.
*   mailboxes file can once again be a flat text file. (compile-time choice)
*   subscriptions file can be flat text or berkeley db. likewise for seen state.
*   unfortunately, the format of the mailboxes file has changed.
*   implementation of "JWZ" threading, a first pass on the forthcoming THREAD=REFERENCES.
*   bugfixes in libacap.
*   bugfixes in other Murder related functionality.
*   removal of dead code.
*   will now look in CYRUS_PREFIX/etc/imapd.conf if there's no /etc/imapd.conf.
*   more paranoid implementation of ID.
*   more descriptive lmtp errors.
*   finished implementation of LMTP 8BITMIME.
*   fixed minor bugs in pop3d.
*   small test suite for cyrusdb backends added in lib/test/.
*   added -DPERL_POLLUTE to the perl compilation to deal with Perl 5.6.
*   small additions to the Sieve library.
*   As usual, owe lots of thanks to Ken Murchison for his hard work and awesome implementations.

Changes to the Cyrus IMAP Server SINCE 2.0.4

*   Now should work with Berkeley DB 3.1, but does not auto-upgrade 3.0 databases (and, in fact, I haven't written any upgrade software yet).
*   SORT and THREAD should now function correctly.
*   Some configure fixes.
*   Some fixes for possible race conditions in initializing services and database structures.
*   Some non-gcc compile fixes with structure initialization.
*   Some non gcc compile fixes with structure initialization.

Changes to the Cyrus IMAP Server SINCE 2.0.3

*   fixed mbpath and ipurge. Thanks to Alain Turbide for the bug report.
*   configure: removed mmap_private.c; it was buggy, and not worth supporting.
*   configure: improvements in detecting libwrap, typos fixed in detecting libsasl.
*   Merged the acapsieve library into libacap.
*   improvements to the ACAP API.
*   invariant checks added to the skiplist code.
*   bugfix in TCL cyradm.
*   acapmbox.c: bugfixes in handling acap connections.
*   fix the size given for a unix socket address (changes throughout the code), patch thanks to Vladimir Kravchenko, jimson@null.ru.
*   rewrote deliver to use the generic LMTP API in lmtpengine.c. Likewise, implemented the client-side API in lmtpengine.c. (Still need to implement AUTH.)
*   added SORT and THREAD support (Ken Murchison, ken@oceana.com.)
*   In checking an APPEND command, we were rejecting valid system flags and accepting invalid ones.
*   minor bug fixes to proxyd.
*   large amount of debugging code added to target-acap.
*   build fixes to Perl programs.
*   allow plaintext authentication to timsieved.

Changes to the Cyrus IMAP Server in 2.0

*   The mailboxes file is now a transaction-protected Berkeley database.
*   The core delivery process has been moved to lmtpd. deliver is now a simple wrapper to create an LMTP transaction.
*   master process, responsible for spawning services (imapd, lmtpd, etc.) and for routine housekeeping. Optionally, it can use libwrap to allow or deny connections.
*   ACAP (Application Configuration Access Protocol) support for Cyrus Murder: IMAP Aggregator.
*   Sieve enhancements: regular expressions, notifications, automatically setting IMAP flags.
*   SNMP (Simple Network Management Protocol) support for monitoring usage (e.g. number of users logged in) as well as for instrumenting protocol usage (e.g. number of times CREATE has been called).
*   Perl version of cyradm contributed by Brandon Allbery (allbery@ece.cmu.edu). Eventually we expect to transition to the Perl version away from the TCL version.
*   Bugfix in modified UTF-7 processing (for mailbox names). Bugfix in index_searchcacheheader().
*   Implemented the extension MULTIAPPEND.
*   RENAME is now hierarchical.
*   The right that controls whether a mailbox may be deleted is now "c". (It used to be "d".)
*   An additional backend for seen state has been created, seen_db. It stores seen state in a per-user database.

