Skip to content
Snippets Groups Projects
NEWS 97 KiB
Newer Older
Aki Tuomi's avatar
Aki Tuomi committed
v0.5.18  2022-02-03  Aki Tuomi <aki.tuomi@open-xchange.com>

	- duplicate: Users without a home directory can crash with Sieve when
	  using duplicate database. v2.3.17 regression.
	- imapsieve: When mail was expunged when processing imapsieve events, a
	  crash could occur. Fixes Panic: file mail-index-map.c:
	  line 558 (mail_index_map_lookup_seq_range): assertion failed: (first_uid > 0)
	- managesieve-login: Proxy didn't support forwarding the forward_* passdb fields.
	- redirect: Sieve would crash if redirect after keep-equivalent action failed.
	- sieve: Interpreter crashes when the Sieve index extension is used with
	  index zero.
	- vnd.dovecot.filter: Envelope sender string may become corrupted when
	  Sieve scripts are using vnd.dovecot.filter. This could end up
	  corrupting mbox's From line and return wrong envelope sender string in
	  Sieve tests.

Aki Tuomi's avatar
Aki Tuomi committed
v0.5.17.1 2021-12-07  Aki Tuomi <aki.tuomi@open-xchange.com>

	- managesieve: Dovecot failed to start if ssl_ca was too large.
	- lib-sieve-tool: Binaries failed to run if ssl_ca was too large.

Aki Tuomi's avatar
Aki Tuomi committed
v0.5.17 2021-10-28  Aki Tuomi <aki.tuomi@open-xchange.com>

	- duplicate: The Sieve duplicate test is prone to false negatives when
	  the user receives many e-mails concurrently, meaning that duplicate
	  deliveries can still occur.
	- fileinto: v2.3.16 regression: Sieve delivery crashes if mail is
	  delivered to non-existing and existing folder.
	- imap-filter-sieve: v2.3.15 regression: The CPU limits on Sieve
	  execution are too easily exceeded in IMAP context (the IMAPSieve and
	  FILTER=SIEVE capabilities). Changed the default to unlimited CPU time
	  for IMAP context, since similar excessive resource usage can be caused
	  by other means as well. The CPU limits on Sieve scripts executed at
	  LDA/LMTP delivery are still enforced by default.
	- redirect:  The Sieve redirect action has protections against users
	  triggering mail loops. Unfortunately, the detection of a redirect mail
	  loop sometimes causes the message to get lost if no other Sieve action
	  is applied that delivers the message somewhere else.
	- redirect: v2.3.16 regression: With certain Sieve scripts if redirect
	  fails due to temporary failure, the lmtp process may crash after the
	  delivery. Fixes:
	  Panic: file mail-user.c: line 229 (mail_user_deinit):
	  assertion failed: ((*user)->refcount == 1).

v0.5.16 2021-08-06  Timo Sirainen <timo.sirainen@open-xchange.com>

	* .dovecot.sieve.log file now includes year in the header.
	* Change Sieve script result execution to delay definitive action
	  execution to the end of a successful Sieve script execution session.
	  This is part of an effort to solve problems with the Sieve duplicate
	  test. As a side-effect, some rare temporary-error cases yield
	  different results, in which partial failure is more likely.

Aki Tuomi's avatar
Aki Tuomi committed
v0.5.15 2021-06-21  Aki Tuomi <aki.tuomi@open-xchange.com>
Aki Tuomi's avatar
Aki Tuomi committed

	* CVE-2020-28200: Sieve interpreter is not protected against abusive
	  scripts that claim excessive resource usage. Fixed by limiting the
	  user CPU time per single script execution and cumulatively over
	  several script runs within a configurable timeout period. Sufficiently
	  large CPU time usage is summed in the Sieve script binary and execution
	  is blocked when the sum exceeds the limit within that time. The block
	  is lifted when the script is updated after the resource usage times out.
	* Disconnection log messages are now more standardized across services.
	  They also always now start with "Disconnected" prefix.
	- managesieve: Commands pipelined together with and just after the
	  authenticate command cause these commands to be executed twice.

Aki Tuomi's avatar
Aki Tuomi committed
v0.5.14 2021-03-04  Aki Tuomi <aki.tuomi@open-xchange.com>

	* IMAP FILTER command: cmd-filter-sieve - Do not allow NIL as
	  script name argument.

Aki Tuomi's avatar
Aki Tuomi committed
v0.5.13 2021-01-04  Aki Tuomi <aki.tuomi@open-xchange.com>

	- duplicate: The test was handled badly in a multiscript (sieve_before,
	  sieve_after) scenario in which an earlier script in the sequence with
	  a duplicate test succeeded, while a later script caused a runtime
	  failure. In that case, the message is recorded for duplicate tracking,
	  while the message may not actually have been delivered in the end.
	- editheader: Sieve interpreter entered infinite loop at startup when
	  the "editheader" configuration listed an invalid header name. This
	  problem can only be triggered by the administrator.
	- relational: The Sieve relational extension can cause a segfault at
	  compile time. This is triggered by invalid script syntax. The segfault
	  happens when this match type is the last argument of the test command.
	  This situation is not possible in a valid script; positional arguments
	  are normally present after that, which would prevent the segfault.
	- sieve: For some Sieve commands the provided mailbox name is not
	  properly checked for UTF-8 validity, which can cause assert crashes at
	  runtime when an invalid mailbox name is encountered. This can be
	  caused by the user by writing a bad Sieve script involving the
	  affected commands ("mailboxexists", "specialuse_exists").
	  This can be triggered by the remote sender only when the user has
	  written a Sieve script that passes message content to one of the
	  affected commands.
	- sieve: Large sequences of 8-bit octets passed to certain Sieve
	  commands that create or modify message headers that allow UTF-8 text
	  (vacation, notify and addheader) can cause the delivery or IMAP
	  process (when IMAPSieve is used) to enter a memory-consuming
	  semi-infinite loop that ends when the process exceeds its memory
	  limits. Logged in users can cause these hangs only for their own
	  processes.

Aki Tuomi's avatar
Aki Tuomi committed
v0.5.11 2020-08-12  Aki Tuomi <aki.tuomi@open-xchange.com>

	* managesieve: managesieve_max_line_length setting is now a "size" type
	  instead of just number of bytes. This allows using e.g. "64k" as the
	  value.
	- lib-sieve: When folding white space is used in the Message-ID header,
	  it is not stripped away correctly before the message ID value is used,
	  causing e.g. garbled log lines at delivery.

Aki Tuomi's avatar
Aki Tuomi committed
v0.5.10 2020-03-06  Aki Tuomi <aki.tuomi@open-xchange.com>

