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.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 occuring 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 occuring 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 in stead 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.
	+ Made vnd.dovecot.debug extension available to the LDA plugin instead of
	  only the command line tools.
	+ Sieve: redirect action now adds X-Sieve-Redirected-From header (mainly for
	  people using SPF/SRS).
	- Sieve: fixed bug in handling flags and keywords; in case of error an
	  assertion was triggered.
	- Script storage: improved handling of unconfigured user home directory.
	  Originally this would produce an unhelpful error message.
	- Imap4flags extension: prevent forcibly enabling imap4flags when imapflags
	  is enabled.
	- Fixed various -Wunused-but-set-variable compiler warnings.
	- Include extension: forgot to check variable identifier syntax for 'global'
	  command.
	- Sieve: fixed debug mode; no messages were logged in some situations.
	- sievec tool: forgot to enable -D (debug) parameter.

v0.2.3 14-04-2011 Stephan Bosch <stephan@rename-it.nl>

	* Sieve filter tool: finished implementing basic functionality. It is not
	  quite ready yet, but it is available for those willing to experiment
	  with it (needs --with-unfinished-features config to compile). Also
	  includes man page.
	+ Vacation extension now inhibits replies to messages from sender listed
	  in :addresses, thus preventing replies to one of the user's other known
	  addresses.
	+ Vacation extension: implemented the (draft) vacation-seconds extension.
	  This also adds min/max period configuration settings. Refer to
	  doc/vacation.txt for configuration information.
	- ManageSieve: fixed bug in UTF-8 checking of string values. This is done
	  by discarding the original implementation and migrating to the Dovecot
	  API's UTF-8 functionality.
	- Sieve command line tools now avoid initializing the mail store unless
	  necessary. This prevents sievec and sieve-dump from failing when
	  executed by root for example.
	- Enotify extension: fixed inappropriate return type in mailto URI parse
	  function, also fixing ARM compiler warning.
	- Vacation extension: fixed handling of sendmail errors. It produced an
	  additional confusing success message in case of error.
	- Removed header MIME-decoding to fix erroneous address parsing. Applies to
	  address test and vacation command.
	- Fixed segfault bug in extension configuration, triggered when unknown
	  extension is mentioned in sieve_extensions setting.

v0.2.2 06-12-2010 Stephan Bosch <stephan@rename-it.nl>

	* LDA Sieve plugin: started using Dovecot LDA reject API for the reject
	  extension. This means that the LDA reject_reason and reject_subject
	  settings now also work for Pigeonhole's LDA Sieve plugin.
	* Did some work on the new sieve-filter tool. It is mostly functional, but
	  it is not finished yet.
	* Dovecot change: services' default vsz_limits weren't being enforced
	  correctly in earlier v2.0 releases. Now that they are enforced, you might
	  notice that the default limits are too low and you need to increase them.
	  This problem will show up in logs as "out of memory" errors. See
	  default_vsz_limit and service { vsz_limit } settings.
	- Imap4flags: fixed segfault bug occuring in multiscript context.
	- Added version checking to the ManageSieve settings plugin. This plugin was
	  forgotten when the LDA plugin was updated with this change in the previous
	  release.
	- LDA Sieve plugin: fixed memory leak at deinitialization.

v0.2.1 27-09-2010 Stephan Bosch <stephan@rename-it.nl>

	+ Incorporated distinction between original and final envelope recipient in
	  Sieve interpreter, as recently introduced in Dovecot.
	+ Regex extension: added support for regex keys composed from variables.
	- LDA Sieve plugin: added _version symbol to enable Dovecot's plugin version
	  check. Without this check, people can forget to recompile the plugin, which
	  can lead to unexpected effects.
	- LDA Sieve plugin: turned debug message about an unconfigured home directory
	  into a proper error and added script path information.
	- Fixed unnecessary reporting of dummy extensions in ManageSieve SIEVE
	  capability; the comparator-i;octet and comparator-i;ascii-numeric
	  'extensions' were reported explicitly.

