Changes to the Cyrus IMAP Server since 2.3.0

Changes to the Cyrus IMAP Server since 2.2.x

Added support for "unified" and "replicated" Murders. A Murder no
longer has to have discrete frontend and backend servers; any one
"unified" server can both proxy and serve local mailboxes (proxy
functionality in proxyd and lmtpproxyd has been
merged with imapd and lmtpd respectively), or all
"replicated" servers can serve the same mailboxes from a shared
filesystem. The new mupdate_config option in
imapd.conf is used to determine whether a Murder is using a
"traditional", "unified" or "replicated" configuration.

Added support for "delayed" expunge, in which messages are
removed from the mailbox index at the time of the EXPUNGE (hiding them
from the client), but the message files and cache entries are left
behind, to be purged at a later time by cyr_expire. This
reduces the amount of I/O that takes place at the time of EXPUNGE and
should result in greater responsiveness for the client, especially
when expunging a large number of messages. The new expunge_mode
option in imapd.conf controls whether expunges are
"immediate" or "delayed". Development sponsored by FastMail.

Added support to place some/all mailbox metadata files (cyrus.*
files) on a separate (probably high-speed) partition. See the new
metapartition and metapartition_files options for
details. Development sponsored by FastMail.

Added support for accessing subfolders of INBOX via POP3. See the
new popsubfolders option for details. Development
sponsored by FastMail.

Added support to lmtpd to do "fuzzy" mailbox matching
on user+detail addresses. See the new
lmtp_fuzzy_mailbox_match option for details. Development
sponsored by FastMail.

Added new sieve_extensions option to allow individual
Sieve extensions to be enabled/disabled.

The Sieve "include" extension is now supported. This also allows
for global sieve scripts. See the new sieve_extensions
options to enable it.

The Sieve "body" extension is now supported. See the new
sieve_extensions option to enable it. Development
sponsored by FastMail.

The $text$ variable for Sieve notify messages is now supported.
Development sponsored by FastMail.

The MIME structure of a new message destined for multiple
recipients is now only parsed once rather than once per delivery,
resulting in better performance. Development sponsored by
FastMail.

Support 64-bit quota usage (both per mailbox and for the entire
quotaroot), based on a patch from Jeremy Rumpf. Development
sponsored by FastMail.

Added new flushseenstate option which causes imapd to
immediately flush changes in \Seen state to disk rather than caching
them until the mailbox is closed. Enabling this option may fix \Seen
state weirdness with MS Outlook, at the expense of
performance/scalability. Based on a patch by John A. Tamplin
(jtampli@sph.emory.edu).

The Sieve "copy" extension is now supported.

The IMAP "CATENATE" and "URLAUTH" extensions are now supported.

Updated Sieve "vacation" extension to draft-ietf-sieve-vacation-04.

Added support for Sieve scripts on shared mailboxes via the
/vendor/cmu/cyrus-imapd/sieve annotation.

Changes to the Cyrus IMAP Server since 2.2.13

ctl_mboxlist now dumps/undumps the mailbox type flags,
making it useful for remote mailboxes.

Changes to the Cyrus IMAP Server since 2.2.11

Changes to the Cyrus IMAP Server since 2.2.10

Fix possible single byte overflow in mailbox handling code.

Fix possible single byte overflows in the imapd annotate extension.

Fix stack buffer overflows in fetchnews (exploitable by peer news server),
backend (exploitable by admin), and in imapd (exploitable by users though only on platforms where a filename may be larger than a mailbox name).

Changes to the Cyrus IMAP Server since 2.2.2

Berkeley DB 4.2 Support - note that the Cyrus Berkeley
enviroment needs to be reset (db_recover) before
a Berkeley DB version upgrade or you need to remove all berkeley dbs.
Special care needs to be taken when berkley db is used for mboxlist.

Runtime configuration of the Cyrus databases. The cyrudb backend
used for each database can be specified with an imapd.conf
option. NOTE: You MUST convert the database using
cvt_cyrusdb BEFORE changing the backend in imapd.conf.

Sendmail socket map support (smmapd) for verifying that
mailboxes exist and are deliverable before accepting the message and
sending it to Cyrus.