Aki Tuomi's avatar
Aki Tuomi committed
	* imap_sieve_filter: Change result action logging to include IMAP UID
	- vacation: Addresses were compared case-sensitively.
Aki Tuomi's avatar
Aki Tuomi committed
v0.5.9 2019-12-04  Aki Tuomi <aki.tuomi@open-xchange.com>

	+ Added events for Sieve and ManageSieve, see
	  https://doc.dovecot.org/admin_manual/list_of_events/#pigeonhole
	+ Pigeonhole: Implement the Sieve "special-use" extension described in
	  RFC 8579.
	- duplicate: Test only compared the handles which would cause
	  different values to be cached as the same duplicate test. Fix to also
	  compare the actual hashes.
	- imap_sieve_filter: IMAP FILTER Command had various bugs in error
	  handling. Errors may have been duplicated for each email, errors
	  may have been missing entirely, command tag and ERRORS/WARNINGS
	  parameters were swapped.

v0.5.8 2019-10-08  Aki Tuomi <aki.tuomi@open-xchange.com>

	- Sieve may leak resources in rare cases when a redirect, vacation or
	  report action fails to send the message. This mainly applies when
	  Sieve is executed in IMAP context; i.e., for the IMAPSIEVE or
	  FILTER=SIEVE capabilities.

v0.5.7.1 2019-07-23  Timo Sirainen <timo.sirainen@open-xchange.com>

	- dsync: Sieve script syncing failed if mailbox attributes weren't
	  enabled.

v0.5.7 2019-07-12  Aki Tuomi <aki.tuomi@open-xchange.com>

	+ vacation: Made the subject for the automatic response message produced
	  by the Sieve vacation action configurable. Both the default subject
	  (if the script defines none) and the subject template (e.g. used to
	  add a subject prefix) can be configured.
	- dsync: dsync-replication does not synchronize Sieve scripts.
	- imap_sieve_filter: Reduce FILTER=SIEVE verbosity over IMAP connection.
	- testsuite: Pigeonhole testsuite segfaulted if it was compiled with
	  GCC 9

Aki Tuomi's avatar
Aki Tuomi committed
v0.5.6 2019-04-30  Aki Tuomi <aki.tuomi@open-xchange.com>

	+ sieve: Redirect loop prevention is sometimes ineffective. Improve
	  existing loop detection by also recognizing the
	  X-Sieve-Redirected-From header in incoming messages and dropping
	  redirect actions when it points to the sending account. This header
	  is already added by the redirect action, so this improvement only
	  adds an additional use of this header.
	- sieve: Prevent execution of implicit keep upon temporary failure
	  occurring at runtime.

v0.5.5 2019-03-05  Stephan Bosch <stephan@rename-it.nl>

	+ IMAPSieve: Add new plugin/imapsieve_expunge_discarded setting which
	  causes messages discarded by an IMAPSieve script to be expunged
	  immediately, rather than only being marked as "\Deleted" (which is
	  still the default behavior).
	- IMAPSieve: Fix panic crash occurring when a COPY command copies
	  messages from a virtual mailbox where the source messages originate
	  from more than a single real mailbox.
	- imap4flags extension: Fix deleting all keywords. When the action
	  resulted in all keywords being removed, no changes were actually
	  applied.
	- variables extension: Fix truncation of UTF-8 variable content. The
	  maximum size of Sieve variables was enforced by truncating the
	  variable string content bluntly at the limit, but this does not
	  consider UTF-8 code point boundaries. This resulted in broken UTF-8
	  strings. This problem also surfaced for variable modifiers, such as
	  the ":encodeurl" modifier provided by the Sieve "enotify" extension.
	  In that case, the resulting URI escaping could also be truncated
	  inappropriately.
	- IMAPSieve, IMAP FILTER=SIEVE: Fix replacing a modified message. Sieve
	  scripts running in IMAPSIEVE or IMAP FILTER=SIEVE context that
	  modify the message, stored the message a second time, rather than
	  replacing the originally stored unmodified message.
	- Fix segmentation fault occurring when both the sieve_extprograms
	  plugin (for the Sieve interpreter) and the imap_filter_sieve plugin
	  (for IMAP) are loaded at the same time. A symbol was defined by both
	  plugins, causing a clash when both were loaded.

v0.5.4 2018-11-23  Stephan Bosch <stephan@rename-it.nl>

	* Adjustments to several changes in Dovecot v2.3.4 make this Pigeonhole
	  release dependent on that Dovecot release; it will not compile against
	  older Dovecot versions. And, conversely, you need to upgrade
	  Pigeonhole when upgrading Dovecot to v2.3.4.
	* The changes regarding the default postmaster_address in Dovecot v2.3.4
	  mainly apply to Pigeonhole. The new default should work for all
	  existing installations, thereby fixing several reported v2.3/v0.5
	  migration problems.
	- IMAP FILTER=SIEVE capability: Fix assert crash occurring when running
	  UID FILTER on a Sieve script with errors.

v0.5.3 2018-10-01  Stephan Bosch <stephan@rename-it.nl>

	- Fix assertion panic occurring when managesieve service fails to open
	  INBOX while saving a Sieve script. This was caused by a lack of
	  cleanup after failure.
	- Fix specific messages causing an assert panic with actions that
	  compose a reply (e.g. vacation). With some rather weird input from the
	  original message, the header folding algorithm (as used for composing
	  the References header for the reply) got confused, causing the panic.
	- IMAP FILTER=SIEVE capability: Fix FILTER SIEVE SCRIPT command parsing.
	  After finishing reading the Sieve script, the command parsing
	  sometimes didn't continue with the search arguments. This is a time-
	  critical bug that likely only occurs when the Sieve script is sent in
	  the next TCP frame.

v0.5.2 2018-06-29  Stephan Bosch <stephan@rename-it.nl>

	+ Implement plugin for the a vendor-defined IMAP capability called
	  "FILTER=SIEVE". It adds the ability to manually invoke Sieve filtering
	  in IMAP. More information can be found in
	  doc/plugins/imap_filter_sieve.txt.
	- The Sieve addess test caused an assertion panic for invalid addresses
	  with UTF-8 codepoints in the localpart. Fixed by properly detecting
	  invalid addresses with UTF-8 codepoints in the localpart and skipping
	  these like other invalid addresses while iterating addresses for the
	  address test.
	- Make the length of the subject header for the vacation response
	  configurable and enforce the limit in UTF-8 codepoints rather than
	  bytes. The subject header for a vacation response was statically
	  truncated to 256 bytes, which is too limited for multi-byte UTF-8
	  characters.
	- Sieve editheader extension: Fix assertion panic occurring when it is
	  used to manipulate a message header with a very large header field.
	- Properly abort execution of the sieve_discard script upon error.
	  Before, the LDA Sieve plugin attempted to execute the sieve_discard
	  script when an error occurs. This can lead to the message being lost.
	- Fix the interaction between quota and the sieve_discard script. When
	  quota was used together with a sieve_discard script, the message
	  delivery did not bounce when the quota was exceeded.

