v2.2.33.2 2017-10-20  Timo Sirainen <tss@iki.fi>

	- doveadm: Fix crash in proxying (or dsync replication) if remote is
	  running older than v2.2.33
	- auth: Fix memory leak in %{ldap_dn}
	- dict-sql: Fix data types to work correctly with Cassandra

v2.2.33.1 2017-10-10  Timo Sirainen <tss@iki.fi>

	- dovecot-lda was logging to stderr instead of to the log file.

v2.2.33 2017-10-10  Timo Sirainen <tss@iki.fi>

	* doveadm director commands wait for the changes to be visible in the
	  whole ring before they return. This is especially useful in testing.
	* Environments listed in import_environment setting are now set or
	  preserved when executing standalone commands (e.g. doveadm)

	+ doveadm proxy: Support proxying logs. Previously the logs were
	  visible only in the backend's logs.
	+ Added %{if}, see https://wiki2.dovecot.org/Variables#Conditionals
	+ Added a new notify_status plugin, which can be used to update dict
	  with current status of a mailbox when it changes. See
	  https://wiki2.dovecot.org/Plugins/NotifyStatus
	+ Mailbox list index can be disabled for a namespace by appending
	  ":LISTINDEX=" to location setting.
	+ dsync/imapc: Added dsync_hashed_headers setting to specify which
	  headers are used to match emails.
	+ pop3-migration: Add pop3_migration_ignore_extra_uidls=yes to ignore
	  mails that are visible in POP3 but not IMAP. This could happen if
	  new mails were delivered during the migration run.
	+ pop3-migration: Further improvements to help with Zimbra
	+ pop3-migration: Cache POP3 UIDLs in imapc's dovecot.index.cache
	  if indexes are enabled. These are used to optimize incremental syncs.
	+ cassandra, dict-sql: Use prepared statements if protocol version>3.
	+ auth: Added %{ldap_dn} variable for passdb/userdb ldap
	- acl: The "create" (k) permission in global acl-file was sometimes
	  ignored, allowing users to create mailboxes when they shouldn't have.
	- sdbox: Mails were always opened when expunging, unless
	  mail_attachment_fs was explicitly set to empty.
	- lmtp/doveadm proxy: hostip passdb field was ignored, which caused
	  unnecessary DNS lookups if host field wasn't an IP
	- lmtp proxy: Fix crash when receiving unexpected reply in RCPT TO
	- quota_clone: Update also when quota is unlimited (broken in v2.2.31)
	- mbox, zlib: Fix assert-crash when accessing compressed mbox
	- doveadm director kick -f parameter didn't work
	- doveadm director flush <host> resulted flushing all hosts, if <host>
	  wasn't an IP address.
	- director: Various fixes to handling backend/director changes at
	  abnormal times, especially while ring was unsynced. These could have
	  resulted in crashes, non-optimal behavior or ignoring some of the
	  changes.
	- director: Use less CPU in imap-login processes when moving/kicking
	  many users.
	- lmtp: Session IDs were duplicated/confusing with multiple RCPT TOs
	  when lmtp_rcpt_check_quota=yes
	- doveadm sync -1 fails when local mailboxes exist that do not exist
	  remotely. This commonly happened when lazy_expunge mailbox was
	  autocreated when incremental sync expunged mails.
	- pop3: rawlog_dir setting didn't work


