Hello, After over a year since I began, I have finished implementing the imap4flags extension. It is ready for 2.5.
Thanks. V/r, James Cassell P.S., Resending from the correct address so the list will accept my message. The following changes since commit d8beae4e3a9490b0435caee22ddae313b8f4b17b: [mboxevent] Add an extra, optional parameter vnd.cmu.sessionId to event notifications (2014-10-07 10:03:40 +0200) are available in the git repository at: https://github.com/cyberpear/cyrus-imapd.git for-upstream-imap4flags-2.5 for you to fetch changes up to 854647adae568fa3d5e42238cdf316ff67319e13: [sieve] bump bytecode version for imap4flags extension (2014-10-20 03:29:57 -0400) ---------------------------------------------------------------- Guillermo A. Amaral (3): Index Extension - Fix backward compatibility Date and Index Extension Fixes Update docs and bump bytecode version. James Cassell (46): [sieve] fix backward compatibility for sieve index extension [sieve] Date and Index Extensions: return false instead of SIEVE_FAIL [cunit] cunit.pl: fix init of CU_SuiteInfo type for CUnit 2.1-3 Merge branch 'date-extension' Merge branch 'CUnit_2.1-3' [sieve] add imap4flags reference [sieve] add parser support for imap4flags [sieve] add imap4flags awareness to sieve interpreter [sieve] update bytecode to support imap4flags [sieve] imap4flags support for bytecode generator [sieve] imap4flags support for bytecode emitter [sieve] imap4flags support for bytecode decompiler [sieve] bc_emit.c: fix comment [sieve] only 'fileinto' once per folder (RFC 3028) [sieve] fileinto: ensure last flag list value wins (RFC 5232) [sieve] keep: ensure last flag list value wins (RFC 5232) [sieve] bc_generate,bc_emit: put new parameter first [sieve] message.c: add :copy support to keep action [sieve] make sieve_{add,remove}flag() functions case insensitive [sieve] bc_eval.c: support for :flags parameter on KEEP and FILEINTO [sieve] bc_emit.c: add comments for B_FILEINTO [sieve] add legacy test cases for :flags argument to fileinto and keep [sieve] bc_eval: track current value of internal flags variable [sieve] bc_eval.c: support for imap4flags hasflag test [sieve] update sieve_fileinto() and sieve_keep() to use :flags parameter [sieve] sieve.y: verify :flags parameter is a valid list of flags [sieve] sieve.y: free_ftags(): free flags stringlist [sieve] sieve.y: support for space-separated flags within a string [sieve] tree.c: free flags stringlists in free_tree() and free_test() [sieve] sieve.y: 'require' imap4flags for hasflag test and :flags arg [sieve] Anticipate bytecode changes for VARIABLES extension [sieve] bc_dump.c: support imap4flags keep, fileinto, hasflag [sieve] sieved: update bytecode decompiler for imap4flags [sieve] added varlist.{c,h} in anticipation of the variables extension [sieve] remove dependence on actionflags parameter [sieve] bc_eval.c: add :count match-type support to hasflag test [sieve] move verify_flaglist() to flags.c for reuse elsewhere [sieve] sieve.y: an invalid flag should not cause a parsing error [sieve] properly handle NULL flag lists Revert "[sieve] update sieve_fileinto() and sieve_keep() to use :flags parameter" [sieve] complete removal of no-longer-used actionflags parameter [sieve] remove superfluous sieve_addflag() and _removeflag() functions [sieve] bytecode: don't emit unused :index parameter for hasflag test [sieve] sieve.y: remove bytecode dependence on sieve.y [sieve] add legacy test cases for hasflag test [sieve] bump bytecode version for imap4flags extension Makefile.am | 6 +- configure.ac | 4 + cunit/cunit.pl | 13 + doc/specs.html | 4 + lib/imapoptions | 2 +- sieve/README | 3 + sieve/bc_dump.c | 115 ++++++- sieve/bc_emit.c | 72 +++- sieve/bc_eval.c | 375 ++++++++++++++++++--- sieve/bc_generate.c | 48 ++- sieve/bytecode.h | 26 +- sieve/flags.c | 59 ++++ sieve/flags.h | 16 + sieve/interp.c | 2 + sieve/message.c | 76 +++-- sieve/message.h | 4 +- sieve/script.c | 68 ++-- sieve/script.h | 1 + sieve/sieve-lex.l | 2 + sieve/sieve.y | 196 ++++++++--- sieve/sieve_interface.h | 1 + sieve/sieved.c | 146 +++++++- .../actionExtensions/serverm/ueamail-imap4flags | 11 + .../actionExtensions/testm/ueatest-imap4flags | 6 + .../actionExtensions/uberExtensionActionScript.key | 12 + .../actionExtensions/uberExtensionActionScript.s | 22 +- sieve/tests/testExtension/serverm/uetmail-hasflag | 11 + sieve/tests/testExtension/testm/uetest-hasflag | 7 + .../testExtension/uberExtensionTestScript.key | 14 + .../tests/testExtension/uberExtensionTestScript.s | 91 ++++- sieve/tree.c | 5 + sieve/tree.h | 8 +- sieve/varlist.c | 79 +++++ sieve/varlist.h | 32 ++ 34 files changed, 1305 insertions(+), 232 deletions(-) create mode 100644 sieve/flags.c create mode 100644 sieve/flags.h create mode 100644 sieve/tests/actionExtensions/serverm/ueamail-imap4flags create mode 100644 sieve/tests/actionExtensions/testm/ueatest-imap4flags create mode 100644 sieve/tests/testExtension/serverm/uetmail-hasflag create mode 100644 sieve/tests/testExtension/testm/uetest-hasflag create mode 100644 sieve/varlist.c create mode 100644 sieve/varlist.h