v0.5.1 28-03-2018  Stephan Bosch <stephan@rename-it.nl>

	- Explicitly disallow UTF-8 in localpart in addresses parsed from Sieve
	  script.
	- editheader extension: Corrected the stream position calculations
	  performed while making the modified message available as a stream.
	  Pigeonhole Sieve crashed in LMTP with an assertion panic when the
	  Sieve editheader extension was used before the message was redirected.
	  Experiments indicate that the problem occurred only with LMTP and that
	  LDA is not affected.
	- fileinto extension: Fix assert panic occurring when fileinto is used
	  without being listed in the require line, while the copy extension is
	  listed there. This is a very old bug.
	- imapsieve plugin: Do not assert crash or log an error for messages
	  that disappear concurrently while applying Sieve scripts. This event
	  is now logged as a debug message.
	- Sieve extprograms plugin: Large output from "execute" command crashed
	  delivery. Fixed buffering issue in code that handles output from the
	  external program.

v0.5.0.1 05-01-2018  Stephan Bosch <stephan@rename-it.nl>

	- imap4flags extension: Fix binary corruption occurring when
	  setflag/addflag/removeflag flag-list is a variable.
	- sieve-extprograms plugin: Fix segfault occurring when used in
	  IMAPSieve context.

v0.5.0 24-12-2017  Stephan Bosch <stephan@rename-it.nl>

	* editheader extension: The implementation of header modifications is
	  heavily updated. Although the functionality has not changed, the
	  underlying code was updated to address several static analysis
	  warnings, runtime integer arithmetic warnings (Clang), and to match
	  updates in the Dovecot stream API.
	+ variables extension: Made the maximum scope and variable size
	  configurable.
	+ subaddress: Support multiple recipient_delimiters.
	- enotify extension: mailto method: Fixed parsing of mailto URI with
	  only a header part.
	- enotify plugin: mailto method: Make sure the "From:" header is set to
	  a usable address and not "(null)".
	- Fixed writing address headers to outgoing messages. Sometimes headers
	  were MIME-encoded twice, yielding invalid results.

v0.4.23 20-03-2018  Stephan Bosch <stephan@rename-it.nl>

	- editheader extension: Corrected the stream position calculations
	  performed while making the modified message available as a stream.
	  Pigeonhole Sieve crashed in LMTP with an assertion panic when the
	  Sieve editheader extension was used before the message was redirected.
	  Experiments indicate that the problem occurred only with LMTP and that
	  LDA is not affected.
	- fileinto extension: Fix assert panic occurring when fileinto is used
	  without being listed in the require line, while the copy extension is
	  listed there. This is a very old bug.
	- imapsieve plugin: Do not log an error for messages that disappear
	  concurrently while applying Sieve scripts. This is a further
	  improvement on the imapsieve fix in the previous release (which fixed
	  a panic). This event is now logged as a debug message.

v0.4.22 01-03-2018  Stephan Bosch <stephan@rename-it.nl>

	- Fixed filesystem path handling problem: sieve plugin could have
	  assert-crashed with specific path lengths with: "Panic: file
	  realpath.c: line 86 (path_normalize): assertion failed: (npath_pos +
	  1 < npath + asize)".
	- Sieve extprograms plugin: Large output from "execute" command crashed
	  delivery. Fixed buffering issue in code that handles output from the
	  external program.
	- editheader extension: Extensively reworked the low-level
	  implementation of adding and removing headers. This solves a few
	  integer arithmetic problems reported by Clang runtime checks, but also
	  improves code structure and reliability in general.
	- imapsieve: Fix assert crash occurring when selected messages are
	  expunged concurrently by the time Sieve filter is to be applied.
	- imap4flags extension: Fix binary byte-code corruption occurring when
	  the setflag, addflag, or removeflag command's flag-list is a variable.
	- enotify extension: mailto method: Fixed parsing of mailto URI with
	  only a header part.
	- enotify extension: mailto method: Make sure "From:" header is set to a
	  usable address and not "(null)".
	- Fixed writing address headers to outgoing messages. It sometimes
	  erroneously applied another layer of MIME header encoding.

v0.4.21 12-10-2017 Stephan Bosch <stephan@rename-it.nl>

	* redirect action: Always set the X-Sieve-Redirected-From header to
	  sieve_user_email if configured. Before, it would use the envelope recipient
	  instead if available, which makes no sense if the primary e-mail address is
	  available.
	+ vacation extension: Allow ignoring the envelope sender while composing the
	  "To:" header for the reply. Normally, the "To:" header is composed from
	  the address found in the "Sender", "Resent-From" or "From" headers that is
	  equal to the envelope sender. If none is then found, the bare envelope
	  sender is used. This change adds a new setting
	  "sieve_vacation_to_header_ignore_envelope". With this setting enabled, the
	  "To:" header is always composed from those headers in the source message.
	  The new setting thus allows ignoring the envelope, which is useful e.g.
	  when SRS is used.
	+ vacation extension: Compose the "To:" header from the full sender address
	  found in the first "Sender:", "From:" or "Resent-From:" header. Before, it
	  would create a "To:" header without a phrase part. The new behavior is
	  nicer, since the reply will be addressed to the sender by name if possible.
	- LDA Sieve plugin: Fixed sequential execution of LDAP-based scripts. A
	  missing LDAP-based script could cause the script sequence to exit earlier.
	- sieve-filter: Removed the (now) duplicate utf8 to mutf7 mailbox name
	  conversion. This caused problems with mailbox names containing UTF-8
	  characters. The Dovecot API was changed years ago, but apparently
	  sieve-filter was never updated.

v0.4.20 27-08-2017 Stephan Bosch <stephan@rename-it.nl>

	+ Made the retention period for redirect duplicate identifiers configurable.
	  For accounts that perform many redirects, the lda-dupes database could grow
	  to impractical sizes. Changed the default retention period from 24 to 12
	  hours.
	- sieve-filter: Fixed memory leak: forgot to clean up script binary at end of
	  execution. Normally, this would merely be an inconsequential memory leak.
	  However, when the script comes from an LDAP storage, this would cause io
	  leak warnings.
	- managesieve-login: Fixed handling of AUTHENTICATE command. A second
	  authenticate command would be parsed wrong. This problem was caused by
	  changes in the previous release.
	- LDA Sieve plugin: Fixed minor memory leak caused by not cleaning up the
	  sieve_discard script.