New userid mode for virtual domains, which does NOT do
reverse lookups of the IP address.

nntpd now supports the Xref header.

nntpd can now use the POST command to feed articles to
upstream servers.

fetchnews can now be used with NNTP servers which don't support
the NEWNEWS command.

lmtpd now initializes duplicate.db only when it
is necessary (when using Sieve or duplicatesuppression).

Sieve now verifies that text strings are valid UTF-8.

Sieve now verifies that address tests and envelope tests are done
on headers which contain addresses (can be disabled with
rfc3028_strict: no).

Services will now notice that a new binary has been installed and
will restart using the new binary once the existing connection is
closed.

Changes to the Cyrus IMAP Server since 2.2.1

Major bugfixes in murder altnamespace/unixhierarchysep/virtdomain
support (Thanks in large part to work by Christian Schulte <cs@schulte.it>)

Sieve Bytecode is now stored in network byte order, meaning that
bytecode files can be freely moved between different platforms

Sieve relational extension now working again.

Sieve vacation now uses the correct subject.

A large number of bugs involving virtual domain support have been
fixed, including issues with the Murder, and with Sieve.

Changes to the Cyrus IMAP Server since 2.1.x

There have been extensive performance and consistancy changes to
the configuration subsystem. This will both ensure greater consistancy
between the documentation and the code, as well as a more standard format
for specifing service-specific configuration options in imapd.conf. Important
changes are detailed here:

The tls_[service]_* configuration options have been removed. Now
use [servicename]_tls_*, where servicename is the service identifier from
cyrus.conf for that particular process.

Users can now be renamed (even across domains). Note that this
is not atomic and weirdness may occur if the user is logged in during
the rename. See the allowusermoves option in
imapd.conf(5) for details.

The db3 and db3-nosync database backends have
been renamed to berkeley and berkeley-nosync
respectively (to avoid confusion over whether or not db4 is supported).

The default mailbox list and seen state database formats have changed
to skiplist from Berkeley and Flat, respectively.

ptloader is now a regular cyrus service. This has several implications,
see install-upgrade.html for more details.

NNTP support. Usenet news can now be fed to and read from Cyrus
directly via NNTP, without the need for a local news server. See netnews document for details.

IPv6 support, provided by Hajimu UMEMOTO <ume@mahoroba.org>

Sieve scripts are now compiled to bytecode to allow for faster
execution (and lmtpd no longer needs lex or yacc). See
install-upgrade.html for more details.

The functionality of pop3proxyd has been merged into pop3d. Be
sure to update cyrus.conf on your frontend machines accordingly.

The functionality of ctl_deliver -E has been moved to
cyr_expire -E. Be sure to update cyrus.conf on your
machines accordingly.

Changes to the Cyrus IMAP Server since 2.1.14

Correct a potential DOS attack in the fud daemon.

Arbitron now works again

Telemetry logging for mupdate

Duplicate Suppression logging for redirect sieve actions

A number of bugs in reconstruct have been fixed. also added the -p and -x
options

Better stubbing out of user_deleteacl

No longer log any shutdown() failures

Improved IPv6 support (for systems with two getnameinfo implementations)

Misc Documentation Improvements

Changes to the Cyrus IMAP Server since 2.1.13

Be more forgiving in the parsing of MIME boundary headers, specifically
those generated by Eudora where the outer boundaries are substrings of
the inner boundaries. This feature can be disabled by enabling the
rfc2046_strict option.

Changes to the Cyrus IMAP Server since 2.1.4

imtest now includes all the functionality previously
kept in pop3test, lmtptest, smtptest, and mupdatetest. imtest will
notice if it is invoked with one of these names and do the right
thing. The -P flag can be used to force a particular protocol. As
part of this, the default install location for mupdatetest has changed
to be the same as the other test utilities. imtest also
includes new MANAGESIEVE functionality (sivtest) as well as the
ability to reconnect to the same server multiple times (useful for testing
SSL/TLS session caching and DIGEST-MD5 fast reauth).