v0.2.0 10-09-2010 Stephan Bosch <stephan@rename-it.nl>

	* Merged Sieve and ManageSieve packages into a single Pigeonhole package.
	  There is also no need to patch Dovecot anymore to gain ManageSieve support.
	  Version numbering of previous Sieve releases is continued as v0.2.0. The
	  sources originally branched off from Sieve v0.1.5 and ManageSieve v0.11.4,
	  but the NEWS history of much more recent releases for Dovecot v1.2 is
	  included since these changes are all included in this release as well.
	* The ManageSieve service now binds to TCP port 4190 by default due to the
	  IANA port assignment for the ManageSieve service. When upgrading from v1.2,
	  this should be taken into account. The service can be configured manually to
	  listen on both 2000 and 4190.
	* The Dovecot configuration now calls the ManageSieve protocol 'sieve' in
	  stead of 'managesieve' because it is registered as such with IANA. The
	  binaries and the services are still called managesieve and
	  managesieve-login.
	* The binary representation of a compiled Sieve script is updated to include
	  source code locations of all commands and arguments. This is implemented in
	  a similar manner as such debug information is included in some system
	  executables and libraries (DWARF-like). Run-time errors can now always refer
	  to the proper line number in the Sieve source script.
	* The Sieve plugin is adapted to work properly with the new LMTP service
	  introduced with Dovecot v2.0. The same plugin is used for both LDA and LMTP.
	* The 'sieve_subaddress_sep' setting for the Sieve subaddress extension is now
	  known as 'recipient_delimiter'. Although the deprecated sieve_subaddress_sep
	  setting is still recognized for backwards compatibility, it is recommended
	  to update the setting to the new name, since the new LMTP service also uses
	  the recipient_delimiter setting.
	* ManageSieve: changed default IMPLEMENTATION capability to from 'Dovecot' to
	  'Dovecot Pigeonhole'.
	* Renamed the sieved tool to sieve-dump. The original name was somewhat
	  confusing.
	* Updated man pages to match style and structure of new Dovecot man pages.
	* Made testsuite commands more uniform and cleaned up many of the testsuite
	  scripts. Some minor new tests were added in the process.
	+ Simplified string matching API to use abstract string lists as data sources.
	  This will also make implementing the index extension easier in the future.
	+ Significantly improved trace debugging with the sieve-test tool. The full
	  execution of the script can be examined, including the matched values and
	  keys of the respective Sieve test commands. The executed statements are
	  listed with their line number (and code address when requested). The level
	  of detail is configurable from the command line.
	+ The SIEVE and NOTIFY capabilities reported by the ManageSieve protocol can
	  now be configured manually. If left unconfigured, the capabilities are
	  determined from the default Sieve and ManageSieve configuration.
	  User-specific capabilities aren't reported until after authentication.
	+ Significantly improved file error handling. This means that administrators
	  get a more useful and informative log message when file operations fail. The
	  most notable example is that when the LDA Sieve plugin is trying to store a
	  binary for a global script, the resulting failure message also points the
	  administrator towards pre-compiling the script with sievec.
	+ Added runtime argument value checking for several commands (redirect, date
	  vacation). When variables are used, these checks cannot be performed at
	  compiletime. A proper runtime error now is produced when invalid data is
	  encountered.
	+ UTF8 validity of fileinto command argument is now checked either at compile
	  time or at runtime. Previously, it was not checked until the store action
	  was executed.
	+ Validity of IMAP flags for the imap4flags extension is now checked also
	  at runtime. Previously, it was not checked until the store action was
	  executed.
	+ Simplified and restructured error handling. Also made sure that user-caused
	  errors are no longer written to the Dovecot master/LDA log.
	- Multiscript: fixed duplicate implicit keep caused by erroneous execution
	  state update.
	- Prevented assertion failure due to currupt binary string representation.
	  If the string was missing a final \0 character an assertion was produced in
	  stead of a binary corruption error.
	- Imap4flags: fixed bug in setflag command; when parameter was a stringlist,
	  only the last item was actually set.
	- Variables extension: fixed :length set modifier to recognize utf8 characters
	  in stead of octets.
	- Testsuite: prevented innocent warning messages, i.e. those that are part of
	  the test, from showing up by default.
	- ManageSieve/Sieve storage: fixed error handling of PUTSCRIPT commmand; save
	  commit errors would not make the command fail.
	- ManageSieve: enforced protocol syntax better with some of the commands; some
	  commands allowed spurious extra arguments.
	- Fixed Sieve script name checking to properly handle length limit and added
	  0x00ff as invalid character.
	- Removed spurious old stdio.h (top) includes; these caused compile issues on
	  specific systems.
	- Fixed default Sieve capability (as reported by ManageSieve): extra
	  extensions spamtest, spamtestplus and virustest were enabled by default.
	  These should, however, only be enabled when properly configured and there
	  is no default configuration.

(Fused Dovecot Sieve and ManageSieve packages into a single Pigeonhole release)

Dovecot Sieve NEWS history:
---------------------------

Dovecot 1.2:

v0.1.17 19-06-2010 Stephan Bosch <stephan@rename-it.nl>

	- Made sure source code positions for compiler messages are recorded at start
	  of tokens.
	- Fixed a few potential memory leaks in the Sieve compiler and the
	  spam/virustest extensions.
	- Made command line tools return proper exit status upon failure.

v0.1.16 30-04-2010 Stephan Bosch <stephan@rename-it.nl>

	* Finished implementation of spamtest, spamtestplus and virustest extensions.
	  These are not enabled by default and need to be activated with the
	  sieve_extensions setting. Documentation available in
	  doc/spamtest-virustest.txt
	+ Vacation extension: the from address of the generated reply is now by
	  default equal to whatever known recipient alias matched the headers of the
	  message. If it is one of the aliases specified with :addresses, it is used
	  in stead of the envelope recipient address that was used before.
	+ Restructured and optimized the lexical scanner.
	+ Added --with-docs configure option to allow disabling installation of
	  documentation.
	- Accidentally omitted 'extern' in two declarations of global variables in
	  header files, causing compile failures on certain systems.
	- Deprecated imapflags extension: fixed implicit assignment of flags. Turns
	  out this never really worked, but the effect of this bug was obscured by the
	  removeflag bug fixed in the previous release.
	- Fixed various memset argument mixups in enotify extension. This caused
	  warnings on certain systems, but luckily no adverse effects at runtime.