v0.4.19 26-06-2017 Stephan Bosch <stephan@rename-it.nl>

	* This release adjusts Pigeonhole to several changes in the Dovecot API,
	  making it depend on Dovecot v2.2.31. Previous versions of Pigeonhole will
	  produce compile warnings with the recent Dovecot releases (but still work
	  ok).
	- Fixed bug in handling of implicit keep in some cases. Implicit side-effects,
	  such as assigned flags, were not always applied correctly. This is in
	  essence a very old bug, but it was exposed by recent changes.
	- include extension: Fixed segfault that (sometimes) occurred when the global
	  script location was left unconfigured.

v0.4.18 12-04-2017 Stephan Bosch <stephan@rename-it.nl>

	+ imapsieve plugin: Implemented the copy_source_after rule action. When this
	  is enabled for a mailbox rule, the specified Sieve script is executed for
	  the message in the source mailbox during a "COPY" event. This happens only
	  after the Sieve script that is executed for the corresponding message in the
	  destination mailbox finishes running successfully.
	+ imapsieve plugin: Added non-standard Sieve environment items for the source
	  and destination mailbox.
	- multiscript: The execution of the discard script had an implicit "keep",
	  rather than an implicit "discard".

v0.4.17 26-02-2017 Stephan Bosch <stephan@rename-it.nl>

	- LDA Sieve plugin: Fixed handling of an early explicit keep during
	  multiscript execution. Action side-effects and the message snapshot would be
	  lost at the final stage where the implicit keep is evaluated. This could
	  result in the IMAP flags assigned to the message to be forgotten or that
	  headers modified by the "editheader" extension would revert to their
	  original state.
	- file script storage: Amended the up-to-date time stamp comparison for
	  on-disk binaries to include nanoseconds. This will fix problems occurring
	  when both binary and script are saved within the same second. This fix is
	  ineffective on older systems that have no support for nanoseconds in stat()
	  timestamps, which	should be pretty rare nowadays.
	- file script storage: Improve saving and listing permission error to include
	  more details.
	- imapsieve plugin: Make sure "INBOX" is upper case in static mailbox rules.
	  Otherwise, the mailbox name would never match, since matching is performed
	  case-sensitively and Dovecot only returns the upper-cased "INBOX".
	- imapsieve plugin: Fixed assert failure occurring when used with virtual
	  mailboxes.
	- doveadm sieve plugin: Fixed crash when setting Sieve script via attribute's
	  string value.

v0.4.16 30-10-2016 Stephan Bosch <stephan@rename-it.nl>

	* Part of the Sieve extprograms implementation was moved to Dovecot, which
	  means that this release depends on Dovecot v2.2.26+.
	* ManageSieve: The PUTSCRIPT command now allows uploading empty Sieve scripts.
	  There was really no good reason to disallow doing that.
	+ Sieve vnd.dovecot.report extension:
	  + Added a Dovecot-Reporting-User field to the report body, which contains
	    the e-mail address of the user sending the report.
	  + Added support for configuring the "From:" address used in the report.
	+ LDA sieve plugin: Implemented support for a "discard script" that is run
	  when the message is going to be discarded. This allows doing something other
	  than throwing the message away for good.
	+ Sieve vnd.dovecot.environment extension: Added vnd.dovecot.config.*
	  environment items. These environment items map to sieve_env_* settings from
	  the plugin {} section in the configuration. Such values can of course also
	  be returned from userdb.
	+ Sieve vacation extension: Use the Microsoft X-Auto-Response-Suppress header
	  to prevent unwanted responses from and to (older) Microsoft products.
	+ ManageSieve: Added rawlog_dir setting to store ManageSieve traffic logs.
	  This replaces at least partially the rawlog plugin (mimics similar IMAP/POP3
	  change).
	- doveadm sieve plugin: synchronization: Prevent setting file timestamps to
	  unix epoch time. This occurred when Dovecot passed the timestamp as
	  'unknown' during synchronization.
	- Sieve exprograms plugin: Fixed spurious '+' sometimes returned at the end
	  of socket-based program output.
	- imapsieve plugin: Fixed crash occurring in specific situations.
	- Performed various fixes based on static analysis and Clang warnings.

v0.4.15 07-07-2016 Stephan Bosch <stephan@rename-it.nl>

	* vacation extension: The sieve_user_email setting is now used in the check
	  for implicit delivery.
	- imapsieve plugin: For any mail transaction, the mailbox was opened a second
	  time, even if no mailbox rule matched. This was unintentional, useless and
	  caused problems when the imapsieve plugin was used with other plugins like
	  acl.
	- extprograms plugin: Significantly improved error handling. No stream errors
	  were logged.
	- extprograms plugin: Fixed bug in handling of result code from remote program
	  (script service).
	- extprograms plugin: Connection to remote program service was not retried.
	- Several small fixes based on static analysis.
	- Fixed handling of quoted string localparts in email addresses.

v0.4.14 26-04-2016 Stephan Bosch <stephan@rename-it.nl>

	* The address test now allows specifying the X-Original-To header.
	+ Implemented the Sieve imapsieve extension and its IMAP counterpart
	  (RFC 6785) as a set of plugins. This allows running Sieve scripts at IMAP
	  activity, rather than at delivery. There are also facilities for the
	  familiar sieve_before/sieve_after administrator scripts. A user script is
	  defined for a mailbox using an IMAP METADATA entry, whereas administrator
	  scripts are configured using mailbox matching rules defined in the plugin
	  settings.
	+ Adjusted the Sieve ihave extension to allow capability tests to be performed
	  at runtime. This way, scripts can be written that work both at delivery and
	  from IMAP.
	+ Implemented support for runtime trace debugging. This means that detailed
	  information about which commands, actions and tests are performed is written
	  to a file. That file is created in the configured directory, but only if
	  that directory exists. This way, a particular user can be easily singled out
	  for debugging. This works much like the Dovecot rawlog facility. The trace
	  output is identical to what is produced using sieve-test with its "-t"
	  command line option.
	+ Added a "sieve_user_email" setting that configures the user's primary email
	  address. This is mainly useful to have a user email address available in
	  IMAP, where envelope data is unavailable.
	+ Implemented the dovecot-specific "vnd.dovecot.report" extension. This allows
	  sending report messages in the Message Abuse Reporting Format (RFC 5965).
	- extprograms plugin: Fixed epoll() panic caused by closing the output FD
	  before the output stream.
	- Made sure that the local part of a mail address is encoded properly using
	  quoted string syntax when it is not a dot-atom.

