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.