v0.1.15 25-01-2010 Stephan Bosch <stephan@rename-it.nl>

	* Enotify extension:
	  - Adjusted notify method API for addition of new notification methods.
	  - Set default importance level to 'normal' (was 'high').
	* Include extension: updated implementation towards most recent specification
	  (all should be backwards compatible):
	  - Implemented global variables namespace.
	  - Global command may now appear anywhere in a script.
	  - Implemented script name checking using the requirements specified in the
	    ManageSieve draft.
	  - One issue remains: ManageSieve currently requires included scripts to be
	    uploaded first, which is not according to specification.
	* Changed envelope path parser to allow to and from envelope addresses that
	  have no domain part.
	+ Added preliminary support for Sieve plugins and added support for installing
	  Sieve development headers.
	+ Started work on the implementation of the spamtest, spamtestplus and
	  virustest extensions (unfinished).
	+ Deprecated notify extension: implemented denotify command.
	+ Variables extension: added support for variable namespaces.
	+ Added configurable script size limit. Compiler will refuse to compile files
	  larger than sieve_max_script_size.
	+ Testsuite changes:
	  - Added support for changing and testing an extension's configuration.
	  - Added a command line parameter for copying errors to stderr.
	- Fixed a bug in the i;ascii-numeric comparator. If one of the strings started
	  with a non-digit character, the comparator would always yield less-than.
	- Imap4flags extension: fixed bug in removeflag: removing a single flag failed
	  due to off-by-one error (bug report by Julian Cowley).
	- Improved EACCES error messages for stat() and lstat() syscalls and slightly
	  improved error messages that may uccur when saving a binary.
	- Vacation extension: fixed typo in runtime log message (patch by Julian
	  Cowley).
	- Fixed use of minus '-' in man pages; it is now properly escaped.
	- Fixed parser recovery. In particular cases it would trigger spurious errors
	  after an initial valid error and sometimes additional errors were
	  inappropriately ignored.

v0.1.14 19-12-2009 Stephan Bosch <stephan@rename-it.nl>

	* Made the imposed limits on the number of redirects and the number of
	  actions configurable. The settings are called sieve_max_actions and
	  sieve_max_redirects.
	* Did a major rework of extension handling, making sure that no global state
	  is maintained. This change was triggered by problems that global state info
	  would cause for Dovecot v2.0, but it is also important for v1.2 as it
	  significantly cleans up the library implementation.
	+ Made LDA Sieve plugin recognize the deliver_log_format setting.
	+ Message headers produced from user-supplied data are now RFC2047-encoded if
	  necessary for outgoing messages. This is for example important for the
	  :subject argument of the vacation action.
	+ Added support for the $text$ substitution in the deprecated notify
	  extension.
	+ The subaddress extension now also accepts recipient_delimiter setting as an
	  alias for sieve_subaddress_sep setting. This anticipates the
	  recipient_delimiter setting in v2.0.
	- Fixed logging of mailbox names. It logged the converted mUTF7 version in
	  stead of the original UTF8 version supplied by the user.
	- Fixed a minor memory leak in the multiscript support.
	- Fixed a bug in the recompilation of Sieve scripts. Made sure that scripts
	  are only recompiled when the script file - or the symlink pointing to it -
	  is strictly newer.

v0.1.13 18-10-2009 Stephan Bosch <stephan@rename-it.nl>

	+ Body extension: implemented proper handling of the :raw transform and added
	  various new tests to the test suite. However, :content "multipart" and
	  :content "message/rfc822" are still not working.
	+ Fixed race condition occuring when multiple instances are saving the same
	  binary (patch by Timo Sirainen).
	+ Test suite: added support for testing multiscript execution.
	- Made compiler more lenient towars missing CRLF at the end of the script in a
	  hash comment.
	- Body extension: don't give SKIP_BODY_BLOCK flag to message parser, we want
	  the body! (patch by Timo Sirainen).
	- Fixed handling of implicit side effects for multiscript execution.
	- Fixed bugs in multiscript support; subsequent keep actions were not always
	  merged correctly and implicit side effects were not always handled
	  correctly.
	- Fixed a segfault bug in the sieve-test tool occuring when compile fails.
	- Fixed segfault bug in action procesing. It was triggered while merging side
	  effects in duplicate actions.
	- Fixed bug in the Sieve plugin that caused it to try to stat() a NULL path,
	  yielding a 'Bad address' error.

v0.1.12 21-08-2009 Stephan Bosch <stephan@rename-it.nl>

	+ Testsuite: added support for testing binaries stored on disk.
	+ Implemented the new date extension. This allows matching against date values
	  in header fields and the current date at the time of script evaluation.