Stephan Bosch's avatar
Stephan Bosch committed
v0.4.13 18-03-2016 Stephan Bosch <stephan@rename-it.nl>

	* redirect action: Added the list-id header to the duplicate ID for mail loop
	  prevention. This means that the message sent directly to the user and the
	  message coming through the mailing list itself are treated as different
	  messages by the loop detection of the redirect command, even though their
	  Message-ID may be identical.
	* Changed the Sieve number type to uint64_t, which means that Sieve numbers
	  can now technically range up to 2^64. Some other Sieve implementation
	  allowed this, making this change necessary for successful migration.
	+ Implemented the sieve_implicit_extensions setting. The extensions listed in
	  this setting do not need to be enabled explicitly using the Sieve "require"
	  command. This behavior directly violates the standard, but can be necessary
	  for compatibility with some existing implementations of Sieve. Do not use
	  this setting unless you really need to!
	- redirect action: Made mail loop detection more robust by forcibly adding a
	  Message-ID header if it is missing.
	- Prevent logging a useless "script not found" error message for LDAP scripts
	  for which the entry exists but no attribute containing a script. This is not
	  necessarily an error.
	- extprograms plugin: Changed the communication channel between parent and
	  child process for a directly forked program from a socketpair to a double
	  pipe. Linux does not support /dev/stdin, /dev/stdout and friends for
	  sockets. For some shell program authors this may be confusing, so that is
	  why it is changed. When using the script service, these device nodes are
	  still not usable though.

Stephan Bosch's avatar
Stephan Bosch committed
v0.4.12 06-02-2016 Stephan Bosch <stephan@rename-it.nl>

	+ Implemented the Sieve extracttext extension (RFC 5703; Section 7). It is now
	  possible to extract body text from a message into a variable.
	* Increased ABI version due to changes in the Sieve interpreter's object
	  definitions.
	- multiscript: Fixed bug in handling of (implicit) keep; final keep action was
	  always executed as though there was a failure. This caused the keep action
	  to revert back to the initial message, causing editheader actions to be
	  ignored.
	- managesieve-login: Fixed proxy to allow SASL mechanisms other than PLAIN.
	  Before, the proxy would fail if the server did not support the PLAIN
	  mechanism.
	- ldap storage: Prevent segfault occurring when assigning certain (global)
	  configuration options.

v0.4.11 08-01-2016 Stephan Bosch <stephan@rename-it.nl>

	- Sieve mime extension: Fixed the header :mime :anychild test to work properly
	  outside a foreverypart loop.
	- Several fixes in message body part handling:
	  - Fixed assert failure occurring when text extraction is attempted on a
	    empty or broken text part.
	  - Fixed assert failure in handling of body parts that are converted to text.
	  - Fixed header unfolding for (mime) headers parsed from any mime part.
	  - Fixed trimming for (mime) headers parsed from any mime part.
	  - Fixed erroneous changes to the message part tree structure performed when
	    re-parsing the message.
	- LDA Sieve plugin: Fixed logging of actions; sometimes the configured log
	  format was not followed.
	- LDA Sieve plugin: Fixed bug in error handling of script storage
	  initialization.
	- Sieve Extprograms plugin: Ignored ENOTCONN error in shutdown(fd, SHUT_WR)
	  call.
	- Fixed duplication of discard actions in the script result. Each discard was
	  counted as a separate action, which means that action limit would be crossed
	  too early.
	- Made sure that quota errors never get logged as errors in syslog.
	- Fixed handling of implicit keep for a partially executed transaction that
	  yielded a temporary failure.
	- Fixed handling of global errors. If master and user error handler were
	  identical, in some cases the log message could be lost.
	- Fixed AIX compile issue in message body parser.

