                   Changes to the Cyrus IMAP Server

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. 
      * Permit SPACE in mailbox names. 
      * Permit the "modified UTF-7" internationalized mailbox name
        convention. 
      * "User opened mailbox" messages are now logged at the DEBUG level
        instead of the INFO level. 
      * Added -q (ignore quota) switch to deliver. 
      * New "krbck" program for diagnosing common kerberos problems. 
      * auth_unix no longer requires users to be in the passwd file. 
      * AUTHENTICATE command now reports the protection mechanism in use in
        the text of the tagged OK response 
      * Make MAILBOX_BADFORMAT and MAILBOX_NOTSUPPORTED temporary errors. 
      * Use the header cache for SEARCH HEADER 
      * Use "unspecified-domain" instead of server's hostname to fill out
        RFC 822 addresses without the "@domain" part. 
      * Make "reconstruct -r" with no args reconstruct every mailbox. 
      * The configure script now defaults to using unix_pwcheck instead of
        unix if the file /etc/shadow exists. 
      * The location of the pwcheck socket directory now defaults to
        "/var/ptclient/". It is controlled by the "--with-statedir=DIR"
        option, which defaults to "/var". 
      * Bug fix: by using an certain address form, one could deliver to a
        user's mailbox bypassing the ACL's. 
      * Bug fix: un-fold header lines when parsing for the ENVELOPE. 
      * Delete quota roots when deleting the last mailbox that uses them.
        Doesn't catch all cases, but should get over 99% of them. 
      * Implement plaintextloginpause configuration option, imposes
        artificial delay on plaintext password logins. 
      * Implement popminpoll configuration option, limits frequency of POP3
        logins. 
      * Implement AFS PT server group support. 
      * Remove persistence of POP3 LAST value and remove Status: hack 
      * Support the new ACL command set in the IMAP server. 
      * Bug fix: Have to initialize reply to 0 in pop3d. Was causing POP3
        server to occasionally drop the connection during authentication. 
      * Bug fix: The COPY command wasn't issuing a [TRYCREATE] when
        appropriate for sub-mailboxes of INBOX. 
      * Bug fix: Renaming a mailbox wasn't correctly changing its
        UIDVALIDITY. 
      * 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. 
      * In Makefiles, change $(AR) to ar -- HPUX make is defective. 
      * In deliver, use HAVE_LIBDB to select use of db over dbm 
      * Add map_stupidshared mapping module for older versions of Digital
        Unix. It's not quite as bad as HPUX, but... 
      * 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. 
      * Renamed the "login_unix_shadow" module to "login_unix_getspnam". 
      * Added a mail notification mechanism, using Zephyr. 
      * Added a feature to automatically create user IMAP accounts.
        Controlled by the "autocreatequota" config option. 
      * Added the "logtimestamps" config option, for putting timestamp
        information into protocol telemetry logs. 
      * Beefed up the Kerberos checks in Configure to ensure the DES
        library routines exist. 
      * On some systems, the "echo" command with no arguments emits a
        newline. Changed the installation document to instead use the
        "true" command to create the "mailboxes" file. 
      * Store a redundant copy of a mailbox's ACL in the cyrus.header file,
        so "reconstruct -m" may later use it as a backup. 
      * Had to remove the declaration of tcl_RcFileName for the latest
        version of Tcl. 
      * Make much more extensive use of memory mapping. Replace the binary
        search module with one that searches a memory mapped area. 
      * Replaced the yacc-based RFC822 address parser with a hand-coded
        one. 
      * Replaced the et (error table) libary with a version that doesn't
        require lex or yacc. Remove the lex/yacc checking from Configure. 
      * Safety feature: most programs now refuse to run as root. 
      * Bug fix: Issue [TRYCREATE] tag on COPY command when appropriate. 
      * Bug fix: The quoted-printable decoder wasn't ignoring trailing
        whitespace, as required by MIME. 
      * Bug fix: Don't spew cascade errors if the server gets an EOF
        during/after reading an APPEND literal. 
      * Bug fix: gmtmoff_gmtime.c was returning results with the wrong
        sign. 
      * Bug fix: imclient_send was appending spaces to %d and %u and the
        response parser was not handling responses that did not contain a
        space after the keyword. 
      * Bug fix: rmnews wasn't removing some (un-indexed) article files
        correctly. 
      * Completely disabled the dropoff code for now. It will be completely
        replaced when IMSP integration is implemented 
      * Added workaround for the Linux mkdir() problem. 
      * In Configure, use a more direct test for a working shared-memory
        mmap 
      * In collectnews, avoid O(n**2) behavior when processing articles
        that have already expired. 
      * Bug fix: append_addseen() would screw up if no messages were
        previously seen. 
      * Added the CMU-specific amssync and cmulocal directories. 
      * Use memmove instead of bcopy. 
      * Implemented the first pass of SMTP/MULT support in deliver. 
      * Added cacheid parameter to auth_setid(), for AFS PT server support. 