snmpgen generates stubbed out code so we don't waste resources on
something that just doesn't work. At some point in time, we'll make it
work again as it would be useful to gather aggregate statistics on
what commands are being used so we can better tune the server. This
change closes bug #1191. New bug 1267 opened to re-enable the feature.

Added the chk_cyrus program to help point out missing message
files and/or mailboxes

ANNOTATEMORE improvements. Server annotation support has been added.
We are also now using the /vendor/cmu/cyrus-imapd hierarchy.
The "info" command in cyradm now returns annotations for the given mailbox
(provided that ANNOTATEMORE support is compiled into the server)

The RENAME command has been almost entirely rewritten. Now we rely
on mailbox-level locking instead of locking the entire mailboxes file
for the duration of the rename. ctl_cyrusdb -r now also
cleans up "reserved" mailboxes that may appear in the event of a crash.

ctl_mboxlist can now dump only a particular partition

The configuration subsystem now uses a hash table to speed up lookups
of options. Additionally, the hash table implementation has been updated
to possibly take advantage of memory pools.

Many bugfixes related to the Cyrus Murder. Includes improvments to
subscription handling as well as correct merging of seen state on
mailbox moves.

Can now configure an external debugger (debug_command option
in imapd.conf.

Security fixes related to handling large literals in getxstring(), as
well as correct usage of layers in timsieved.

Changes to the Cyrus IMAP Server since 2.1.3

All "MAIL" and "SIEVE" notifications are now handled by
notifyd which is a daemon that supports multiple notification
methods. The mailnotifier and sievenotifier options
have been added to /etc/imapd.conf to configure
notifications. (Ken Murchison)

Many feature enhancements and bugfixes for the Cyrus Murder. The
code now supports live (but not transparent) moving of mailboxes from
one server to another.

Some warning fixes.

fdatasync() is no longer required.

Fixed a bug in imap/append.c that would show itself if a
message was being delivered to five or more different
partitions.

Deliveries now don't create a redudant temporary file using
tmpfile(); the staging directory is used instead. (Ken
Murchison)

Fix a possible crashing bug in squatter. (Ken
Murchison)

Deleting a user now also removes their Sieve scripts.

cyrusdb_skiplist: release locks during iteration.
Should prevent denial of service attacks and possibly increase
performance.

cyrusdb_skiplist: introduce a new mode using
O_DSYNC writes which is possibly faster on Solaris.
Currently off (it seems to hurt performance on Linux).

master has preliminary code to avoid forking
storms.

sieveshell should now loop through all available SASL
mechanisms before conceding defeat.

sieveshell can now upload a file to a different name.

Changes to the Cyrus IMAP Server since 2.1.2

fud now runs from the Cyrus master process; more generally, the
Cyrus master process can deal with UDP services. (Amos Gouaux,
amos@utdallas.edu)

Sieve has been updated to be compliant with RFC 3028 and
draft-martin-sieve-notify-01. All notify actions and any
fileinto and/or redirect actions using stringlists
will have to be updated/changed.

added cvt_cyrusdb for quick conversions between
different cyrusdb backends.

fixed a bug in the Sieve header cache, where legal header names
were being rejected.

many Murder-related fixes

suppress a bogus TLS session reuse DBERROR message

make the list of acceptable TLS ciphers configurable in
/etc/imapd.conf

cyrusdb_skiplist fixes; it's now suitable for using in
production environments though there are still performance problems
outstanding

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.

Changes to the Cyrus IMAP Server Since Version 1.6.20

Some fixes to the TLS support to gracefully degrade
service.

Sieve now correctly re-sieves messages that are received with
identical message-ids, but different envelopes. It also obeys
plus-addressing on keep actions. (Fixes by Ken Murchison,
ken@oceana.com.)

The server wasn't correctly calculating the percentage of quota
used when deciding whether or not to issue a warning.

Implemented single-instance store: deliver, when using LMTP,
will only store one copy of a message per partition, and hard link
it among multiple users. Sites with a large number of partitions
could see a performance decrease.

Added more hashing using a simple but stupid algorithm. Now
whenever there is a mailbox access, quota access, or subscription
access, it goes through a hash function. this is done to help
reduce the number of files/directories in any given directory.

Added the binary mbpath. Given a mailbox name, this
binary will print the filesystem path to that mailbox. This way if
you have multiple partitions and hashing turned out, you don't have
to spend as many mental cycles figuring out where the actual
directory is.

deliver now checks sieveusehomedir and
sievedir in the config file to determine where to look for
sieve scripts.

ptloader now has a workaround for afs 3.5.

clarified an error message in message.c when an unexpected end
of file is encountered.

fixed some random memory leaks in deliver.

fixed a fairly major bug in prot_fill. it was performing
incorrectly when reading only a single character.

fixed a bug in how imtest looked for OK or NO.

fixed a memory leak in imapd.

imapd now allows any user (or member of a group) listed in
"proxyservers" to proxy.

Changes to the Cyrus IMAP Server Since Version 1.6.0-BETA

fixed stupid bug in imapd

fixed sasl/config.c interaction

fixed use of stat in imtest

Changes to the Cyrus IMAP Server Since Version 1.5.24

ANSI C is now required.

imtest's interface has changed, to allow for SASL
authentication. Sorry, but it had to happen. It now also includes a
timing test (-z) which we use to test the SASL layers.

imtest no longer uses a non-synchronizing literal with LOGIN,
so it should work against all IMAP servers.

The prot layer now uses SASL for encryption and authentication.
This changed a large amount of code, and some build
procedures.

As a side effect of SASL, --enable-static-libraries now doesn't
do anything. We are considering compiling cyrus with libtool to
change this.

Error codes returned by programs have changed, and programs
return EX_TEMPFAIL far more than they used to. This is because
Sendmail considers most not-EX_TEMPFAIL errors permanent; now, if
it may not be permanent, EX_TEMPFAIL is returned. (See
lib/exitcodes.h.)

Two bugs fixed: UID FETCH's with no messages in range now
return OK, not BAD. And an obscure bug in LIST case sensitivity is
fixed.

Changes to the Cyrus IMAP Server Since Version 1.5.19

Most of the charset.c code (and mkchartable.c code) has been
replaced thanks to John Myers).