v0.4.10 13-12-2015 Stephan Bosch <stephan@rename-it.nl>

	+ Implemented the Sieve mime and foreverypart extensions (RFC 5703). These
	  are fully implemented. The interaction with the editheader extension needs
	  some work, but this should not influence most uses; i.e., changes by the
	  editheader extension are not always visible using foreverypart/mime.
	+ Sieve body extension: Properly implemented the `:text' body transform. It
	  now extracts text for HTML message parts.
	+ Sieve enotify extension: mailto method: Implemented the
	  sieve_notify_mailto_envelope_from setting. This allows configuring the
	  source of the notification sender address for e-mail notifications. This is
	  similar to what already can be configured for redirect.
	+ Added a sieve_enabled (defaults to 'yes') setting that allows explicitly
	  disabling Sieve processing for particular users. This used to be possible by
	  setting `sieve=', but ever since the sieve_before, sieve_after and
	  sieve_default settings were added, this method was not reliable anymore.
	- variables extension: Fixed handling of empty string by the `:length' set
	  modifier. An empty string yielded an empty string rather than "0".
	- Fixed memory leak in the Sieve script byte code dumping facility. Extension
	  contexts were never actually freed.
	- Fixed handling of implicit keep when the last Sieve script is a global one.
	  In that case the implicit keep action was executed in global context, which
	  could mean that trivial (quota) errors ended up in the system log file,
	  rather than the user log file.
	- doveadm sieve plugin: Fixed crashes caused by incorrect context allocation
	  in the sieve command implementations.

v0.4.9 04-10-2015 Stephan Bosch <stephan@rename-it.nl>

	* Properly implemented checking of ABI version for Sieve interpreter plugins,
	  much like Dovecot itself does for plugins. This will prevent plugin ABI
	  mismatches. 
	+ Implemented a vnd.dovecot.environment extension. This builds upon the
	  standard environment extension and adds a few more environment items, such
	  as username and default mailbox. It also creates a variables namespace so
	  that environment items can be accessed directly. I am still thinking about
	  more environment items that can be added.
	+ Sieve extprograms plugin: Made line endings of the input passed to the
	  external programs configurable. This can be configured separately for each
	  of the three extensions.
	+ ManageSieve: Implemented proxy XCLIENT support. This allows the proxy to
	  pass client information to the back-end.
	- ManageSieve: Fixed an assert failure occurring when a client disconnects
	  during the GETSCRIPT command.
	- doveadm sieve plugin: Fixed incorrect initialization of mail user. This
	  caused a few memory leaks.
	- sieve-filter command line tool: Fixed handling of failure-related implicit
	  keep when there is an explicit default destination folder. This caused
	  message duplication.
	- lib-sieve: Fixed bug in RFC5322 header folding. Words longer than the
	  optimal line length caused empty lines in the output, which would break the
	  resulting message header. This surfaced in References: headers with very
	  long message IDs.

v0.4.8 15-05-2015 Stephan Bosch <stephan@rename-it.nl>

	* LDA Sieve plugin: Dovecot changed the deliver_log_format setting to include
	  %{delivery_time}. This prompted changes in Pigeonhole that make this release
	  dependent on Dovecot v2.2.17.
	+ Implemented magic to make sieve_default script visible from ManageSieve
	  under a configurable name. This way, users can see the default rules, edit
	  them and store a private adjusted version. This could also be achieved by
	  copying the default script into the user's script storage, but updates to
	  the global sieve_default script would be ignored that way.
	+ ManageSieve: Implemented support for reporting command statistics at
	  disconnect. Statistics include the number of bytes and scripts uploaded/
	  downloaded/checked and the number of scripts deleted/renamed.
	- Fixed problem in address test: erroneously decoded mime-encoded words in
	  address headers.
	- extprograms plugin: Fixed failure occurring when connecting to script
	  service without the need to read back the output from the external program.
	- Fixed bug in script storage path normalization occurring with relative
	  symbolic links below root.
	- Fixed and updated various parts of the documentation 
	- ManageSieve: Used "managesieve" rather than "sieve" as login service name,
	  which means that all managesieve-specific settings where ignored.
	- Managesieve: Storage quota was not always enforced properly for scripts
	  uploaded as quoted string. Nobody uses that, but it is allowed in the
	  specification and we support it, so it should work properly.
v0.4.7 19-03-2015 Stephan Bosch <stephan@rename-it.nl>

	* editheader extension: Made protection against addition and deletion of
	  headers configurable separately. Also, the `Received' and `Auto-Submitted'
	  headers are no longer protected against addition by default.
	* Turned message envelope address parse errors into warnings.
	* The interpreter now accepts non-standard domain names, e.g. containing '_'.
	+ Implemented the Sieve index extension (RFC 5260).
	+ Implemented support for the mboxmetadata and servermetadata extensions
	  (RFC 5490).
	+ Implemented new sieve commands for the doveadm command line utility. These
	  commands are currently limited to ManageSieve operations, but the other
	  current sieve tools will be migrated to doveadm in the near future as well.
	+ Added more debug output about binary up-to-date checking.
	+ Added script metadata to binary dump output.
	- Fixed Sieve script binary up-to-date checking by normalizing the script
	  location.
	- The Sieve interpreter now flushes the duplicate database during start phase
	  of result execution rather than commit phase. This makes sure locks on the
	  duplicate database are released as soon as possible, preventing contention.
	- Performed a few optimizations in the lexical scanner of the language.
	- Fixed bug in `:matches' match-type that made a pattern without
	  wildcards match as if there were a '*' at the beginning.
	- Fixed crash in validation of the string parameter of the comparator tag.
	- extprograms extension: Made sure supplemental group privileges are also
	  dropped. This was a problem reported by Debian lintian.
	- Fixed bug in handling of binary errors for action side-effects and message
	  overrides.
	- file script storage: Restructured storage initialization to address
	  backwards compatibility issues.
	- dict script storage: Fixed small memory allocation bug.
v0.4.6 02-11-2014 Stephan Bosch <stephan@rename-it.nl>

	- After make distclean the distributed tarball would fail to recompile.
	  This causes problems for some distribution builds.

v0.4.5 30-10-2014 Stephan Bosch <stephan@rename-it.nl>

	+ Added a Pigeonhole version banner to doveconf output. This way, future
	  bug reports will also include Pigeonhole version information.
	- Fixed handling of implicit keep. Last version erroneously reported that
	  implicit keep succeeded after an earlier failure, while it in fact had
	  failed. Particularly occurred for mailbox quota errors. 
	- Fixed segfault occurring on SunOS systems when there is no active script.

v0.4.4 28-10-2014 Stephan Bosch <stephan@rename-it.nl>

	* Added support for Japanese mail addresses with dots at non-standard places
	  in localpart.
	* Changed handling of ENOSPACE into a normal temporary failure and added
	  handling of ENOQUOTA as a user error.
	* Restructured result execution, so that all actions which involve mail
	  storage are always committed before all others.
	+ Implemented support for generic Sieve storages. Using alternative storages
	  now also possible for sieve_before/sieve_after.
	+ Implemented storage driver for retrieving Sieve scripts from LDAP. This
	  currently cannot be used with ManageSieve.
	+ Implemented sieve_redirect_envelope_from setting, which allows configuring
	  the envelope sender of redirected messages.
	- Fixed handling of mail storage errors occurring while evaluating the input
	  message.
	- managesieve-login:
	   - Removed bogus ALERT response code returned for AUTHENTICATE command.
	   - Fixed handling of invalid initial response argument to AUTHENTICATE
	     command.
	- Fixed handling of stream errors in lexical scanner.
	- Fixed handling of SMTP errors. Permanent and temporary errors were mixed up.
	- Fixed several problems reported by CLang 3.4.
	- duplicate extension: Fixed erroneous compile error about conflicting tags
	  when `:handle' argument was used last.
	- relational extension: Fixed error handling of `:value' match.
	- editheader extension: Fixed header unfolding and header iteration.
	- mailbox extension: Fixed the `:create' tag, which erroneously subscribed an
	  existing folder.
	- extprograms plugin: Fixed handling of error codes.
	- doveadm-sieve plugin: Fixed several bugs. Synchronization of symbolic link
	  in the file storage should now also work properly.

Stephan Bosch's avatar
Stephan Bosch committed
v0.4.3 12-05-2014 Stephan Bosch <stephan@rename-it.nl>

	* Editheader extension: Made control characters allowed for editheader, except
	  NUL. Before, this would cause a runtime error.
	+ Upgraded Dovecot-specific Sieve "vnd.dovecot.duplicate" extension to match
	  the new draft "duplicate" extension.
	- Fixed sieve_result_global_log_error to log only as i_info in administrator
	  log (syslog) if executed from multiscript context.
	- Sieve redirect extension: Adjusted loop detection to show leniency to resent
	  messages.
	- Sieve include extension: Fixed problem with handling of duplicate includes
	  with different parameters :once or :optional.
	- Sieve spamtest/virustest extensions: Tests were erroneously performed
	  against the original message. When used together with extprograms filter to
	  add the spam headers, the changes were not being used by the spamtest and
	  virustest extensions. 
	- Deprecated Sieve notify extension: Fixed segfault problems in message string
	  substitution.
	- ManageSieve: Fixed active link verification to handle redundant path slashes
	  correctly.
	- Sieve vacation extension:
	  - Fixed interaction of sieve_vacation_dont_check_recipient with
	    sieve_vacation_send_from_recipient setting.
	  - Fixed log message for discarded response.
	- Sieve extprograms plugin:
	  - Forgot to disable the alarm() timeouts set for script execution.
	  - Fixed fd leak and handling of output shutdown.
	  - Fixed 'Bad filedescriptor' error occurring when disconnecting script
	    client.
	  - Made sure that programs are never forked with root privileges.