v0.1.11 08-08-2009 Stephan Bosch <stephan@rename-it.nl>

	+ Built skeleton implementation for the date extension (RFC 5260). It
	  compiles, but it does not do anything useful yet. Therefore, it is not part
	  of the default compilation.
	- Fixed ARM portability issues caused by char type not being signed on that
	  platform. Reading optional operands from a binary would fail for action side
	  effects. Also, an accidental mixup of an int return type with bool caused
	  the interpreter to continue on ARM even though an error occured.
	- Removed direct stdint.h includes to prevent portability issues.
	- Fixed segfault bug in the handling of script open failures.
	- Include: improved user error messages and system log messages.
	- Fixed copy-paste mixup between sieve_after and sieve_before settings in the
	  LDA Sieve plugin. If only a sieve_after script was active, nothing would
	  have been executed. Patch by Mike Abbott.
	- Include: fixed a bug in HOME substitution in the sieve_dir path. Surfaced in
	  ManageSieve.

v0.1.10 03-08-2009 Stephan Bosch <stephan@rename-it.nl>

	* Changed action execution of fileinto and keep. These changes depend on API
	  additions in Dovecot, making this release depend on Dovecot v1.2.2 or newer.
	* Further developed the sieve-filter command line tool. This required a few
	  changes to the action execution of the Sieve engine. The tool was
	  successfully tested on folders with a few 100k spam messages. However, the
	  commandline options are still incomplete, a man page is missing and it needs
	  much more testing before I can recommend anyone to use this tool.
	+ Added support for the mailbox extension. This allows checking whether a
	  mailbox exists using the mailboxexists command and it adds the :create
	  argument to the fileinto command to create the mailbox when it is missing.
	  The :create feature is useless unless the Deliver LDA is run with the -n
	  option.
	+ Improved the testsuite with tests for message delivery. Messages stored
	  using keep and fileinto can be fed back into the Sieve engine for
	  verification. This includes testing of applied IMAP flags.
	+ Updated the man pages with the new method of specifying the supported
	  extensions using + and - (for the -x parameter of the sieve tools)
	+ Further developed the deprecated notify extension. A dummy for the denotify
	  command exists, meaning that its use does not cause an error anymore.
	- Fixed a bug in the derivation of the binary path from the script path. A
	  bare filename would yield a path relative to root.
	- Fixed a bug in the value matching code. The context data now uses a proper
	  pool in stead of the data stack. Bug reported by Jan Sechser.
	- Fixed assertion fail in the include extension caused by missing
	  initialization upon binary load. This bug surfaces only for stored
	  binaries. Bug reported by Tom Hendrikx.
	- Fixed include error message for failed :global include. It mentioned the
	  wrong config parameter.
	- Fixed broken wiki reference in an error message of the plugin about the
	  'sieve' setting.
	- Fixed behavior of fileinto when delivering into a namespace prefix.
	  Previous fix used the wrong storage.

v0.1.9 22-07-2009  Stephan Bosch <stephan@rename-it.nl>

	* Removed the unfinished sieve-filter tool from the default build. It is now
	  only built when the --with-unfinished-features switch is supplied during
	  configure.
	+ Started building support for the ereject version of the reject action,
	  which has a preference to use an SMTP/LMTP protocol error in stead of a
	  bounce message. This is to be used to make the Sieve plugin honour Deliver's
	  -e parameter. This is not yet finished and not built by default.
	+ Improved 'Permission denied' error messages just like Dovecot does,
	  precisely specifying what permission is missing to access or create a file.
	+ Added additional headers to the list of allowed headers for the address
	  test. The restrictive nature of the address test is not always appropriate.
	  Still thinking of a better, less restrictive implementation.
	+ Made the deprecated notify extension compatible with the old CMUSieve
	  plugin. However, the denotify command and the $text$ substitution are not
	  yet supported.
	+ Made the discard action log a message to avoid confusion about disappearing
	  messages.
	- Fixed behavior of fileinto when delivering into a namespace prefix. It now
	  uses silent delivery into INBOX as fallback.
	- Fixed logging of folder namespace prefix upon delivery into a prefixed
	  namespace. Formerly it only logged the bare folder name.
	- Fixed a potential segfault in the argument validation. It didn't surface
	  because no command could have a :tag followed by an associated parameter as
	  last argument.
	- Fixed segfault bug occuring in envelope test when performed on null (<>)
	  envelope path. The fix involves a rather large restructuring of the code to
	  make sure envelope addresses are properly handled everywhere (bug reported
	  by Nikita Koshikov)
	- Envelope: fixed bug in application of address parts; failure to obtain
	  the part would cause inappropriate match success (bug reported by Ron Lee)
	- Fixed extension conflict checks during validation. It could sometimes
	  produce useless errormessages. This is currently only used by the
	  deprecated extensions.
	- Forgot to remove old explicit storage library dependency (patch by
	  Arkadiusz Miskiewicz).
	- Fixed compiler warnings on certain platforms regarding the use fwrite for
	  outgoing message construction