Bug fix in message.c to look up headers in the cache when
they're in the cache correctly; thanks to Chris Newman for the
fix.

Code cleanup here and there (thanks to Bruce Balden).

Annoying (and confusing) lines in syslog every time a message
was delivered if deliver was compiled using dbm saying that deliver
was "unable to fetch entry" have been removed.

Content-Disposition lines were being parsed improperly. If they
had no optional arguments, they were being ignored as if they were
syntactically incorrect. This is fixed, but imapd will continue to
serve wrong information unless cyrus.caches are rebuilt (with
reconstruct) for any message that was added to the mailbox before
this bug was fixed.

The arbitron program now takes a mailbox pattern argument for
the mailbox to run on. The manpage always said it did anyway.

Uninitialized variable fixed in imapd.c with the shutdown file
code.

Minor tweaks to purify build config.

Fix minor memory leak in proc.c where procfname wasn't being
free'd.

Fix brain fart in auth_krb_pts.c where a CLOSE() was done to a
DB handle BEFORE we access the data read from the DB database. This
means we were copying free'd memory into the groups list. Note this
only affects people using DB, AFS and ptloader.

Committed minor syslog log level changes in ptloader and
deliver.

make distclean now does what it's supposed to.

Possibly misnamed experimental --enable-static-libraries switch
that tries to do a good job of building binaries with whatever
static libraries are availible. If you use this, you do so at your
own risk, and if it fails, we will disavow all knowledge of you and
your team. Good luck, Jim.

Add optional third argument to imtest for it to take input from
a file. This is a gross hack.

Changes to the Cyrus IMAP Server Since Version 1.5.14

LIST now honors the reference argument.

This behavior can be turned off by a configuration option
imapd.conf--which may be desirable because of certain clients that
ask for a "mail directory" setting for IMAP which will now cause
problems when it was ignored before. (The default is for the
reference argument to be honored.)

The arbitron program now takes a mailbox pattern
argument for the mailbox to run on. The manpage always said it did
anyway.

