Op 11-7-2026 om 12:28 schreef Michael Merz via dovecot:
Subject: Re: sieve-test (Pigeonhole) on Ubuntu: PCRE support and address test 
restrictions on Return-Path

Hello Aki,

Great progress: after adding -o mail_driver=maildir, the (?i) PCRE errors are 
completely gone. Thank you!
The only remaining issue is the return-path restriction in the address test:

   error: specified header 'return-path' is not allowed for the address test.

This affects several rules in my ruleset that use constructs like:

   if address :domain :is "return-path" "example.com" { }

As you mentioned earlier, the envelope test would be the RFC-compliant 
alternative. However, since my ruleset runs on a Cyrus IMAPd backend (which 
accepts return-path in the address test), switching to envelope would mean 
maintaining two separate versions of the ruleset — one for production and one 
for offline testing — which defeats the purpose.

Is there a sieve-test option (e.g. via -o or a config setting) that would allow 
or relax the return-path restriction in the address test, so that sieve-test 
can process the script without modification?

Thank you again for your continued support — we are very close to a working 
solution!

There are no such options to evade this check. However, currently you can still commit an atrocity like this:

require "regex";
require "variables";

set "hdr" "return-path";

if address "${hdr}" "[email protected]" {
   discard;
}

Still, since this is an omission, I cannot guarantee that this will remain possible in the future.

Regards,

Stephan.


Best regards,
Michael Merz
[email protected]

-----Ursprüngliche Nachricht-----
Von: Aki Tuomi <[email protected]>
Gesendet: Samstag, 11. Juli 2026 11:38
An: [email protected]; Michael Merz via dovecot <[email protected]>
Cc: Stephan Bosch <[email protected]>
Betreff: Re: AW: AW: AW: sieve-test (Pigeonhole) on Ubuntu: PCRE support and 
address test restrictions on Return-Path

Even if you use it standalone, having a small dovecot.conf file, configured, 
might work. Anyways, -o mail_driver=maildir (as it suggests) would help. 
mail_location was split into multiple settings in 2.4.

Aki

On 11/07/2026 10:15 EEST Michael Merz via dovecot <[email protected]> wrote:

Hello Aki,

Good news: after installing Dovecot 2.4.4 from repo.dovecot.org, the (?i) regex 
errors are gone. PCRE appears to be working correctly now.
However, sieve-test now fails with a different error:

   sieve-test: Fatal: mail_driver not set and autodetection failed:
   Mail storage autodetection failed (home=/home/micha, mail_path=)
   - Set mail_driver explicitly

I am invoking sieve-test as follows:

   sieve-test \
     -x "fileinto regex copy body variables imap4flags editheader" \
     -e \
     -t /tmp/trace.txt \
     ~/sieve-test/rules/v4_1_7.sieve \
     <mail.eml>

I have also tried -o mail_location=maildir:~/sieve-test/mailbox and -o
plugin/mail_location=maildir:~/sieve-test/mailbox, both of which produce "Unknown 
setting" errors.

I am not running a Dovecot mail server — I am using sieve-test purely as an 
offline testing tool without any Dovecot server configuration.

Could you advise on the correct way to set mail_driver (or mail_location) for 
sieve-test 2.4.4 in a standalone/serverless context?

Thank you very much.

Best regards,
Michael Merz
[email protected]

-----Ursprüngliche Nachricht-----
Von: Aki Tuomi via dovecot <[email protected]>
Gesendet: Freitag, 10. Juli 2026 19:44
An: [email protected]; Michael Merz via dovecot
<[email protected]>
Cc: Stephan Bosch <[email protected]>
Betreff: Re: AW: AW: sieve-test (Pigeonhole) on Ubuntu: PCRE support
and address test restrictions on Return-Path