v0.1.8 12-07-2009  Stephan Bosch <stephan@rename-it.nl>

	- Fixed AIX compile problem. For portability, the typeof operator is
	  not used anymore.
	+ Added partial support for the deprecated notify extension. However, it
	  turns out that the implementation provided by cmusieve is even older (2001),
	  meaning that this is currently not backwards compatible with cmusieve.

v0.1.7 05-07-2009  Stephan Bosch <stephan@rename-it.nl>

	+ Added support for CRLF line breaks in strbuf error handler to fix a
	  ManageSieve problem.
	+ Improved consistency of sieve tool documentation and fixed missing
	  parameters in internal tool help output.
	+ Enhanced extensions configuration, allowing to specify the enabled
	  extensions relatively to the default (patch by Steffen Kaiser).
	- Forgot to initialize script execution status in Sieve plugin, causing
	  segfaults on compile errors in specific conditions.
	- Fixed logging in Sieve plugin for execution of default main script (went
	  to STDERR).

v0.1.6 18-06-2009  Stephan Bosch <stephan@rename-it.nl>

	* Adjusted to changes in Dovecot to make it compile against v1.2.rc5
	* Made default of sieve_dir setting match the ManageSieve implementation.
	- Fixed a few problems in de body extension that caused assert failures in
	  specific situations.

v0.1.5 18-04-2009  Stephan Bosch <stephan@rename-it.nl>

	* Ported the implementation of the Sieve include extension to the latest
	  draft. This means that the import and export commands are replaced by a new
	  command called global. The import and export commands are now DEPRICATED and
	  are mere aliases for the global command. The new specification also adds the
	  :once modifier to the include command. The also newly specified global.*
	  variable namespace is not implemented yet as support for variable namespaces
	  is currently missing.
	* Did a major rework of the multiscript support for better error handling and
	  made sure that persistent global scripts (sieve_before/sieve_after) are
	  always executed, even when the user does not have a script of his own and
	  a global default is missing.
	+ Provided basic support for the environment extension. Currenly, the name,
	  version and host items are useful. Others are pending.
	+ Improved error message that is presented when an unknown Sieve extension is
	  provided as argument to the require command. It now notifies the user that
	  Sieve core commands do not need to be specified in require.
	- Fixed bug in includes at levels deeper than one.
	- Fixed bug in address matching that was caused by the failure to handle group
	  specifications. In dovecot, these are marked by address items with NULL
	  elements, which causes a segfault if not considered. The group 'undisclosed-
	  recipients:;' in particular triggered this bug. Bug reported by Bernhard
	  Schmidt.

v0.1.4 21-03-2009  Stephan Bosch <stephan@rename-it.nl>

	* Started work on the sieve-filter tool. With this command line tool it will
	  be possible to (re-)apply Sieve filters on a mail folder. It is currently
	  undocumented and far from functional.
	+ Added a custom debug extension that provides the possibility to print debug
	  messages from scripts executed by the Sieve tools.
	- Fixed issue with opening relative paths as a mail file. Bug reported by Ian
	  P. Christian.
	- Fixed MAC OSX compile problem. Turns out the extern modifier was missing at
	  multiple places. Bug reported by Edgar Fuss.
	- Fixed Solaris compile problem: removed unecessary and unportable linker
	  flags that caused compile to fail. Bug reported by Andrés Yacopino.

v0.1.3 12-02-2009  Stephan Bosch <stephan@rename-it.nl>

	* Adapted to changes in Dovecot, making this release dependent on Dovecot
	  >= 1.2.beta1
	* Made mail address comparison fully case-insensitive. This is particularly
	  noticeable for the :addresses argument of the vacation command.
	+ Finished enotify extension. Currently, only the mailto notification method
	  is implemented. All still needs to be tested thoroughly.
	+ Implemented multiscript support. It is now possible to execute multiple
	  Sieve scripts sequentially. Administrator-controlled scripts can be
	  executed before and after the user's script. Still needs to be tested
	  thoroughly.
	+ Implemented support for configuring the available Sieve extensions.
	+ Made the subaddress extension (partially) configurable using the
	  sieve_subaddress_sep setting, which allows specifying a (multi-charater)
	  separator other than '+'.
	+ Compiler now warns about invalid header field names used for the header and
	  address tests.
	+ Vacation extension now properly generates a References header for the
	  response message.
	+ Added testing of basic result execution to the test suite. Also added
	  supportfor testing the outgoing messages produced by the Sieve interpreter.
	+ Included execution of the actual result in the sieve-test command line tool.
	  The undocumented sieve-exec tool that existed for this is now removed as
	  planned.
	+ Added support for the now obsolete 'imapflags' extension for backwards
	  compatibility with CMUSieve. This also implements the mark/unmark commands.
	- Fixed bugs in the regex extension: 1) if an optional match value did not in
	  fact match, subsequent match values would get unexpected indexes. 2) fixed
	  segfault bug occuring when regex is freed.
	- Fixed bug in the use of the :from agrument for the vacation command. If this
	  address included a phrase part, the response would not be a valid RFC822
	  message.
	- Plugged a theoretical security hole occuring when a directory is opened as a
	  Sieve binary.
	- Cleaned up and fixed various log messages.
	- Fixed bug in the outgoing address verification. Addresses ending in ',' were
	  erroneously accepted.