Added --disable-server switch to optionally prevent compilation
of server to help sites that just want client libraries (so cyradm
and libcyrus can be compiled on remote systems without installing
stuff into /usr/cyrus/bin, etc.) For now, the server is still
configured in this case, and a Makefile is generated. This could
change in future versions.

Fixed a mmap leak in index.c in index_search_evaluate that
caused problems on complex searches. Thanks to Jeff Schiller for
pointing this out. Fixed a potential leak in mboxlist.c that
happened if a rename went awry. Thanks to Chris Newman for pointing
this out.

Fixed a bug in LIST and LSUB code so that user.* mailboxes will
be printed on every LIST instead of just the first one.

Implemented the POP3 Extension Mechanism, RFC 2449, in
order to advertise the capabilities already supported.

Fixed a bug in mailbox.c that disallowed MUTF-7 representations
of ASCII characters when it shouldn't have. (Thanks to John Myers
for providing a fix and to Per Steinar Iversen for telling me that
I didn't do it before.)

More cleanup the ptloader/auth_krb_pts code. If you use
Kerberos and IMSP, you *MUST* pick up cyrus-imspd-v1.5a6 (or
newer).

A few configure tweaks.

Duplicate delivery changes:

Split out duplicate delivery elimination to multiple files.
This should help reduce the lock contention that normally occurs
with this file. To not clutter config_dir, the files will be
located in a subdirectory named deliverdb, for example
/var/imap/deliverdb. If you don't make this directory,
nothing bad will happen (other than duplicate delivery elimination
will not work).

The time value is now stored as an integer in native byte order
as opposed to converting it to a string before it is stored in the
database.

checkdelivered() now obtains a read lock instead of a write
lock when trying to check for duplicates. Only markdelivered()
grabs a write lock.

Added logic to cause cyradm to abort more cleanly if not given
command line arguments in an interactive session. This gets rid of
the dreaded application-specific intialization failed
messages.

Changes to the Cyrus IMAP Server Since Version 1.5.11

The CREATE command now ignores a trailing hierarchy delimiter
instead of ignoring the CREATE command.

UIDPLUS is now always advertised in CAPABILITY and is always
availible. The UIDPLUS extension is a set of optimizations using
UID values instead of sequence numbers and is described in RFC
2359.

Cyrus no longer rejects messages with 8-bit characters in the
headers. Rather than reject the message, characters with the 8th
bit set are changed to 'X'. Internationalization in headers is
supported by the mechanism specified in RFC 2047 (and RFC
1342).

Changes to the Cyrus IMAP Server Since Version 1.5.10

If ENABLE_EXPERIMENT is set, the server no longer claims to
support OPTIMIZE-1; instead, it claims to support UIDPLUS. The
Getuids command has been removed since it is not in the UIDPLUS
document (draft-myers-imap-optimize-03.txt).

The checks for Tcl in configure are much smarter. The configure
script asks tclsh where its configuration lives, then consults the
shell scripts that have that information. This should work with 7.5
or better, which is what the server requires anyway. (All the
previous checks to look for Tcl libraries are gone; now, configure
runs tclsh and asks it where the Tcl libraries are, then runs the
shell scripts that are in that directory. Since the tclConfig.sh
script may not be in that directory, it looks in .. as well.)

The checks for com_err in configure are a little smarter and
look to see if all the pieces are there before trying to use
them.

Added support for the NAMESPACE extension (if
--enable-experiment is supplied).

Added a "reject8bit" switch to imapd.conf. If set to "true",
messages containing 8-bit-set characters in the headers are
rejected (the previous behavior); if set to "false" or left to the
default value, messages containing 8-bit-set characters have these
characters changed to a constant character ('X').

Added the "fud" program. This is an interm hack designed to
allow allow finger information to be retrieved for cyrus users.
This is experimental and it is not recommend that services be built
arround this feature, since it is likely to be removed in a future
release of the IMAP server.

Bug fix: User defined flags now work properly.

Changes to the Cyrus IMAP Server Since Version 1.5.2

Fixed a bug with word alignment on Solaris using Kerberos
compiled with Sun's CC. (Several patches were submitted; thanks to
everyone who did so.)

Patches from John Myers, including more glob fixes.