Changes to the Cyrus IMAP Server Since Version 1.2

      * Fixed bug in character set code that broke text searches. Sites
        which care about searching headers need to reconstruct their
        existing mailboxes. 

Changes to the Cyrus IMAP Server Since Version 1.1-Beta

      * Add support for UIDVALIDITY special information token. 
      * Add syncnews and arbitron programs. 
      * Redo duplicate delivery elimination in deliver. 
      * Bug fixed: Must re-read files after acquiring a lock. Cannot trust
        the mtime of a file to increment when writing the file--file could
        be written to multiple times in the same second. 
      * Bug fixed: EXAMINE command should not affect \Recent status. 
      * Update the user's \Recent high-water-mark when we report new
        messages. 
      * Portability changes 
      * Upgrade to autoconf 2.1 
      * Allow privacy to be turned off at compile-time with
        --disable-privacy configure switch. 
      * Fix typo in cyradm preventing "all" from being recognized. 
      * Include map_private.c memory mapping module for systems like HPUX
        which have half-working mmap() implementations. 
      * Switch to using UTF-8 for internal search format. Sites which care
        about internationalized searching of headers need to reconstruct
        all their existing mailboxes. 
      * Fix some errors in the iso-8859-* tables. 
      * Add and correct a bunch of case-independence mappings in the
        character tables. 
      * First pass at implementing the STATUS extension; disabled for
        release. 
      * First pass at implementing IMAP/IMSP server integration. Not ready
        for general use. 
      * Add new_cred and free_cred mechanisms to authentication modules. 
      * Don't complain when doing "reconstruct -r foo" and foo isn't a
        mailbox. 
      * Add IMAP_QUOTAROOT_NONEXISTENT error code. 
      * Bug fix: Avoid divide by zero when quota is zero 
      * Bug fix: In an error case of the ACL handling code, we have to
        restore tab before breaking out of loop. 
      * Fix file descriptor leak in quota system. 
      * Change a bunch of int variables to unsigned. 
      * Better error reporting on reads that end up short. 

Changes to the Cyrus IMAP Server Since Version 1.0-Beta

      * Improved installation document. 
      * New "cyradm" administrative client. 
      * Changed the syslog facility from "local4" to "local6". 
      * Removed the renounce setuid check in "deliver". The "deliver"
        program must now be non-executable by other. 
      * Fixed a typo in the parsing of SEARCH DELETED. (This bug constantly
        got tripped by newer C-clients.) 
      * 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. 
      * Added a bunch more "configure" options. 
      * Ported to HPUX. 
      * Fixed a bug in the LIST/LSUB \Noselect code. 
      * Fixed bug in the globbing code which caused the "*%" pattern to
        work incorrectly. 
      * Client-side Kerberos support is now conditionalized on
        HAVE_ACTE_KRB, which is set by configure. 
      * Fixed some invalid buffer-alignment assumptions in the Kerberos
        code. 
      * Made the lexers compatible with flex. Configure now looks for and
        prefers to use flex and bison/byacc. 
      * Made the IMAP server check for the existence of the mailboxes file
        upon startup, in order to give a more informative error message for
        this common configuration error. 
      * Fixed other minor bugs. 