v0.4.2 26-09-2013 Stephan Bosch <stephan@rename-it.nl>
	
	* Incompatible change in Sieve doveadm plugin: the root attribute for
	  Sieve scripts is changed. Make sure that you update both sides of a dsync
	  setup simultaneously when Sieve is involved, otherwise synchronization will
	  likely fail.
	+ Added support for sending Sieve vacation replies with an actual sender,
	  rather than the default <> sender. Check the updated
	  doc/extensions/vacation.txt for more information.
	- Fixed a binary code read problem in the `set' command of the Sieve variables
	  extension. Using the set command with a modifier and an empty string value
	  would cause code corruption problems while running the script.
	- Various fixes for doveadm-sieve plugin, mostly crashes. These include a fix
	  for the `Invalid value for default sieve attribute' problem.
	- Various fixes for compiler and static analyzer warnings, e.g. as reported
	  by CLang and on 32 bit systems.
	- Fixed the implementation of the new :options flag for the Sieve include
	  extension.
	- Fixed potential segfault bug at deinitialization of the lda-sieve plugin.
	- Fixed messed up hex output for sieve-dump tool.

v0.4.1 03-06-2013 Stephan Bosch <stephan@rename-it.nl>

	+ Added support for handling temporary failures. These are passed back to
	  LDA/LTMP to produce an appropriate response towards the MTA. 
	- Sieve storage: Removed PATH_MAX limitation for active symlink. This caused
	  problems for GNU/Hurd.
	- Fixed line endings in X-Sieve headers added by redirect command.
	- ManageSieve: Fixed '[' ']' stupidity for response codes (only happened
	  before login).
	- Fixed setting name in example-config/conf.d/20-managesieve.conf.
	- Sieve extprograms plugin: Fixed interaction between pipe command and remote
	  script service. The output from the script service was never read, causing a
	  broken pipe error at the script service. Apparently, this was broken since
	  the I/O handling for extprograms was last revised. 
	- Fixed assertion failure due to datastack problem in message header
	  composition.

v0.4.0 09-05-2013 Stephan Bosch <stephan@rename-it.nl>

	+ Added doveadm-sieve plugin that provides the possibility to synch Sieve
	  scripts using doveadm sync along with the user's mailboxes.
	+ Added the Sieve extprograms plugin to the main Pigeonhole package. It is
	  still a plugin, but it is now included so that a separate compile is no
	  longer necessary and distributors are likely to include it. The extprograms
	  plugin provides Sieve language extensions that allows executing 
	  (administrator-controlled) external programs for message delivery,
	  message filtering and string manipulation. Refer to
	  doc/plugins/sieve_extprograms.txt for more information.
	+ Added debug message showing Pigeonhole version at initialization. Makes it
	  very clear that the plugin is properly loaded.
	+ Finished implementation of the Sieve include extension. It should now
	  fully conform to RFC 6609. The main addition is the new :optional tag which
	  makes the include command ignore missing included scripts without an error.
	+ Finished implementation of the Sieve environment extension as much as
	  possible. Environment items "location", "phase" and "domain" now also
	  return a usable value.