Use the default hash function from DB. Note that this means
that the existing delivered.db and ptscache.db is
NOT compatible with this release. These files should be
removed.

Provide two debugging programs that dump the databases:
ptdump and dump_deliverdb.

Multiple changes to ptloader. added a bunch of flags; let it
reauthenticate on its own; added support perl wrapper; added bunch
of debugging information/output; bunch of other cleanups

The mailboxes file is now closed if it isn't likely to be
referenced, hopefully preventing old mailboxes files from hanging
around in memory as frequently.

Added a patch from Eric Hagberg to work around a possible
deadlock condition in mboxlist.c where rename isn't atomic.

Patch from John Myers to get rid of cyrus.seen corruption in
bsearch_mem.

Patch from John Myers and to allow ISO-8859-1 characters in
mailbox names.

Makedepend still runs, and still generates warnings, but these
are squirrled away in makedepend.log.

On mailbox delete, the server will no longer try and unlink
".." and "." as we got a report that it seriously breaks one file
system (even as non-root).

Added some support for Netscape's very misleading "Administrate
My Mail" menu option in Communicator. Allows for a URL to be set in
imapd.conf for the page to refer users to; needs to be turned on
with --enable-netscapehack at compile time to enable it.

Bug swap: imtest quotes password with a non-synchronizing
literal in order to allow weird characters like ) in passwords. But
it doesn't look to see if the server supports non-synchronizing
literals.

If the file "msg/motd" exists, the first line is now
sent to clients upon login.

The makedepend supplied should now run on Solaris Intel.
(thanks to Chris Newman)

Added some hacks to pwcheck.c for Linux and Digital Unix where
the default protections on the socket don't allow the cyrus user to
read it. (thanks to Lyndon Nerenberg)

Bug fix: Flags beginning with \ are system flags and users can
only create the defined flags. The code to do this before was
confused.

The configure scripts and makefiles have some random
fixes.

Added a contrib directory for reasons of laziness in collecting
patches, not all of which should be in the distribution.

ptloader can now renew its AFS authentication by reading from a
srvtab file.

The configure script now looks for a libcom_err and can use an
installed one if one exists.

Other small bug fixes.

Changes to the Cyrus IMAP Server Since Version 1.5

Bug fix: RENAME corrupted mailboxes if they had been EXPUNGEd.
(may have only happened with INBOX, which Pine tickles once a
month.)

Bug fix: auth_newstate now initializes its structures.

Bug fix: pop3d.c, a printf was changed to prot_printf.

Cyrus now sends X-NON-HIERARCHICAL-RENAME to alert clients that
it is not handling RENAME in an IMAP4rev1 compliant manner. This
will be fixed in a subsequent release.

Bug fix: imclient_autenticate now does resolution on the
hostname before authenticating to it. This caused problems when
authenticating to an address that was a CNAME.

Bug fix: LIST %.% (and other multiple hierarchy delimiter
matches) works properly. Several other glob.c fixes are included as
well.

Bug fix: a fetch of exclusively BODY[HEADER.FIELDS...] should
now work properly.

Bug fix: reconstruct now considers a nonexistant INN news
directory to be empty; this makes reconstruct fix the cyrus.* files
in the imap news partition.

Added a manpage for imclient.

Fixed a few other minor bugs.

Changes to the Cyrus IMAP Server Since Version 1.4

Implemented the "IMAP4rev1" protocol commands. (The
hierarchical behavior of RENAME, which was added late to the
IMAP4rev1 specification, is not implemented.) Changes the minor
version number of the cyrus mailbox database format to 1.
IMPORTANT: it is necessary to run the command
"reconstruct -r" as the cyrus user after upgrading the
Cyrus IMAP software from version 1.4 or earlier.

If the file "msg/shutdown" exits in the configuration
directory, the IMAP server will issue the first line in the file in
an untagged BYE message and shut down.

Bug fix: Renaming a mailbox to itself, in order to move it to a
different partition, was not working correctly.

Update the AUTH support in pop3d to conform to the latest draft
specification.

Update cyradm to use Tcl 7.5 instead of Tcl 7.4