Although I did test this:

                 MATCH_CASE("(?i)hello", "HELLO"),
                 MATCH_CASE("^(?i)\\[(.*)\\] (.*)$", "[acme-users]
[fwd]: hello, world"),


and did not get any complaints from the library itself. So there is some other 
reason for it to fail.

Aki

On 10/07/2026 20:40 EEST Aki Tuomi <[email protected]> wrote:

A sieve style of doing (?i) is

if header :regex :comparator "i;ascii-casemap" "from" "<regex>" { }

you can also use unicode-casemap for unicode.

Aki

On 10/07/2026 20:24 EEST Michael Merz via dovecot <[email protected]> wrote:

Hello Aki,

Thank you for the clarification — that is very encouraging news.
Here are concrete examples of the regular expressions used in my ruleset, along 
with the sieve-test error messages they produce:

Example 1 — header :regex test:

   if header :regex "X-Spam-Status" "(?i)score=[1-9]" {

   Error: invalid regular expression '(?i)score=[1-9]' for regex match:
          invalid preceding regular expression

Example 2 — header :regex test:

   if header :regex "from" "(?i)groups\.google\.com" {

   Error: invalid regular expression '(?i)groups\.google\.com' for regex match:
          invalid preceding regular expression

Example 3 — header :regex test with anchoring:

   if header :regex "subject" "^(?i)(re|fwd):" {

   Error: invalid regular expression '^(?i)(re|fwd):' for regex match:
          invalid preceding regular expression

All errors follow the same pattern: the (?i) inline flag for case-insensitive 
matching is rejected regardless of its position in the expression or the header 
being tested.

The full require statement at the top of the script is:

   require ["fileinto", "reject", "vacation", "regex", "copy",
            "body", "variables", "imap4flags", "editheader"];

sieve-test is invoked as follows:

   sieve-test \
     -x "fileinto regex copy body variables imap4flags editheader" \
     -t /tmp/trace.txt \
     ~/sieve-test/rules/v4_0_13.sieve \
     <mail.eml>

Dovecot version: 2:2.4.4-5+ubuntu24.04 (from repo.dovecot.org)
Ubuntu: 24.04.3 LTS (Noble), WSL2

Thank you very much for looking into this.

Best regards,
Michael Merz
[email protected]

Michael Merz
Bargkoppel 15, 22844 Norderstedt
Mobil 0172 4049171

-----Ursprüngliche Nachricht-----
Von: Aki Tuomi via dovecot <[email protected]>
Gesendet: Freitag, 10. Juli 2026 19:16
An: [email protected]; Michael Merz via dovecot
<[email protected]>
Cc: Stephan Bosch <[email protected]>
Betreff: Re: AW: sieve-test (Pigeonhole) on Ubuntu: PCRE support
and address test restrictions on Return-Path

Build options does not include all build options, unfortunately. "invalid preceding 
regular expression" means the PCRE is available, the error would be clear that there 
is no PCRE support if it was missing.

Can you provide the exact regular expression, and how you are using it?

Aki

On 10/07/2026 20:06 EEST Michael Merz via dovecot <[email protected]> wrote:

Hello Aki,

Thank you for the pointer to https://repo.dovecot.org.
I have now installed Dovecot 2.4.4 from the official repository on Ubuntu 24.04 
LTS (Noble) and can confirm that the packages are available and install 
correctly.
However, checking the build options shows that PCRE support is not included:

   $ dovecot --build-options
   Build options: ioloop=epoll notify=inotify experimental-imap4rev2 openssl 
io_block_size=8192
   SQL driver plugins: mysql postgresql sqlite
   Passdb: ldap pam passwd passwd-file sql
   Userdb: ldap(plugin) passwd prefetch passwd-file sql

There is no PCRE entry, and sieve-test still rejects all (?i) inline flags in regex 
expressions with "invalid preceding regular expression".
May I ask: is PCRE support intentionally not included in the official 
Dovecot/Pigeonhole packages, or is this an oversight in the build configuration?
If PCRE is not planned to be included, is there a recommended alternative 
approach for achieving case-insensitive regex matching in Pigeonhole's 
sieve-test that would be compatible with Cyrus IMAPd's PCRE-based regex syntax?

Thank you again for your help.
Best regards,
Michael Merz
[email protected]

-----Ursprüngliche Nachricht-----
Von: Aki Tuomi via dovecot <[email protected]>
Gesendet: Freitag, 10. Juli 2026 06:51
An: Michael Merz <[email protected]>; Michael Merz via
dovecot <[email protected]>; Stephan Bosch
<[email protected]>
Betreff: Re: sieve-test (Pigeonhole) on Ubuntu: PCRE support and
address test restrictions on Return-Path

You can get 2.4.4 packages for ubuntu 24.04 from
https://repo.dovecot.org

Aki

On 09/07/2026 22:21 EEST Michael Merz via dovecot <[email protected]> wrote:

Dear Stephan,

Thank you very much for your quick and helpful response.

Regarding point 1 (PCRE support), your comment that Ubuntu 24.04 is "likely stuck at 
a quite old version of Pigeonhole" raises a follow-up question:

 From which version of Pigeonhole onwards is PCRE support included by default 
(i.e. compiled in without requiring an explicit --with-pcre flag)? And is there 
an official repository, PPA, or recommended way to obtain a more recent 
Pigeonhole/dovecot-sieve binary for Ubuntu 24.04 LTS that would include PCRE 
support out of the box?

Regarding point 2 (Return-Path / envelope test): thank you for the pointer. I 
understand that the envelope test would be the RFC-compliant alternative within 
Pigeonhole. However, since my ruleset runs on a Cyrus backend where the address 
test on Return-Path works fine, this would mean maintaining two different 
versions of the ruleset — one for production (Cyrus) and one for offline 
testing (Pigeonhole). That somewhat defeats the purpose of offline testing, so 
I mention it only for completeness.

The key question therefore remains whether a PCRE-enabled Pigeonhole binary is 
realistically obtainable for Ubuntu 24.04, as that would resolve the main 
blocker.

Thank you again for your time.

Best regards,
Michael Merz

von meinem iPad Pro 4Gen gesendet

Am 09.07.2026 um 18:39 schrieb Stephan Bosch <[email protected]>:


Op 29-6-2026 om 09:56 schreef michael.merz--- via dovecot:
    Hello,



    I've been evaluating sieve-test (Pigeonhole, dovecot-sieve package,
    version 2.3.21, as shipped with Ubuntu 24.04 LTS) as an offline testing
    tool for a personal Sieve ruleset that currently runs on a Cyrus IMAPd/CMU
    Sieve 3.0 backend.

Different implementation and design choices will mean that Dovecot has a 
different opinion what is a valid Sieve script and how it is to be evaluated 
than Cyrus, making this problematic.


    I'd like to ask for some clarification on two points, in case I'm missing
    a configuration option.



    1) PCRE support



    My ruleset makes extensive use of the `(?i)` inline case-insensitivity
    flag within :regex tests, which is valid under PCRE (as used by Cyrus).

    When running sieve-test, I get:



      error: invalid regular expression '(?i)...' for regex match:

      invalid preceding regular expression.



    Checking `dovecot --build-options` shows no PCRE entry, which suggests the
    Ubuntu-packaged binary was compiled without --with-pcre and falls back to
    POSIX extended regex.



    Question: Is PCRE support in Pigeonhole's regex extension purely a
    compile-time decision (i.e. something that would need to be addressed at
    the distribution packaging level, not via runtime configuration), or is
    there a runtime way to enable PCRE matching that I might have missed (e.g.
    via -o, sieve_extensions, or similar)?

It is strictly compile-time configured. I didn't implement the PCRE migration 
myself, but I don't think there is a POSIX regex fallback for it. This likely 
means your Ubuntu version is still stuck at a quite old version of Pigeonhole.


    2) Return-Path in the `address` test



    Several of my rules use:



      address :domain :is "return-path" "..."



    Cyrus accepts this. Pigeonhole's sieve-test rejects it with:



      error: specified header 'return-path' is not allowed
for the

      address test.



    I understand this is likely an RFC 5228 strictness difference (Cyrus being
    more permissive than the RFC requires).

    Is there a recommended alternative within Sieve itself to achieve the same
    effect (testing the address portion of Return-Path) while staying within
    what Pigeonhole accepts -- e.g. via the `header` test combined with some
    address-parsing approach, or via the envelope test instead?

Envelope test is best if you want to use address matching.


    For context: I'm not running a Dovecot mail server myself.

    I'm using sieve-test purely as an offline syntax/behaviour verification
    tool before deploying ruleset changes to a separate Cyrus-based production
    system.

    I understand this is a bit of an unusual use case, so any guidance on
    whether Pigeonhole is well suited for this kind of cross-implementation
    testing at all would also be appreciated.



    Thank you for your time and for maintaining Pigeonhole.



    Best regards,

    Michael Merz




_______________________________________________
dovecot mailing list -- [email protected] To unsubscribe
send an email to [email protected]
_______________________________________________
dovecot mailing list -- [email protected] To unsubscribe
send an email to [email protected]
_______________________________________________
dovecot mailing list -- [email protected] To unsubscribe send
an email to [email protected]

_______________________________________________
dovecot mailing list -- [email protected] To unsubscribe send
an email to [email protected]
_______________________________________________
dovecot mailing list -- [email protected] To unsubscribe send an
email to [email protected]

_______________________________________________
dovecot mailing list -- [email protected] To unsubscribe send an
email to [email protected]
_______________________________________________
dovecot mailing list -- [email protected] To unsubscribe send an
email to [email protected]

_______________________________________________
dovecot mailing list -- [email protected] To unsubscribe send an
email to [email protected]
_______________________________________________
dovecot mailing list -- [email protected]
To unsubscribe send an email to [email protected]
_______________________________________________
dovecot mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to