v2.2.32 2017-08-24  Timo Sirainen <tss@iki.fi>

	* imapc: Info-level line is logged every time when successfully
	  connected to the remote server. This includes local/remote IP/port,
	  which can be useful for matching against external logs.
	* config: Log a warning if plugin { key=no } is used explicitly.
	  v2.3 will support "no" properly in plugin settings, but for now
	  any value at all for a boolean plugin setting is treated as "yes",
	  even if it's written as explicit "no". This change will now warn
	  that it most likely won't work as intended.

	+ Various optimizations to avoid accessing files/directories when it's
	  not necessary. Especially avoid accessing mail root directories when
	  INDEX directories point to a different filesystem.
	+ mail_location can now include ITERINDEX parameter. This tells Dovecot
	  to perform mailbox listing from the INDEX path instead of from the
	  mail root path. It's mainly useful when the INDEX storage is on a
	  faster storage.
	+ mail_location can now include VOLATILEDIR=<path> parameter. This
	  is used for creating lock files and in future potentially other
	  files that don't need to exist permanently. The path could point to
	  tmpfs for example. This is especially useful to avoid creating lock
	  files to NFS or other remote filesystems. For example:
	  mail_location=sdbox:~/sdbox:VOLATILEDIR=/tmp/volatile/%2.256Nu/%u
	+ mail_location's LISTINDEX=<path> can now contain a full path.
	  This allows storing mailbox list index to a different storage
	  than the rest of the indexes, for example to tmpfs.
	+ mail_location can now include NO-NOSELECT parameter. This
	  automatically deletes any \NoSelect mailboxes that have no children.
	  These mailboxes are sometimes confusing to users.
	+ mail_location can now include BROKENCHAR=<char> parameter. This can
	  be useful with imapc to access mailbox names that aren't valid mUTF-7
	  charset from remote servers.
	+ If mailbox_list_index_very_dirty_syncs=yes, the list index is no
	  longer refreshed against filesystem when listing mailboxes. This
	  allows the mailbox listing to be done entirely by only reading the
	  mailbox list index.
	+ Added mailbox_list_index_include_inbox setting to control whether
	  INBOX's STATUS information should be cached in the mailbox list
	  index. The default is "no", but it may be useful to change it to
	  "yes", especially if LISTINDEX points to tmpfs.
	+ userdb can return chdir=<path>, which override mail_home for the
	  chdir location. This can be useful to avoid accessing home directory
	  on login.
	+ userdb can return postlogin=<socket> to specify per-user imap/pop3
	  postlogin socket path.
	+ cassandra: Add support for result paging by adding page_size=<n>
	  parameter to the connect setting.
	+ dsync/imapc, pop3-migration plugin: Strip also trailing tabs from
	  headers when matching mails. This helps with migrations from Zimbra.
	+ imap_logout_format supports now %{appended} and %{autoexpunged}
	+ virtual plugin: Optimize IDLE to use mailbox list index for finding
	  out when something has changed.
	+ Added apparmor plugin. See https://wiki2.dovecot.org/Plugins/Apparmor
	- virtual plugin: A lot of fixes. In many cases it was also working
	  very inefficiently or even incorrectly.
	- imap: NOTIFY parameter parsing was incorrectly "fixed" in v2.2.31.
	  It was actually (mostly) working in previous versions, but broken
	  in v2.2.31.
	- Modseq tracking didn't always work correctly. This could have caused
	  imap unhibernation to fail or IMAP QRESYNC/CONDSTORE extensions to
	  not work perfectly.
	- mdbox: "Inconsistency in map index" wasn't fixed automatically
	- dict-ldap: %variable values used in the LDAP filter weren't escaped.
	- quota=count: quota_warning = -storage=.. was never executed (try #2).
	  v2.2.31 fixed it for -messages, but not for -storage.
	- imapc: >= 32 kB mail bodies were supposed to be cached for subsequent
	  FETCHes, but weren't.
	- quota-status service didn't support recipient_delimiter
	- acl: Don't access dovecot-acl-list files with acl_globals_only=yes
	- mail_location: If INDEX dir is set, mailbox deletion deletes its
	  childrens' indexes. For example if "box" is deleted, "box/child"
	  index directory was deleted as well (but mails were preserved).
	- director: v2.2.31 caused rapid reconnection loops to directors
	  that were down.

v2.2.31 2017-06-26  Timo Sirainen <tss@iki.fi>

	* LMTP: Removed "(Dovecot)" from added Received headers. Some
	  installations want to hide it, and there's not really any good reason
	  for anyone to have it.

	+ Add ssl_alt_cert and ssl_alt_key settings to add support for
	  having both RSA and ECDSA certificates.
	+ dsync/imapc, pop3-migration plugin: Strip trailing whitespace from
	  headers when matching mails. This helps with migrations from Zimbra.
	+ acl: Add acl_globals_only setting to disable looking up
	  per-mailbox dovecot-acl files.
	+ Parse invalid message addresses better. This mainly affects the
	  generated IMAP ENVELOPE replies.
	- v2.2.30 wasn't fixing corrupted dovecot.index.cache files properly.
	  It could have deleted wrong mail's cache or assert-crashed.
	- v2.2.30 mail-crypt-acl plugin was assert-crashing
	- v2.2.30 welcome plugin wasn't working
	- Various fixes to handling mailbox listing. Especially related to
	  handling nonexistent autocreated/autosubscribed mailboxes and ACLs.
	- Global ACL file was parsed as if it was local ACL file. This caused
	  some of the ACL rule interactions to not work exactly as intended.
	- auth: forward_* fields didn't work properly: Only the first forward
	  field was working, and only if the first passdb lookup succeeded.
	- Using mail_sort_max_read_count sometimes caused "Broken sort-*
	  indexes, resetting" errors.
	- Using mail_sort_max_read_count may have caused very high CPU usage.
	- Message address parsing could have crashed on invalid input.
	- imapc_features=fetch-headers wasn't always working correctly and
	  caused the full header to be fetched.
	- imapc: Various bugfixes related to connection failure handling.
	- quota=imapc sent unnecessary FETCH RFC822.SIZE to server when
	  expunging mails.
	- quota=count: quota_warning = -storage=.. was never executed
	- quota=count: Add support for "ns" parameter
	- dsync: Fix incremental syncing for mails that don't have Date or
	  Message-ID headers.
	- imap: Fix hang when client sends pipelined SEARCH +
	  EXPUNGE/CLOSE/LOGOUT.
	- oauth2: Token validation didn't accept empty server responses.
	- imap: NOTIFY command has been almost completely broken since the
	  beginning. I guess nobody has been trying to use it.


v2.2.30.2 2017-06-06  Timo Sirainen <tss@iki.fi>

	- auth: Multiple failed authentications within short time caused
	  crashes
	- push-notification: OX driver crashed at deinit

v2.2.30.1 2017-05-31  Timo Sirainen <tss@iki.fi>

	- quota_warning scripts weren't working in v2.2.30
	- vpopmail still wasn't compiling

v2.2.30 2017-05-30  Timo Sirainen <tss@iki.fi>

	* auth: Use timing safe comparisons for everything related to
	  passwords. It's unlikely that these could have been used for
	  practical attacks, especially because Dovecot delays and flushes all
	  failed authentications in 2 second intervals. Also it could have
	  worked only when passwords were stored in plaintext in the passdb.
	* master process sends SIGQUIT to all running children at shutdown,
	  which instructs them to close all the socket listeners immediately.
	  This way restarting Dovecot should no longer fail due to some
	  processes keeping the listeners open for a long time.

	+ auth: Add passdb { mechanisms=none } to match separate passdb lookup
	+ auth: Add passdb { username_filter } to use passdb only if user
	  matches the filter. See https://wiki2.dovecot.org/PasswordDatabase
	+ dsync: Add dsync_commit_msgs_interval setting. It attempts to commit
	  the transaction after saving this many new messages. Because of the
	  way dsync works, it may not always be possible if mails are copied
	  or UIDs need to change.
	+ imapc: Support imapc_features=search without ESEARCH extension.
	+ imapc: Add imapc_features=fetch-bodystructure to pass through remote
	  server's FETCH BODY and BODYSTRUCTURE.
	+ imapc: Add quota=imapc backend to use GETQUOTA/GETQUOTAROOT on the
	  remote server.
	+ passdb imap: Add allow_invalid_cert and ssl_ca_file parameters.
	+ If dovecot.index.cache corruption is detected, reset only the one
	  corrupted mail instead of the whole file.
	+ doveadm mailbox status: Add "firstsaved" field.
	+ director_flush_socket: Add old host's up/down and vhost count as parameters
	- More fixes to automatically fix corruption in dovecot.list.index
	- dsync-server: Fix support for dsync_features=empty-header-workaround
	- imapc: Various bugfixes, including infinite loops on some errors
	- IMAP NOTIFY wasn't working for non-INBOX if IMAP client hadn't
	  enabled modseq tracking via CONDSTORE/QRESYNC.
	- fts-lucene: Fix it to work again with mbox format
	- Some internal error messages may have contained garbage in v2.2.29
	- mail-crypt: Re-encrypt when copying/moving mails and per-mailbox keys
	  are used. Otherwise the copied mails can't be opened.
	- vpopmail: Fix compiling

v2.2.29.1 2017-04-12  Timo Sirainen <tss@iki.fi>

	- imapc reconnection fix was forgotten from 2.2.29 release, which also
	  made "make check" fail in a unit test
	- dict-sql: Merging multiple UPDATEs to a single statement wasn't
	  actually working.
	- Fixed building with vpopmail

v2.2.29 2017-04-10  Timo Sirainen <tss@iki.fi>

	* passdb/userdb dict: Don't double-expand %variables in keys. If dict
	  was used as the authentication passdb, using specially crafted
	  %variables in the username could be used to cause DoS (CVE-2017-2669)
	* When Dovecot encounters an internal error, it logs the real error and
	  usually logs another line saying what function failed. Previously the
	  second log line's error message was a rather uninformative "Internal
	  error occurred. Refer to server log for more information." Now the
	  real error message is duplicated in this second log line.
	* lmtp: If a delivery has multiple recipients, run autoexpunging only
	  for the last recipient. This avoids a problem where a long
	  autoexpunge run causes LMTP client to timeout between the DATA
	  replies, resulting in duplicate mail deliveries.
	* config: Don't stop the process due to idling. Otherwise the
	  configuration is reloaded when the process restarts.
	* mail_log plugin: Differentiate autoexpunges from regular expunges
	* imapc: Use LOGOUT to cleanly disconnect from server.
	* lib-http: Internal status codes (>9000) are no longer visible in logs
	* director: Log vhost count changes and HOST-UP/DOWN

	+ quota: Add plugin { quota_max_mail_size } setting to limit the
	  maximum individual mail size that can be saved.
	+ imapc: Add imapc_features=delay-login. If set, connecting to the
	  remote IMAP server isn't done until it's necessary.
	+ imapc: Add imapc_connection_retry_count and
	  imapc_connection_retry_interval settings.
	+ imap, pop3, indexer-worker: Add (deinit) to process title before
	  autoexpunging runs.
	+ Added %{encrypt} and %{decrypt} variables
	+ imap/pop3 proxy: Log proxy state in errors as human-readable string.
	+ imap/pop3-login: All forward_* extra fields returned by passdb are
	  sent to the next hop when proxying using ID/XCLIENT commands. On the
	  receiving side these fields are imported and sent to auth process
	  where they're accessible via %{passdb:forward_*}. This is done only
	  if the sending IP address matches login_trusted_networks.
	+ imap-login: If imap_id_retain=yes, send the IMAP ID string to
	  auth process. %{client_id} expands to it in auth process. The ID
	  string is also sent to the next hop when proxying.
	+ passdb imap: Use ssl_client_ca_* settings for CA validation.
	- fts-tika: Fixed crash when parsing attachment without
	  Content-Disposition header. Broken by 2.2.28.
	- trash plugin was broken in 2.2.28
	- auth: When passdb/userdb lookups were done via auth-workers, too much
	  data was added to auth cache. This could have resulted in wrong
	  replies when using multiple passdbs/userdbs.
	- auth: passdb { skip & mechanisms } were ignored for the first passdb
	- oauth2: Various fixes, including fixes to crashes
	- dsync: Large Sieve scripts (or other large metadata) weren't always
	  synced.
	- Index rebuild (e.g. doveadm force-resync) set all mails as \Recent
	- imap-hibernate: %{userdb:*} wasn't expanded in mail_log_prefix
	- doveadm: Exit codes weren't preserved when proxying commands via
	  doveadm-server. Almost all errors used exit code 75 (tempfail).
	- ACLs weren't applied to not-yet-existing autocreated mailboxes.
	- Fixed a potential crash when parsing a broken message header.
	- cassandra: Fallback consistency settings weren't working correctly.
	- doveadm director status <user>: "Initial config" was always empty
	- imapc: Various reconnection fixes.

v2.2.28 2017-02-24  Timo Sirainen <tss@iki.fi>

	* director: "doveadm director move" to same host now refreshes user's
	  timeout. This allows keeping user constantly in the same backend by
	  just periodically moving the user there.
	* When new mailbox is created, use initially INBOX's
	  dovecot.index.cache caching decisions.
	* Expunging mails writes GUID to dovecot.index.log now only if the
	  GUID is quickly available from index/cache.
	* pop3c: Increase timeout for PASS command to 5 minutes.
	* Mail access errors are no longer ignored when searching or sorting.
	  With IMAP the untagged SEARCH/SORT reply is still sent the same as
	  before, but NO reply is returned instead of OK.

	+ Make dovecot.list.index's filename configurable. This is needed when
	  there are multiple namespaces pointing to the same mail root
	  (e.g. lazy_expunge namespace for mdbox).
	+ Add size.virtual to dovecot.index when folder vsizes are accessed
	  (e.g. quota=count). This is mainly a workaround to avoid slow quota
	  recalculation performance when message sizes get lost from
	  dovecot.index.cache due to corruption or some other reason.
	+ auth: Support OAUTHBEARER and XOAUTH2 mechanisms. Also support them
	  in lib-dsasl for client side.
	+ auth: Support filtering by SASL mechanism: passdb { mechanisms }
	+ Shrink the mail processes' memory usage by not storing settings
	  duplicated unnecessarily many times.
	+ imap: Add imap_fetch_failure setting to control what happens when
	  FETCH fails for some mails (see example-config).
	+ imap: Include info about last command in disconnection log line.
	+ imap: Created new SEARCH=X-MIMEPART extension. It's currently not
	  advertised by default, since it's not fully implemented.
	+ fts-solr: Add support for basic authentication.
	+ Cassandra: Support automatically retrying failed queries if
	  execution_retry_interval and execution_retry_times are set.
	+ doveadm: Added "mailbox path" command.
	+ mail_log plugin: If plugin { mail_log_cached_only=yes }, log the
	  wanted fields only if it doesn't require opening the email.
	+ mail_vsize_bg_after_count setting added (see example-config).
	+ mail_sort_max_read_count setting added (see example-config).
	+ pop3c: Added pop3c_features=no-pipelining setting to prevent using
	  PIPELINING extension even though it's advertised.

	- Index files: day_first_uid wasn't updated correctly since v2.2.26.
	  This caused dovecot.index.cache to be non-optimal.
	- imap: SEARCH/SORT may have assert-crashed in
	  client_check_command_hangs
	- imap: FETCH X-MAILBOX may have assert-crashed in virtual mailboxes.
	- imap: Running time in tagged command reply was often wrongly 0.
	- search: Using NOT n:* or NOT UID n:* wasn't handled correctly
	- director: doveadm director kick was broken
	- director: Fix crash when using director_flush_socket
	- director: Fix some bugs when moving users between backends
	- imapc: Various error handling fixes and improvements
	- master: doveadm process status output had a lot of duplicates.
	- autoexpunge: If mailbox's rename timestamp is newer than mail's
	  save-timestamp, use it instead. This is useful when autoexpunging
	  e.g. Trash/* and an entire mailbox is deleted by renaming it under
	  Trash to prevent it from being autoexpunged too early.
	- autoexpunge: Multiple processes may have been trying to expunge the
	  same mails simultaneously. This was problematic especially with
	  lazy_expunge plugin.
	- auth: %{passdb:*} was empty in auth-worker processes
	- auth-policy: hashed_password was always sent empty.
	- dict-sql: Merge multiple UPDATEs to a single statement if possible.
	- fts-solr: Escape {} chars when sending queries
	- fts: fts_autoindex_exclude = \Special-use caused crashes
	- doveadm-server: Fix leaks and other problems when process is reused
	  for multiple requests (service_count != 1)
	- sdbox: Fix assert-crash on mailbox create race
	- lda/lmtp: deliver_log_format values weren't entirely correct if Sieve
	  was used. especially %{storage_id} was broken.
	- lmtp_user_concurrency_limit didn't work if userdb changed username

v2.2.27 2016-12-03  Timo Sirainen <tss@iki.fi>

	* dovecot.list.index.log rotation sizes/times were changed so that
	  the .log file stays smaller and .log.2 is deleted sooner.

	+ Added mail_crypt plugin that allows encryption of stored emails.
	  See http://wiki2.dovecot.org/Plugins/MailCrypt
	+ stats: Global stats can be sent to Carbon server by setting
	  stats_carbon_server=ip:port
	+ imap/pop3 proxy: If passdb returns proxy_not_trusted, don't send
	  ID/XCLIENT
	+ Added generic hash modifier for %variables:
	  %{<hash algorithm>;rounds=<n>,truncate=<bits>,salt=s>:field}
	  Hash algorithm is any of the supported ones, e.g. md5, sha1, sha256.
	  Also "pkcs5" is supported using SHA256. For example: %{sha256:user}
	  or %{md5;truncate=32:user}.
	+ Added support for SHA3-256 and SHA3-512 hashes.
	+ config: Support DNS wildcards in local_name, e.g.
	  local_name *.example.com { .. } matches anything.example.com, but
	  not multiple.anything.example.com.
	+ config: Support multiple names in local_name, e.g.
	  local_name "1.example.com 2.example.com" { .. }
	- Fixed crash in auth process when auth-policy was configured and
	  authentication was aborted/failed without a username set.
	- director: If two users had different tags but the same hash,
	  the users may have been redirected to the wrong tag's hosts.
	- Index files may have been thought incorrectly lost, causing
	  "Missing middle file seq=.." to be logged and index rebuild.
	  This happened more easily with IMAP hibernation enabled.
	- Various fixes to restoring state correctly in un-hibernation.
	- dovecot.index files were commonly 4 bytes per email too large. This
	  is because 3 bytes per email were being wasted that could have been
	  used for IMAP keywords.
	- Various fixes to handle dovecot.list.index corruption better.
	- lib-fts: Fixed assert-crash in address tokenizer with specific input.
	- Fixed assert-crash in HTML to text parsing with specific input
	  (e.g. for FTS indexing or snippet generation)
	- doveadm sync -1: Fixed handling mailbox GUID conflicts.
	- sdbox, mdbox: Perform full index rebuild if corruption is detected
	  inside lib-index, which runs index fsck.
	- quota: Don't skip quota checks when moving mails between different
	  quota roots.
	- search: Multiple sequence sets or UID sets in search parameters
	  weren't handled correctly. They were incorrectly merged together.

v2.2.26.0 2016-10-28  Timo Sirainen <tss@iki.fi>

	- Fixed some compiling issues.
	- auth: Fixed assert-crash when using NTLM or SKEY mechanisms and
	  multiple passdbs.
	- auth: Fixed crash when exporting to auth-worker passdb extra fields
	  that had empty values.
	- dsync: Fixed assert-crash in dsync_brain_sync_mailbox_deinit

v2.2.26 2016-10-27  Timo Sirainen <tss@iki.fi>

	* master: Removed hardcoded 511 backlog limit for listen(). The kernel
	  should limit this as needed.
	* doveadm import: Source user is now initialized the same as target
	  user. Added -U parameter to override the source user.
	* Mailbox names are no longer limited to 16 hierarchy levels. We'll
	  check another way to make sure mailbox names can't grow larger than
	  4096 bytes.

	+ Added a concept of "alternative usernames" by returning user_* extra
	  field(s) in passdb. doveadm proxy list shows these alt usernames in
	  "doveadm proxy list" output. "doveadm director&proxy kick" adds
	  -f <passdb field> parameter. The alt usernames don't have to be
	  unique, so this allows creation of user groups and kicking them in
	  one command.
	+ auth: passdb/userdb dict allows now %variables in key settings.
	+ auth: If passdb returns noauthenticate=yes extra field, assume that
	  it only set extra fields and authentication wasn't actually performed.
	+ auth: passdb static now supports password={scheme} prefix.
	+ auth, login_log_format_elements: Added %{local_name} variable, which
	  expands to TLS SNI hostname if given.
	+ imapc: Added imapc_max_line_length to limit maximum memory usage.
	+ imap, pop3: Added rawlog_dir setting to store IMAP/POP3 traffic logs.
	  This replaces at least partially the rawlog plugin.
	+ dsync: Added dsync_features=empty-header-workaround setting. This
	  makes incremental dsyncs work better for servers that randomly return
	  empty headers for mails. When an empty header is seen for an existing
	  mail, dsync assumes that it matches the local mail.
	+ doveadm sync/backup: Added -I <max size> parameter to skip too
	  large mails.
	+ doveadm sync/backup: Fixed -t parameter and added -e for "end date".
	+ doveadm mailbox metadata: Added -s parameter to allow accessing
	  server metadata by using empty mailbox name.
	+ Added "doveadm service status" and "doveadm process status" commands.
	+ director: Added director_flush_socket. See
	  http://wiki2.dovecot.org/Director#Flush_socket
	+ doveadm director flush: Users are now moved only max 100 at a time to
	  avoid load spikes. --max-parallel parameter overrides this.
	+ Added FILE_LOCK_SLOW_WARNING_MSECS environment, which logs a warning
	  if any lock is waited on or kept for this many milliseconds.

	- master process's listener socket was leaked to all child processes.
	  This might have allowed untrusted processes to capture and prevent
	  "doveadm service stop" comands from working.
	- login proxy: Fixed crash when outgoing SSL connections were hanging.
	- auth: userdb fields weren't passed to auth-workers, so %{userdb:*}
	  from previous userdbs didn't work there.
	- auth: Each userdb lookup from cache reset its TTL.
	- auth: Fixed auth_bind=yes + sasl_bind=yes to work together
	- auth: Blocking userdb lookups reset extra fields set by previous
	  userdbs.
	- auth: Cache keys didn't include %{passdb:*} and %{userdb:*}
	- auth-policy: Fixed crash due to using already-freed memory if policy
	  lookup takes longer than auth request exists.
	- lib-auth: Unescape passdb/userdb extra fields. Mainly affected
	  returning extra fields with LFs or TABs.
	- lmtp_user_concurrency_limit>0 setting was logging unnecessary
	  anvil errors.
	- lmtp_user_concurrency_limit is now checked before quota check with
	  lmtp_rcpt_check_quota=yes to avoid unnecessary quota work.
	- lmtp: %{userdb:*} variables didn't work in mail_log_prefix
	- autoexpunge settings for mailboxes with wildcards didn't work when
	  namespace prefix was non-empty.
	- Fixed writing >2GB to iostream-temp files (used by fs-compress,
	  fs-metawrap, doveadm-http)
	- director: Ignore duplicates in director_servers setting.
	- director: Many fixes related to connection handshaking, user moving
	  and error handling.
	- director: Don't break with shutdown_clients=no
	- zlib, IMAP BINARY: Fixed internal caching when accessing multiple
	  newly created mails. They all had UID=0 and the next mail could have
	  wrongly used the previously cached mail.
	- doveadm stats reset wasn't reseting all the stats.
	- auth_stats=yes: Don't update num_logins, since it doubles them when
	  using with mail stats.
	- quota count: Fixed deadlocks when updating vsize header.
	- dict-quota: Fixed crashes happening due to memory corruption.
	- dict proxy: Fixed various timeout-related bugs.
	- doveadm proxying: Fixed -A and -u wildcard handling.
	- doveadm proxying: Fixed hangs and bugs related to printing.
	- imap: Fixed wrongly triggering assert-crash in
	  client_check_command_hangs.
	- imap proxy: Don't send ID command pipelined with nopipelining=yes
	- imap-hibernate: Don't execute quota_over_script or last_login after
	  un-hibernation.
	- imap-hibernate: Don't un-hibernate if client sends DONE+IDLE in one
	  IP packet.
	- imap-hibernate: Fixed various failures when un-hibernating.
	- fts: fts_autoindex=yes was broken in 2.2.25 unless
	  fts_autoindex_exclude settings existed.
	- fts-solr: Fixed searching multiple mailboxes (patch by x16a0)
	- doveadm fetch body.snippet wasn't working in 2.2.25. Also fixed a
	  crash with certain emails.
	- pop3-migration + dbox: Various fixes related to POP3 UIDL
	  optimization in 2.2.25.
	- pop3-migration: Fixed "truncated email header" workaround.

v2.2.25 2016-07-01  Timo Sirainen <tss@iki.fi>

	* lmtp: Start tracking lmtp_user_concurrency_limit and reject already
	  at RCPT TO stage. This avoids MTA unnecessarily completing DATA only
	  to get an error.
	* doveadm: Previously only mail settings were read from protocol
	  doveadm { .. } section. Now all settings are.

	+ quota: Added quota_over_flag_lazy_check setting. It avoids checking
	  quota_over_flag always at startup. Instead it's checked only when
	  quota is being read for some other purpose.
	+ auth: Added a new auth policy service:
	  http://wiki2.dovecot.org/Authentication/Policy
	+ auth: Added PBKDF2 password scheme
	+ auth: Added %{auth_user}, %{auth_username} and %{auth_domain}
	+ auth: Added ":remove" suffix to extra field names to remove them.
	+ auth: Added "delay_until=<timestamp>[+<max random secs>]" passdb
	  extra field. The auth will wait until <timestamp> and optionally some
	  randomness and then return success.
	+ dict proxy: Added idle_msecs=<n> parameter. Support async operations.
	+ Performance improvements for handling large mailboxes.
	+ Added lib-dcrypt API for providing cryptographic functions.
	+ Added "doveadm mailbox update" command
	+ imap commands' output now includes timing spent on the "syncing"
	  stage if it's larger than 0.
	+ cassandra: Added metrics=<path> to connect setting to output internal
	  statistics in JSON format every second to <path>.
	+ doveadm mailbox delete: Added -e parameter to delete only empty
	  mailboxes. Added --unsafe option to quickly delete a mailbox,
	  bypassing lazy_expunge and quota plugins.
	+ doveadm user & auth cache flush are now available via doveadm-server.
	+ doveadm service stop <services> will stop specified services while
	  leaving the rest of Dovecot running.
	+ quota optimization: Avoid reading mail sizes for backends which
	  don't need them (count, fs, dirsize)
	+ Added mailbox { autoexpunge_max_mails=<n> } setting.
	+ Added welcome plugin: http://wiki2.dovecot.org/Plugins/Welcome
	+ fts: Added fts_autoindex_exclude setting.
	- v2.2.24's MIME parser was assert-crashing on mails having truncated
	  MIME headers.
	- auth: With multiple userdbs the final success/failure result wasn't
	  always correct. The last userdb's result was always used.
	- doveadm backup was sometimes deleting entire mailboxes unnecessarily.
	- doveadm: Command -parameters weren't being sent to doveadm-server.
	- If dovecot.index read failed e.g. because mmap() reached VSZ limit,
	  an empty index could have been opened instead, corrupting the
	  mailbox state.
	- imapc: Fixed EXPUNGE handling when imapc_features didn't have modseq.
	- lazy-expunge: Fixed a crash when copying failed. Various other fixes.
	- fts-lucene: Fixed crash on index rescan.
	- auth_stats=yes produced broken output
	- dict-ldap: Various fixes
	- dict-sql: NULL values crashed. Now they're treated as "not found".

v2.2.24 2016-04-26  Timo Sirainen <tss@iki.fi>

	* doveconf now warns if it sees a global setting being changed when
	  the same setting was already set inside some filters. (A common
	  mistake has been adding more plugins to a global mail_plugins
	  setting after it was already set inside protocol { .. }, which
	  caused the global setting to be ignored for that protocol.)
	* LMTP proxy: Increased default timeout 30s -> 125s. This makes it
	  less likely to reach the timeout and cause duplicate deliveries.
	* LMTP and indexer now append ":suffix" to session IDs to make it
	  unique for the specific user's delivery. (Fixes duplicate session
	  ID warnings in stats process.)

	+ Added dict-ldap for performing read-only LDAP dict lookups.
	+ lazy-expunge: All mails can be saved to a single specified mailbox.
	+ mailbox { autoexpunge } supports now wildcards in mailbox names.
	+ doveadm HTTP API: Added support for proxy commands
	+ imapc: Reconnect when getting disconnected in non-selected state.
	+ imapc: Added imapc_features=modseq to access MODSEQs/HIGHESTMODSEQ.
	  This is especially useful for incremental dsync.
	+ doveadm auth/user: Auth lookup performs debug logging if
	  -o auth_debug=yes is given to doveadm.
	+ Added passdb/userdb { auth_verbose=yes|no } setting.
	+ Cassandra: Added user, password, num_threads, connect_timeout and
	  request_timeout settings.
	+ doveadm user -e <value>: Print <value> with %variables expanded.
	- Huge header lines could have caused Dovecot to use too much memory
	  (depending on config and used IMAP commands). (Typically this would
	  result in only the single user's process dying with out of memory
	  due to reaching service { vsz_limit } - not a global DoS).
	- dsync: Detect and handle invalid/stale -s state string better.
	- dsync: Fixed crash caused by specific mailbox renames
	- auth: Auth cache is now disabled passwd-file. It was unnecessary and
	  it broke %variables in extra fields.
	- fts-tika: Don't crash if it returns 500 error
	- dict-redis: Fixed timeout handling
	- SEARCH INTHREAD was crashing
	- stats: Only a single fifo_listeners was supported, making it
	  impossible to use both auth_stats=yes and mail stats plugin.
	- SSL errors were logged in separate "Stacked error" log lines
	  instead of as part of the disconnection reason.
	- MIME body parser didn't handle properly when a child MIME part's
	  --boundary had the same prefix as the parent.

v2.2.23 2016-03-30  Timo Sirainen <tss@iki.fi>

	- Various fixes to doveadm. Especially running commands via
	  doveadm-server was broken.
	- director: Fixed user weakness getting stuck in some situations
	- director: Fixed a situation where directors keep re-sending
	  different states to each others and never becoming synced.
	- director: Fixed assert-crash related to a slow "user killed" reply
	- Fixed assert-crash related to istream-concat, which could have
	  been triggered at least by a Sieve script.

v2.2.22 2016-03-16  Timo Sirainen <tss@iki.fi>

	+ Added doveadm HTTP API: See
	  http://wiki2.dovecot.org/Design/DoveadmProtocol/HTTP
	+ virtual plugin: Mailbox filtering can now be done based on the
	  mailbox metadata. See http://wiki2.dovecot.org/Plugins/Virtual
	+ stats: Added doveadm stats reset to reset global stats.
	+ stats: Added authentication statistics if auth_stats=yes.
	+ dsync, imapc, pop3c & pop3-migration: Many optimizations,
	  improvements and error handling fixes.
	+ doveadm: Most commands now stop soon after SIGINT/SIGTERM.
	- auth: Auth caching was done too aggressively when %variables were
	  used in default_fields, override_fields or LDAP pass/user_attrs.
	  userdb result_* were also ignored when user was found from cache.
	- imap: Fixed various assert-crashes caused v2.2.20+. Some of them
	  caught actual hangs or otherwise unwanted behavior towards IMAP
	  clients.
	- Expunges were forgotten in some situations, for example when
	  pipelining multiple IMAP MOVE commands.
	- quota: Per-namespaces quota were broken for dict and count backends
	  in v2.2.20+
	- fts-solr: Search queries were using OR instead of AND as the
	  separator for multi-token search queries in v2.2.20+.
	- Single instance storage support wasn't really working in v2.2.16+
	- dbox: POP3 message ordering wasn't working correctly.
	- virtual plugin: Fixed crashes related to backend mailbox deletions.

v2.2.21 2015-12-11  Timo Sirainen <tss@iki.fi>

	- doveadm mailbox list (and some others) were broken in v2.2.20
	- director: Fixed making backend changes when running with only a
	  single director server.
	- virtual plugin: Fixed crash when trying to open nonexistent
	  autocreated backend mailbox.

v2.2.20 2015-12-07  Timo Sirainen <tss@iki.fi>

	+ Added mailbox { autoexpunge=<time> } setting. See
	  http://wiki2.dovecot.org/MailboxSettings for details.
	+ ssl_options: Added support for no_ticket
	+ imap/pop3/managesieve-login: Added postlogin_socket=path passdb extra
	  field. This allows replacing the default service
	  imap/pop3/managesieve {} settings for specific users (e.g. running
	  their imap process via valgrind or strace).
	+ doveadm fetch: Added date.sent/received/saved.unixtime
	+ fs-posix: Added mode=auto parameter to set the created files' and
	  directories' mode based on the parent dir if it has setgid-bit.
	+ director: Support backends having hostnames, which makes it possible
	  to verify their SSL certificates.
	- director: Directors' state became desynchronized if doveadm director
	  commands were used to modify the same backend in multiple directors
	  at the same time with conflicting changes. This fix includes some
	  extra checks, which makes sure that if such a conflict still happens
	  it's automatically fixed. In some situations such an automatic fix
	  may now be unnecessarily triggered and an error logged.
	- director: Backend tags weren't working correctly.
	- ldap: tls_* settings weren't used for ldaps URIs.
	- ldap, mysql: Fixed setting connect timeout.
	- auth: userdb lookups via auth-worker couldn't change username
	- dsync: Fixed handling deleted directories. Make sure we don't go to
	  infinite mailbox renaming loop.
	- imap: Fixed crash in NOTIFY when there were watched namespaces that
	  didn't support NOTIFY.
	- imap: After SETMETADATA was used, various commands (especially FETCH)
	  could have started hanging when their output was large.
	- stats: Idle sessions weren't refreshed often enough, causing stats
	  process to forget them and log errors about unknown sessions when
	  they were updated later.
	- stats: Fixed "Duplicate session ID" errors when LMTP delivered to
	  multiple recipients and fts_autoindex=yes.
	- zlib plugin: Fixed copying causing cache corruption when zlib_save
	  wasn't set, but the source message was compressed.
	- fts-solr: Fixed escaping Solr query parameters.
	- lmtp: quota_full_tempfail=yes was ignored with
	  lmtp_rcpt_check_quota=yes

v2.2.19 2015-10-02  Timo Sirainen <tss@iki.fi>

	* pop3_deleted_flag has been broken since v2.2.10. Using it would
	  cause buffer overflows, which could be exploitable. However, this
	  bug would have become visible quite soon after users had deleted
	  some POP3 mails, because the pop3 processes would have started
	  crashing all the time even in normal use.
	* "doveadm director flush" command has a changed meaning now:
	  It safely moves users to their wanted backends, instead of simply
	  forgetting the mapping entirely and leaving the existing connections
	  untouched. Use -F parameter to get the original unsafe behavior.

	+ Added imap-hibernate processes (see imap_hibernate_timeout setting).
	  IDLEing IMAP connections can be hibernated, which saves memory.
	+ Optimized tracking mailboxes' vsizes (= sum of all messages' sizes).
	  If mailbox_list_index=yes, it's also stored in there. This makes it
	  very efficient to look up vsizes for all mailboxes.
	+ Added a quota "count" backend, which uses the mailbox vsizes to get
	  the current quota usage. It requires using the new quota_vsizes=yes
	  setting, which tracks the messages' "virtual sizes" rather than
	  "physical sizes". Their distiction is minor and mostly irrelevant
	  nowadays (if mail sizes should be counted with LF or CRLF newlines).
	+ "doveadm director up/down" commands added. The monitoring script
	  should be using these commands instead of changing the vhost count.
	  This allows admin to manually disable a server by changing the vhost 
	  count to 0 without the monitoring script changing it back.
	+ Added support for HAProxy protocol: http://wiki2.dovecot.org/HAProxy
	+ Added push-notification plugin framework, which can be used to
	  easily implement push notifications to various backends. Implemented
	  "ox" backend for notifying Open-Xchange via HTTP/json.
	+ imap_logout_format supports more variables now, e.g. number of
	  deleted messages.
	+ pop3: Added pop3_delete_type setting (related to pop3_deleted_flag).
	+ plugin { fts_enforced=yes } setting now fails body searches unless
	  it can be done via the full text search engine.
	+ Added %{passdb:*} and %{userdb:*} variables to various places
	+ auth: Added ":protected" suffix for passdb and userdb fields. If
	  used, the field doesn't overwrite an existing field.
	+ IMAP/POP3 proxy: If a backend server dies, avoid client reconnection
	  spikes by slowly disconnecting clients over time. This is enabled by
	  setting login_proxy_max_disconnect_delay=secs passdb extra field.
	+ imap: Added new read-only METADATA entries: /private/specialuse,
	  /shared/comment, /shared/admin
	+ imap: If client disconnects in the middle of a command, log how long
	  the command had been running.
	- mdbox: Rebuilding could have caused message's reference count to
	  overflow the 16bit number in some situations, causing problems when
	  trying to expunge the duplicates.
	- Various search fixes (fts, solr, tika, lib-charset, indexer)
	- Various virtual plugin fixes
	- Various fixes and optimizations to dsync, imapc and pop3-migration
	- imap: Various RFC compliancy and crash fixes to NOTIFY

v2.2.18 2015-05-15  Timo Sirainen <tss@iki.fi>

	- director: Login UNIX sockets were normally detected as doveadm or
	  director ring sockets, causing it to break in existing installations.
	- sdbox: When copying a mail in alt storage, place the destination to
	  alt storage as well.

v2.2.17 2015-05-13  Timo Sirainen <tss@iki.fi>

	* Dovecot no longer checks or warns if a mountpoint is removed. This
	  was causing more trouble than it was worth. Make sure that all the
	  mountpoints that Dovecot accesses aren't writable by mail processes
	  when they're unmounted.
	* dict server wasn't properly escaping/unescaping data. Fixing this
	  broke backwards compatibility with data that contains line feeds.
	  This hopefully affects only very few installations. If you're using
	  dict to save multiline data (Sieve scripts to SQL), you may be
	  affected.
	* imap: SPECIAL-USE capability is no longer advertised if there are
	  no special_use flags specified for any mailboxes.

	+ lmtp: Added lmtp_hdr_delivery_address setting to specify whether
	  to include email address in Delivered-To: and Received: headers.
	+ Added initial version of full text search library, which includes
	  language-specific text normalization and filtering. This is still
	  in development, but it's already possible to use for testing with
	  fts-lucene and fts-solr.
	+ lda, lmtp: deliver_log_format can now include %{delivery_time},
	  which expands to how many milliseconds it took to deliver the mail.
	  With LMTP %{session_time} also expands to how many milliseconds the
	  LMTP session took, not including the delivery time.
	+ lmtp proxy: Mail delivery logging includes timing information.
	+ imap: Most IMAP commands now include in the tagged reply how many
	  milliseconds it took to run the command (not counting the time spent
	  on waiting for the IMAP client to read/write data).
	+ director: Implemented director_proxy_maybe passdb extra field to
	  be able to run director and backend in the same Dovecot instance.
	  (LMTP doesn't support mixed proxy/non-proxy destinations currently.)
	+ doveadm: Added -F <file> parameter to read a list of users from the
	  given file and run the command for all the users. This is similar to
	  -A parameter reading the list of users from userdb lookup.
	+ Implemented initial Cassandra CQL support as lib-sql backend. It's
	  only usable as dict backend currently.
	+ Added quota-clone plugin to copy current quota usage to a dict.
	- auth: If auth_master_user_separator was set, auth process could be
	  crashed by trying to log in with empty master username.
	- imap-login, pop3-login: Fixed crash on handshake failures with new
	  OpenSSL versions (v1.0.2) when SSLv3 was disabled.
	- auth: If one passdb fails allow_nets check, it shouldn't have failed
	  all the other passdb checks later on.
	- imap: Server METADATA couldn't be accessed
	- imapc: Fixed \Muted label handling in gmail-migration.
	- imapc: Various bugfixes and improvements.
	- Trash plugin fixes by Alexei Gradinari
	- mbox: Fixed crash/corruption in some situations

v2.2.16 2015-03-12  Timo Sirainen <tss@iki.fi>

	* dbox: Resyncing (e.g. doveadm force-resync) no longer deletes
	  dovecot.index.cache file. The cache file was rarely the problem
	  so this just caused unnecessary slowness.
	* Mailbox name limits changed during mailbox creation: Each part of
	  a hierarchical name (e.g. "x" or "y" in "x/y") can now be up to 255
	  chars long (instead of 200). This also reduces the max number of
	  hierarchical levels to 16 (instead of 20) to keep the maximum name
	  length 4096 (a common PATH_MAX limit). The 255 char limit is
	  hopefully large enough for migrations from all existing systems.
	  It's also the limit on many filesystems.

	+ director: Added director_consistent_hashing setting to enable
	  consistent hashing (instead of the mostly-random MD5 hashing).
	  This causes fewer user moves between backends when backend counts
	  are changed, which may improve performance (mainly due to caching).
	+ director: Added support for "tags", which allows one director ring
	  to serve multiple backend clusters with different sets of users.
	+ LMTP server: Added lmtp_user_concurrency_limit setting to limit how
	  many LMTP deliveries can be done concurrently for a single user.
	+ LMTP server: Added support for STARTTLS command.
	+ If logging data is generated faster than it can be written, log a
	  warning about it and show information about it in log process's
	  process title in ps output. Also don't allow a single service to
	  flood too long at the cost of delaying other services' logging.
	+ stats: Added support for getting global statistics.
	+ stats: Use the same session IDs as the rest of Dovecot.
	+ stats: Plugins can now create their own statistics fields
	+ doveadm server: Non-mail related commands can now also be used
	  via doveadm server (TCP socket).
	+ doveadm proxying: passdb lookup can now override doveadm_port and
	  change the username.
	+ doveadm: Search query supports now "oldestonly" parameter to stop
	  immediately on the first non-match. This can be used to optimize:
	  doveadm expunge mailbox Trash savedbefore 30d oldestonly
	+ doveadm: Added "save" command to directly save mails to specified
	  mailbox (bypassing Sieve).
	+ doveadm fetch: Added body.snippet field, which returns the first
	  100 chars of a message without whitespace or HTML tags. The result
	  is stored into dovecot.index.cache, so it can be fetched efficiently.
	+ dsync: Added -t <timestamp> parameter to sync only mails newer than
	  the given received-timestamp.
	+ dsync: Added -F [-]<flag> parameter to sync only mails with[out] the
	  given flag/keyword.
	+ dsync: Added -a <mailbox> parameter to specify the virtual mailbox
	  containing user's all mails. If this mailbox is already found to
	  contain the wanted mail (by its GUID), the message is copied from
	  there instead of being re-saved. (This isn't efficient enough yet
	  for incremental replication.)
	+ dsync: -m parameter can now specify \Special-use names for mailboxes.
	+ imapc: Added imapc_features=gmail-migration to help migrations from
	  GMail. See http://wiki2.dovecot.org/Migration/Gmail
	+ imapc: Added imapc_features=search to support IMAP SEARCH command.
	  (Currently requires ESEARCH support from remote server.)
	+ expire plugin: Added expire_cache=yes setting to cache most of the
	  database lookups in dovecot index files.
	+ quota: If overquota-flag in userdb doesn't match the current quota
	  usage, execute a configured script.
	+ redis dict: Added support for expiring keys (:expire_secs=n) and
	  specifying the database number (:db=n)
	- auth: Don't crash if master user login is attempted without
	  any configured master=yes passdbs
	- Parsing UTF-8 text for mails could have caused broken results
	  sometimes if buffering was split in the middle of a UTF-8 character.
	  This affected at least searching messages.
	- String sanitization for some logged output wasn't done properly:
	  UTF-8 text could have been truncated wrongly or the truncation may
	  not have happened at all.
	- fts-lucene: Lookups from virtual mailbox consisting of over 32
	  physical mailboxes could have caused crashes.

v2.2.15 2014-10-24  Timo Sirainen <tss@iki.fi>

	* Plugins can now print a banner comment in doveconf output
	  (typically the plugin version)
	* Replication plugin now triggers low (instead of high) priority for
	  mail copying operations.
	* IMAP/POP3/ManageSieve proxy: If destination server can't be
	  connected to, retry connecting once per second up to the value of
	  proxy_timeout. This allows quick restarts/upgrades on the backend
	  server without returning login failures.
	* Internal passdb lookups (e.g. done by lmtp/doveadm proxy) wasn't
	  returning failure in some situations where it should have (e.g.
	  allow_nets mismatch)
	* LMTP uses mail_log_prefix now for logging mail deliveries instead of
	  a hardcoded prefix. The non-delivery log prefix is still hardcoded
	  though.

	+ passdb allow_nets=local matches lookups that don't contain an IP
	  address (internally done by Dovecot services)
	+ Various debug logging and error logging improvements
	- Various race condition fixes to LAYOUT=index
	- v2.2.14 virtual plugin crashed in some situations

v2.2.14 2014-10-14  Timo Sirainen <tss@iki.fi>

	* lmtp: Delivered-To: header no longer contains <> around the email
	  address. Other MDAs don't have it either.
	* "Out of disk space" errors are now treated as temporary errors
	  (not the same as "Out of disk quota").
	* replication plugin: Use replication only for users who have a
	  non-empty mail_replica setting.

	+ lmtp proxy: Log a line about each mail delivery.
	+ Added login_source_ips setting. This can be used to set the source IP
	  address round-robin from a pool of IPs (in case you run out of TCP
	  ports).
	+ Rawlog settings can use tcp:<host>:<port> as the path.
	+ virtual plugin: Don't keep more than virtual_max_open_mailboxes
	  (default 64) number of backend mailboxes open.
	+ SSL/TLS compression can be disabled with ssl_options=no_compression
	+ acl: Global ACL file now supports "quotes" around patterns.
	+ Added last-login plugin to set user's last-login timestamp on login.
	+ LDAP auth: Allow passdb credentials lookup also with auth_bind=yes	
	- IMAP: MODSEQ was sent in FETCH reply even if CONDSTORE/QRESYNC wasn't
	  enabled. This broke at least old Outlooks.
	- passdb static treated missing password field the same as an empty
	  password field.
	- mdbox: Fixed potential infinite looping when scanning a broken
	  mdbox file.
	- imap-login, pop3-login: Fixed potential crashes when client
	  disconnected unexpectedly.
	- imap proxy: The connection was hanging in some usage patterns. This
	  mainly affected older Outlooks.
	- lmtp proxy: The proxy sometimes delivered empty mails in error
	  situations or potentially delivered truncated mails.
	- fts-lucene: If whitespace_chars was set, we may have ended up
	  indexing some garbage words, growing the index size unnecessarily.
	- -c and -i parameters for dovecot/doveadm commands were ignored if
	  the config socket was readable.
	- quota: Quota recalculation didn't include INBOX in some setups.
	- Mail headers were sometimes added to dovecot.index.cache in wrong
	  order. The main problem this caused was with dsync+imapc incremental
	  syncing when the second sync thought the local mailbox had changed.
	- Fixed several race conditions with dovecot.index.cache handling that
	  may have caused unnecessary "cache is corrupted" errors.
	- doveadm backup didn't notice if emails were missing from the middle
	  of the destination mailbox. Now it deletes and resyncs the mailbox.
	- auth: If auth client listed userdb and disconnected before finishing,
	  the auth worker process got stuck (and eventually all workers could
	  get used up and requests would start failing).

v2.2.13 2014-05-11  Timo Sirainen <tss@iki.fi>

	* Fixed a DoS attack against imap/pop3-login processes. If SSL/TLS
	  handshake was started but wasn't finished, the login process
	  attempted to eventually forcibly disconnect the client, but failed
	  to do it correctly. This could have left the connections hanging
	  arond for a long time. (Affected Dovecot v1.1+)

	+ mdbox: Added mdbox_purge_preserve_alt setting to keep the file
	  within alt storage during purge. (Should become enforced in v2.3.0?)
	+ fts: Added support for parsing attachments via Apache Tika. Enable
	  with: plugin { fts_tika = http://tikahost:9998/tika/ }
	+ virtual plugin: Delay opening backend mailboxes until it's necessary.
	  This requires mailbox_list_index=yes to work. (Currently IMAP IDLE
	  command still causes all backend mailboxes to be opened.)
	+ mail_never_cache_fields=* means now to disable all caching. This may
	  be a useful optimization as doveadm/dsync parameter for some admin
	  tasks which shouldn't really update the cache file.
	+ IMAP: Return SPECIAL-USE flags always for LSUB command.
	- pop3 server was still crashing in v2.2.12 with some settings
	- maildir: Various fixes and improvements to handling compressed mails,
	  especially when they have broken/missing S=sizes in filenames.
	- fts-lucene, fts-solr: Fixed crash on search when the index contained
	  duplicate entries.
	- Many fixes and performance improvements to dsync and replication
	- director was somewhat broken when there were exactly two directors
	  in the ring. It caused errors about "weak users" getting stuck.
	- mail_attachment_dir: Attachments with the last base64-encoded line
	  longer than the rest wasn't handled correctly.
	- IMAP: SEARCH/SORT PARTIAL was handled completely wrong in v2.2.11+
	- acl: Global ACL file handling was broken when multiple entries
	  matched the mailbox name. (Only the first entry was used.)

v2.2.12 2014-02-14  Timo Sirainen <tss@iki.fi>

	- pop3 server was crashing in v2.2.11