Re-implement large sections of the netnews support. It no
longer requires modifications to INN, as it now expunges the index
entries for expired/canceled articles upon select of the
newsgroup.

Implement newsspool configuration option, for separating the
directories for the news spool and the various cyrus.* IMAP server
index files.

Bug fix: permit empty flag list in APPEND command

Bug fix: deal with truncated Date: header values.

Bug fix: memory mapping code, deal better with 0-length maps,
since mmap() appears to crap out on that boundary condition.

Portability fix: if no strerror, have to define
NEED_SYS_ERRLIST.

Bug fix: used append instead of lappend in cyradmin, preventing
use of any port other than IMAP.

When the client is streaming its commands, the IMAP server
attempts to stream its tagged responses.

Modify zephyr support to compile without Kerberos support.

Add a bunch of prototype declararations to the code.

In deliver, change the MULT support to instead use the LMTP
syntax.

imclient: support tagged intermediate replies and a default
callback.

Implement some experimental protocol extensions for optimizing
disconnected use resynchronization. Most extensions are disabled by
default. Client authors should contact info-cyrus@andrew.cmu.edu if
they wish to experiment with these.

Bug fix: in imclient.c, don't free NULL pointers and don't call
htons() on the output of getservbyname(). Have to abort sending the
command if you get a tagged response when sending a literal.

The auth_xxx routines now create/take a state argument instead
of maintaining internal static state.

Solaris mktime() is buggy in some releases. Create and use
mkgmtime() for parsing date strings.

Message parsing routines now use memory mapping, though they
still copy data around in line-sized buffers.

Changes to the Cyrus IMAP Server Since Version 1.3

Implemented the "reconstruct -m" command, for
reconstructing the mailboxes file. IMPORTANT: it is
necessary to run the command "reconstruct -m" as the cyrus
user after upgrading the Cyrus IMAP software from version 1.3 or
earlier. We recommend you make a backup copy of the
mailboxes file in the configuration directory before
performing the conversion.

Mailbox names are now case sensitive, not case insensitive.
"INBOX" is the exception, and is treated as being
case-insensitive.

Personal mailboxes now appear to their owners as being under
the "INBOX." hierarchy. For example, the mailbox
"user.bovik.work" appears to the user "bovik" as
"INBOX.work". The user may still refer to the mailbox with
the name "user.bovik.work".

Previously, the code used "anybody" as the name of the
group that all users are in, but the documentation used the name
"anyone". Changed the code to match the documentation. The
name "anybody" will be canonicalized to the name
"anyone".

The install document now gives different recommended locations
for the server databases. The recommended location of the
configuration directory changed from "/usr/cyrus" to
"/var/imap" and the recommended location of the default
partition directory changed from "/usr/spool/cyrus" to
"/var/spool/imap". It is NOT necessary to change
the locations of these directories when upgrading from version 1.3
or earlier of the Cyrus IMAP server software. If you do wish to
change the locations of these directories to match the new
recommendations, simply rename the directories and change the
appropriate values in your /etc/imapd.conf file.

Created a "make install" rule. See the installation document for all the new
corresponding configure options. Note the recommended
location of the "imapd", "pop3d", and
"deliver" programs has changed, this change needs to be
reflected in the "inetd.conf" and "sendmail.cf"
files.

New "login_unix_pwcheck" module and "pwcheck"
daemon, for improved shadow password support. See the
"pwcheck/README.pwcheck" file in the distribution for
details.

Redesigned the implementation of SEARCH CHARSET.
Sites that wish to search for non-ASCII characters in the headers
of existing mailboxes must run reconstruct on all their
mailboxes after upgrading to this version.

Added AUTH and KPOP support to the POP3 server.

Added search support for the ISO-2022-JP character set.

Replaced the search engine with a partial Boyer-Moore
algorithm.

Special-case optimized searching US-ASCII text.

Fixed a bug which caused the message parser to spin-loop on a
particular degenerate invalid-MIME case.

Fixed a performance bug in the message parser.

Tracked last-minute changes to the IMAP4 protocol.

Fixed a bug in UNSUBSCRIBE which caused too many
subscriptions to be removed.