v0.1.2 26-11-2008  Stephan Bosch <stephan@rename-it.nl>

	- Fixed important bug in the redirect action (and probably other actions like
	  reject and vacation that only send messages). This was a bug in the handling
	  of context information during the execution of actions. It caused the sieve
	  interpreter to crash with a segfault when redirect was executed.

v0.1.1 24-11-2008  Stephan Bosch <stephan@rename-it.nl>

	* Re-enabled support for compiling against dovecot headers. Much like
	  cmusieve, command line tools like sievec and sieved are not compiled in this
	  case.
	* Started implementation of enotify extension. Not anywhere near finished
	  though.
	* Adapted to changes in Dovecot on various occasions, making this release
	  dependent on Dovecot >= v1.2.alpa4.
	+ Improved logging of errors at specific occasions and added debug messages to
	  find script execution problems quicker.
	+ Removed code duplication between command line tools and the test suite.
	  Also restructured the sources of the tools.
	+ Added UTF-8 to UTF-7 folder name conversion for compatibility with IMAP.
	+ Created man pages for the command line tools. These are automatically
	  installed upon 'make install'
	+ Incorporated Valgrind support into the testsuite and fixed a few memory
	  leaks in the process.
	- Fixed compile error surfacing for gcc3.4. Forgot mask argument for the
	  open() system call when the O_CREAT flag is specified. Bug found by
	  Sergey Ivanov.
	- Fixed bug in the sievec tool. -d output was always written to stdout.
	- Fixed important bug in the imap4flags extension. When no :flags argument is
	  specified, the previous version would always use the final value of the
	  internal variable to set the flags. This means that modifications to the
	  internal variable also affected the bare fileinto/keep actions executed
	  earlier. This does not comply to the RFC.
	- Fixed bug in the include extension's import/export commands. Duplicate
	  import/exports caused problems.
	- Fixed bug in the handling of non-existent scripts. Errors were sometimes
	  ignored.
	- Dovecot omitted unfolding multi-line headers. This was added to the cmusieve
	  plugin after the code was incorporated into the new implementation. This is
	  now mplicitly fixed by concurrent change in Dovecot.

v0.1.0 23-10-2008  Stephan Bosch <stephan@rename-it.nl>

	* Initial release

Dovecot ManageSieve NEWS history:
---------------------------------

Dovecot 1.2:

v0.11.11:
	* This release contains adjustments to match changes in the Sieve API. This
	  means that this release will only compile against Pigeonhole Sieve
	  v0.1.15.
	+ Implemented ManageSieve QUOTA enforcement.
	+ Added MAXREDIRECTS capability after login.
	+ Implemented new script name rules specified in most recent ManageSieve
	  draft.
	- Fixed assertion failure occuring with challenge-response SASL mechanisms.
	- Made configure complain about trying to compile against installed Dovecot
	  headers alone.
	- Fixed compile warning for compilation against CMUSieve.

v0.11.10:
	* This release contains adjustments to match changes in the Sieve API. This
	  means that this release will only compile against Pigeonhole Sieve
	  v0.1.14.
	- Fixed compilation of ManageSieve against CMUSieve.

v0.11.9:
	* Adjusted to changes in the Dovecot login proxy API. This release
	  therefore depends on Dovecot v1.2.4.
	+ Reintroduced ability to abort SASL with "*" response. Latest ManageSieve
	  specification includes it.

v0.11.8:
	- Fixed TLS support for proxying ManageSieve. The protocol state machine
	  was incorrect. Also added a check that disables ssl when 'starttls' is
	  not enabled for the user. This produces a proper warning in the log file.
	  There is no such thing as a managesieveS protocol which has SSL from the
	  start.

v0.11.7:
	* Adjusted to changes in the Dovecot login API. This release now depends on
	  Dovecot v1.2.1 or newer.
	* Incorporated various small changes in IMAP into ManageSieve. This includes
	  properly enabling the generation of core dumps.
	- The previous release implicitly resolved the FreeBSD script truncation
	  error. This release adds a small correction to the code that detects the
	  truncation.
	- Fixed panic occurring when many errors are produced by the Sieve compiler
	  (bug found by Pascal Volk).
	- Fixed memory leak in the PUTSCRIPT command.

v0.11.6:
	* Adjusted to changes in Dovecot regarding client idle timeout vs
	  authentication timeout. This release now depends on Dovecot v1.2.rc6 or
	  newer.
	- Fixed CRLF line breaks in compile errors (bug reported by Pascal Volk).
	- Corrected directory/file creation behavior with respect to mode bits
	  and gid (bug reported by Pascal Volk).
	- Improved handling of script truncation bugs: connection is now closed and
	  an error is logged. bug itself not fixed yet).
	- Prevented temp script name from showing up in error output.

v0.11.5:
	* Incorporated various changes from imap-login into managesieve-login. This
	  includes changes in the proxy support.

v0.11.4:
	* Adjusted to changes in the Dovecot signal handler API.