v0.3.6 26-09-2013 Stephan Bosch <stephan@rename-it.nl>

	- Fixed a binary code read problem in the `set' command of the Sieve variables
	  extension. Using the set command with a modifier and an empty string value
	  would cause code corruption problems while running the script.
	- Various fixes for compiler and static analyzer warnings, as reported
	  by CLang.
	- ManageSieve: Fixed '[' ']' stupidity for response codes (only happened
	  before login).
	- Fixed setting name in example-config/conf.d/20-managesieve.conf.
	- Fixed messed up hex output for sieve-dump tool.

v0.3.5 09-05-2013 Stephan Bosch <stephan@rename-it.nl>

	- Sieve editheader extension: fixed interaction with the Sieve body extension.
	  If used together, the deleteheader action could fail after a body test was
	  performed.
	- Test suite: fixed a time zone dependency in the Sieve date extension tests.

v0.3.4 06-04-2013 Stephan Bosch <stephan@rename-it.nl>

	* Changed error handling to be less of a nuisance for administrators. Strictly
	  user-caused errors are only reported in user log. Some errors are logged as
	  info instead.
	* Sieve: Changed behavior of redirect in case of a duplicate message delivery
	  or a mail loop. If a duplicate is detected the implicit keep is canceled,
	  as though the redirect was successful. This prevents getting local
	  deliveries. The original SMTP recipient is used when it is available to
	  augment the entry in the LDA duplicate database. This way, duplicates are
	  only detected when (initially) addressed to the same recipient.
	+ Sieve vnd.dovecot.duplicate extension: added new features to the duplicate
	  test, making it possible to manually compose the key value for duplicate
	  checking. This extension is in the process of being standardized
	  (https://tools.ietf.org/html/draft-bosch-sieve-duplicate-01).
	+ Sieve date extension: generate warning when invalid date part is specified.
	- Sieve editheader extension: fixed crash occurring when addheader :last was
	  used.
	- Sieve include extension: fixed missing error cleanup that caused a resource
	  leak.
	- Sieve vacation extension: fixed determination of From: address for when
	  sieve_vacation_dont_check_recipient is active.
	- Sieve tools: the -D option wasn't enabled and documented for all tools.
	- Siev dict script storage: fixed potential segfault occurring when dict
	  initialization fails.
	- ManageSieve: fixed bug in skipping of CRLF at end of AUTHENTICATE command.
	- ManageSieve: fixed handling of unkown commands pre-login.
	- Fixed compile on Mageia Linux.

v0.3.3 18-09-2012 Stephan Bosch <stephan@rename-it.nl>

	- Fixed compile against installed Dovecot headers. This was broken by the
	  ld.gold fix in the previous release.

v0.3.2 18-09-2012 Stephan Bosch <stephan@rename-it.nl>

	+ sieve-refilter tool: improved man page documentation by explicitly
	  specifying the syntax used for mailbox arguments.
	+ Sieve: spamtest and virustest extensions: improved trace debugging of score
	  calculation.
	+ Sieve: made error messages about exceeding the maximum number of actions
	  more verbose.
	- Sieve tools: fixed problems with running as root: sievec and sieve-dump now
	  ignore mail_uid and mail_gid settings when run as root.
	- Sieve: fixed bug in action accounting (for limit checking): increase action
	  instance count only when an action is actually created.
	- Sieve: include extension: fixed namespace separation of :global and
	  :personal scripts.
	- ManageSieve: fixed segfault bug triggered by CHECKSCRIPT command.
	- Fixed linking with ld.gold.
	- Fixed several Clang compile warnings and a few potential bugs.

v0.3.1 25-05-2012 Stephan Bosch <stephan@rename-it.nl>

	* Added support for retrieving Sieve scripts from dict lookup. This means that
	  Sieve scripts can now be downloaded from a database. Compiled script
	  binaries are still put on disk somewhere if used. The INSTALL documentation
	  is updated with information on this new feature and the
	  (backwards-compatible) changes to the configuration. Note that his feature
	  is currently not supported for sieve_before/sieve_after or script management
	  through ManageSieve.
	+ Incorporated the sieve_duplicate plugin into main Pigeonhole tree as a
	  normal extension (vnd.dovecot.duplicate). This Dovecot-specific extension
	  adds the ability to check for duplicate deliveries based on message ID.
	  Specification can be found in: doc/rfc/spec-bosch-sieve-duplicate.txt
	+ Added support for specifying multiple sieve_before and sieve_after paths.
	  This adds much more flexibility to the multiscript configuration. One
	  application is to have user-specific Sieve scripts outside the user's
	  normal control through ManageSieve.
	+ Added a "session ID" string for managesieve connections, available in
	  %{session} variable (analogous to Dovecot change).
	- Fixed several small issues, including a few potential segfault bugs, based
	  on static source code analysis.
	- ManageSieve: changed use of EPROTO error to EIO in ManageSieve string stream
	  implementation because it is apparently not known in BSD.
	- Gave stamp.h.in (needed for autotools) some content to prevent it from
	  disappearing in patch files.
	- Fixed bug that caused a SunStudio CC compile failure (reported by Piotr
	  Tarnowski).

v0.3.0 16-02-2012 Stephan Bosch <stephan@rename-it.nl>
	* Renamed sieve_global_path setting to sieve_default for clarity. Old name is
	  still recognized for backwards compatibility. Support for the ancient (pre
	  v1.1) name for this setting "global_script_path" is now dropped.
	* Added means to prohibit use of redirect action. Setting sieve_max_redirects
	  to 0 now means that redirect is disallowed instead of unlimited. Default
	  value remains four.
	* Fixed interaction of Sieve include extension with ManageSieve. It is updated
	  to match new requirements in the draft include specification. Missing
	  included scripts are no longer an error at upload time.
	* Updated RFC2822 header field body verification to exclude non-printing
	  characters (RFC5322). Only Sieve actions that can create unstructured header
	  values (currently enotify/mailto and editheader) are affected by this
	  change.
	+ Completed sieve-filter tool to a useful state. The sieve-filter tool
	  provides a means to (re)filter messages in a mailbox through a Sieve script.
	+ Implemented the Sieve editheader extension. It is now possible to add and
	  remove message headers from within Sieve.
	+ ManageSieve: added support for reading quoted and literal strings as a
	  stream. Fixes support for handing large SASL responses (analogous to similar
	  changes in Dovecot). It is now also allowed to use a quoted string for the
	  PUTSCRIPT script argument.
	+ Added code to cleanup tmp directory in Sieve storage directory (sieve_dir)
	  every once in a while.
	+ Added support for substituting the entire message during Sieve processing.
	  This is used for the filter action provided by the new sieve_extprograms
	  plugin (provided separately for now). The filter action allows passing the
	  message through an external program.
	+ Added support for restricting certain Sieve language extensions to
	  (admin-controled) global scripts. Restricted extensions can be configured
	  using the new sieve_global_extensions setting. This is particularly useful
	  for some of the Dovecot-specific (plugin-based) Sieve extensions, that can
	  be somewhat hazardous when under direct control of users (e.g.
	  sieve_extprograms).
v0.2.6 13-02-2012 Stephan Bosch <stephan@rename-it.nl>

	* This release fixes unintentional behavior of the include extension. Included
	  scriptnames with a name like "name.sieve" would implicitly map to a script
	  file called "name.sieve" and not "name.sieve.sieve". Keep in mind that the
	  .sieve file extension has no meaning from within the Sieve language. A Sieve
	  script is always stored with an appended .sieve file extension, also when
	  the name already ends with a .sieve suffix.
	  IMPORTANT: Some installations have relied on this unintentional feature, so
	  check your script includes for issues before upgrading.
	* Matched changes regarding auth_verbose setting in Dovecot. This means that
	  this release will only compile against Dovecot v2.0.18.
	- Fixed problem in ManageSieve that caused it to omit a WARNINGS response code
	  when the uploaded script compiled with warnings.
	- Made sure that locations of Sieve error never report `line 0'.
	- Fixed potential segfault occurring when interpreter initialization fails.
v0.2.5 19-11-2011 Stephan Bosch <stephan@rename-it.nl>

	+ Sieve vacation extension: made discard message for implicit delivery more
	  verbose
	- The sieve-test tool: mixed up original and final envelope recipient in
	  implementation of command line arguments.
	- Sieve vacation extension: resolved FIXME regarding the use of variables in
	  the :handle argument. Variables are now handled correctly.
	- Sieve body extension: fixed handling of :content "message/rfc822". This now
	  yields the headers of the embedded message as required by the specification.
		Handling of :content "multipart" remains to be fixed.
	- LDA Sieve plugin: fixed problem with recipient_delimiter configuration. Now
	  falls back to global recipient_delimiter setting if
	  plugin/recipient_delimiter is not set.

v0.2.4 13-09-2011 Stephan Bosch <stephan@rename-it.nl>

	+ Vacation extension: finally added support for using the original recipient
	  in vacation address check. It is also possible to disable the recipient
	  address check entirely. Check doc/vacation.txt for configuration
	  information.
	+ Include extension: made limits on the include depth and the total number of
	  included scripts configurable. Check doc/include.txt for configuration
	  information.
	+ Implemented ihave extension. This allows checking for the availability
	  of Sieve language extensions at 'runtime'. Actually, this is checked
	  at compile time. At runtime the interpreter checks whether extensions
	  that were not previously available are still unavailable. If the situation
	  changed, the script is re-compiled and the ihave tests are evaluated again.
	+ Sieve: optimized compilation of tests that yield constant results (i.e.
	  known at compile tme), such as 'true' and 'false'. No code is produced
	  anymore for script sections that are never executed. Also, semantics
	  are not verified anymore in uncompiled script sections.

Consent

On this website, we use the web analytics service Matomo to analyze and review the use of our website. Through the collected statistics, we can improve our offerings and make them more appealing for you. Here, you can decide whether to allow us to process your data and set corresponding cookies for these purposes, in addition to technically necessary cookies. Further information on data protection—especially regarding "cookies" and "Matomo"—can be found in our privacy policy. You can withdraw your consent at any time.