v0.11.3:
	* Changed the SASL service name from "managesieve" into "sieve" as required
	  in the protocol specification. Don't forget to adjust your configuration
	  if your authentication mechanism depends on this service name.
	* Adapted to changes in Dovecot, making this release dependent on Dovecot
	  >= v1.2.beta1.
	* Adapted to changes in the new Sieve implementation, making this release
	  dependent on Dovecot Sieve >= v0.1.3 if used. The old cmusieve plugin is
	  still supported.
	+ Implemented making the SIEVE and NOTIFY capability fully dynamic, meaning
	  that the sieve_extensions setting that was introduced for the new Sieve
	  plugin properly affects the ManageSieve daemon as well.
	+ Added support for the CHECKSCRIPT command. In terms of the supported
	  commands, the ManageSieve daemon now complies with protocol VERSION 1.0 as
	  listed in the CAPABILITY response.
	- Fixed maximum permissions for uploaded scripts; was 0777. This
	  was shielded however by the default umask (not documented to be
	  configurable), so the actual permissions would never have been 0777.
	- Fixed a segfault bug in the authentication time-out. Bug report and trace
	  provided by Wolfgang Friebel.
	- Fixed handling of ~/ in use of mail-data for script location.
	- Fixed small problems in the login proxy support.

v0.11.2:
	* Adapted to changes in Dovecot, making this release dependent on Dovecot
	  >= v1.2.alpa4.

v0.11.1:
	- Fixed security issue that gives virtual users the ability to read and
	  modify each other's scripts if the directory structure of the sieve
	  storage is known.
	* Updated NOOP command to match new protocol specification
	+ Improved error handling and implemented the new response codes:
	  ACTIVE, NONEXISTENT, ALREADYEXISTS and WARNINGS

v0.11.0:
	* Upgraded to Dovecot v1.2
	* Added support for new ManageSieve extensions RENAME and NOOP
	* Moved sieve settings to plugin {} section of config file. Now the settings
	  `sieve` and `sieve_dir` in the plugin section are used for the Sieve plugin
	  and the ManageSieve service, avoiding the posibility of accidental
	  differences in configuration.

Dovecot 1.1:

v0.10.3
	* Removed erroneous inline declarations that caused compiler warnings. GCC 4.3
	  turns out to fail entirely as reported by Joel Johnson.
	* Fixed auto-dectection of Sieve implementation during ./configure. It now
	  produces a proper error when the directory is invalid.

v0.10.2
	* Fixed bug that caused SASL mechanisms that require more than a single client
	  response to fail. Reported by Steffen Kaiser and occured when he tried using
	  the (obsolete) LOGIN mechanism.
	* Updated installation and configuration documentation to match the
	  information provided in the wiki

v0.10.1
	* Fixed bug introduced in v0.10.0: compiled scripts were also written to disk
	  in the sieve/tmp directory and left there. This accumulates much .sievec
	  junk in that directory over time.
	* Fixed bug in tmp file generation for sieve-storage: errors other than EEXIST
	  would cause the daemon to sleep() loop indefinitely.

	+ Improved log lines to be more recognizable as being generated from
	  managesieve.
	+ Added short proxy configuration explanation to the README file
	+ Added 'Known Issues' section to the README file
	- Fixed assert bug in sieve-storage occuring when save is canceled.

v0.10.0
	* Upgraded to Dovecot 1.1:
		- The actual managesieve implementation is now a separate package.
		  The dovecot tree still needs to be patched though to make dovecot
		  recognize the new managesieve service.
		- Incorporated changes to imap/imap-login into the equivalent
		  managesieve processes.
		- Removed cmusieve implementation from managesieve sources. It is
		  now linked externally from the dovecot-sieve-1.1 package.
		- Restructured README.managesieve file into separate README, NEWS,
		  TODO, DESIGN and INSTALL files.
	* Added support for new libsieve implementation (to be released). This
	  package can be compiled with either the new or the old Sieve
	  implementation (autodetected). If the new Sieve becomes stable, this
	  package will be merged with it to make a single package for Dovecot
	  Sieve support.

Dovecot 1.0:

v9

+ Definitively fixed the segfault mentioned in V8. It proved to be
  very time-constrained and thus hard to reproduce. The error turned out
  to be related to the input handling of the login daemon during
  authentication.
+ Checked for changes in the imap daemon that weren't propagated to the
  managesieve implementation due to code duplication.
+ Fixed a bug in the autodetection of the sieve storage location.
+ Fixed bug in the sieve storage that failed to refresh the symlink if
  the storage was moved.
+ Improved error handing in the sieve-storage implementation in various
  places.
+ Fixed the situation in which the active script link is located in the
  sieve storage.
+ Added managesieve configuration to dovecot-example.conf and made the example
  in this file more concise.

v8

+ Fixed a few incompatibilities with 1.0.7 version. For instance, the "Logged
  in" message is now sent by the -login process and not by the managesieve
  daemon anymore. This caused a segfault every once in a while.
+ Probably fixed the settings problem reported by Steffen Kaiser regarding
  login_dir. 'dovecot -n' now reports correct results, but testing will show
  whether the whole problem is solved.
+ The managesieve daemon now accepts the sieve_storage and sieve configuration
  settings, so it is now possible to explicitly configure the location of the
  sieve storage and the active script respectively. The daemon still falls back
  to using the mail_location (MAIL) settings if nothing else is specified.
+ The cyrus timsieved does not use the + character in string literals and many
  clients have adopted to this behaviour. The latest managesieve (08) advises to
  accept a missing + from clients. The server should not send any + characters
  as well. This behavior is now implemented on the server.
+ Cleaned up sieve-storage.c: split up the sieve_storage_create function in
  various sub-functions for obtaining the various paths and directories.
+ Forced manual intervention if rescueing a non-symlink file at the active script
  path fails somehow. Previously, this presented the admin with a log message
  that it had just eaten the script, which is not very nice.
+ Restructured the README.managesieve file and added some more explanation with
  regard to the configuration of the daemon.

v7

- Robin Breathe indicated that the regex capability was missing in the server's
  SIEVE listing. It turns out I forgot to make arrangements for setting
  ENABLE_REGEX in the cmu libsieve sources, so the regex extension was not
  compiled in. I copied the configure.in section regarding ENABLE_REGEX from
  dovecot-sieve-1.0.2 and that fixed the problem.

v6

- Corked the client output stream while producing the capability greeting and on
  other some other occasions as well. Some naive client implementations expect to
  receive this as a single tcp frame and it is a good practice to do so anyway.
  Using this change the Thunderbird sieve extension (v0.1.1) seemed to work. However,
  scripts larger than a tcp frame still caused failures. All these issues are fixed
  in the latest version of the sieve add-on (currently v0.1.4).
- Cleaned up the new proxy source. My editor made the indentation a complete mess
  in terms of TABs vs spaces.
- Added TRYLATER response codes to BYE and NO messages where appropriate.
- Recopied the libsieve library into this patch to incorporate any changes that were
  made (only sieve-cmu.c still needs to be compared to the old cmu-sieve.c). This
  also solves the __attribute__((unused)) GCC dependencies. These were fixed long
  ago by Timo....  the code duplication beast strikes again.
- Removed spurious return value from void function in
  src/lib-sieve/sieve-implementation.c as reported by Robin Breathe. GCC fails to
  report these issues. The function involved is currently not used and serves only
  as an example on how dovecot could support multiple sieve backends...

v5

- Applied patch by Uldis Pakuls to fix master_dump_settings bug
- Added some compilation/installation info to this README
- Moved README to source tree root as README.managesieve
- Fixed minor error handling bug in sieve_storage.c with respect to a missing
  root directory.
- Now sieve capabilities are reported as they are specified by the implementing
  library and not in forced upper case. The sieve RFC now explicitly states
  that sieve capability identifiers are case-sensitive. This broke compatibility
  with SquirrelMail/Avelsieve.
- Disabled ANONYMOUS login entirely until proper support is implemented. V4
  claimed to do so as well, but in fact it only stopped announcing it.
- Implemented managesieve-proxy. It is not so much a clean copy of imap-proxy,
  since the managesieve greeting is much more complex and requires parsing.
  Configuration is identical to imap-proxy. This seems to be a little under-
  documented however (http://wiki.dovecot.org/PasswordDatabase/ExtraFields).

v4

- Added managesieve_implementation_string setting to the managesieve
  configuration. This can be used to customize the default "IMPLEMENTATION"
  capability response.
- Denied ANONYMOUS login until proper support is implemented
- Fixed problem with authenticate command regarding continued responses. In
  V3 only initial response would work. Problem was caused by rc2 -> rc28
  upgrade. One of the clear reasons why code duplication is a very bad idea.
- Fixed readlink bug as indicated by Timo: return value of readlink can also
  be -1.
- Fixed bug in the regular file rescue code, as introduced in the previous
  version. Used stat instead of lstat. This caused the symlink to be rescued
  subsequently in the next activation, thus still overwriting the initially
  rescued script.

v3

- Updated source to compile with dovecot 1.0.rc27
- Daemon now uses the same location for .dovecot.sieve as dovecot-lda
  This is typically ~/.dovecot.sieve
- If .dovecot.sieve is a regular file, it is now moved into the script storage as
  dovecot.orig.sieve, preventing deletion of (important) active scripts
  upon upgrade.
- Changed error handling to yield a BYE message when the managesieve
  daemon exits unexpectedly (upon login) before any commands are entered.
  Horde-ingo would wait indefinitely for a response.

v2

- Fixed the bug (missing CRLF) in the authenticate command
- Modified the sieve storage library making the interface much less crude.
- The scripts put on the server using the putscript command are now
  checked before they are accepted.
- The reported SIEVE capability is now directly read from the sieve
  implementation (in this case cmu), listing much more than "FILEINTO
  VACATION".
- Imported instance of libsieve source into this patch for implementation
  of script checking and capability listing. THIS NEEDS TO BE CHANGED!
- Fixed some minor bugs in the putscript command
