[BUG?] Dovecot 2.4.2 from Dovecot repo (RHEL 9) does not implement Sieve (properly/fully)
Hi all
Below is report of what I suspect is a bug arising in Dovecot 2.4.x regarding Sieve functionality after Pigeonhole functionality was folded into Dovecot/Dovecot-sieve.
ISSUE:
I am building a new mail server on Rocky Linux 9.7 with Postfix 3.10 and Dovecot 2.4.2. The base installation & setup of Dovecot was OK with core functionality (Postfix interoperability and mail into virtual mail domain mailboxes no problem).
Once I had the base setup done I started with Sieve functionality:
- Incoming mail marked as SPAM by Rspamd auto moved into /Junk
- Mail manually moved in/out of /Junk handed to Rspamd for training as SPAM/HAM
This consistantly failed - the first issue I found was Dovecot failing to restart and dovecot -n reporting fatal errors related to sieve — section not found etc. etc.
From my reading previously I knew I needed to install dovecot-sieve and it was installed before I started working on Sieve functionality. I also saw dovecot-pigeonhole but I seemed to read that (version >= 2.4) the functionality for that had been included in dovecot-sieve **and** there was no Pigeonhole included in the Dovecot 2.4.2 repo — also if I tried to install it I got errors of course because of the version mismatch, and it was not in the dovecot-2.4-latest repo.
# dnf info dovecot-pigeonhole
Last metadata expiration check: 1:21:15 ago on Fri 06 Mar 2026 08:05:08.
Available Packages
Name : dovecot-pigeonhole
Epoch : 1
Version : 2.3.16
Release : 15.el9
Architecture : x86_64
Size : 371 k
Source : dovecot-2.3.16-15.el9.src.rpm
Repository : appstream
Summary : Sieve and managesieve plug-in for dovecot
URL : https://www.dovecot.org/
License : MIT and LGPLv2
Description : This package provides sieve and managesieve plug-in for dovecot LDA.
I also saw dovecot-managesieved but as I was **not** going to implement a client sieve functionality I did not install that.
Anyway I could not even get to first base with Sieve, Dovecot simply did not know about it. I went on IRC and chatted with Aki Tuomi who confirmed that "yeah, looks like there is some packaging mistake." because the directory /usr/lib64/dovecot/settings was empty. As a workaround he suggested "you need to install dovecot-managesieved as workaround". I did that and as a result the following files appeared:
-rwxr-xr-x 1 root root 15560 Jan 8 12:13 libmanagesieve_login_settings.so
-rwxr-xr-x 1 root root 15840 Jan 8 12:13 libmanagesieve_settings.so
-rwxr-xr-x 1 root root 19656 Jan 8 12:13 libpigeonhole_settings.so
The dovecot -n errors went away, it recognised the sieve directives, and I continued with the Sieve setup. All — dovecot.conf, sieve files source and compiled — installed OK. But the sieve functionality simply refused to work. I got advice and we found the following which essentially points to sieve (even with dovecot-managesieved installed) not working. After installing everything — dovecot.conf, sieve files (compiled successfully) and a pipe to a shell script to call rspamc nothing seemed to happen.
journalctl -f -u dovecot | grep -E "sieve|pipe"-> nothing showedrspamc stat-> 'Messages scanned' & 'Messages learned' no increase
When we checked we found the following:
lib90_sieve_settings.so(which should be in/etc/lib64/dovecot/settings) is missing from the system.
find / -name "lib90_sieve_settings.so" -> not found
I believe the file is critical for the running of (Dovecot using) Sieve?
- The Dovecot build options missing any sieve functionality:
#dovecot --build-options
Build options: ioloop=epoll notify=inotify 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
I believe (I was told) that minus the above (even though dovecot-managesieved was installed as well as dovecot-sieve) Sieve simply will not function.
Is this a bug/packaging error?
Regards
Patrick
ENVIRONMENT:
Software
- Rocky Linux 9.7 (RHEL)
- Postfix 3.10 Built from source
- Postscreen running in Postfix
- Dovecot 2.4 installed from Dovecot repo
- Valkey 9.0.3 (Redis replacement)
- Rspamd 3.14.3
Setup
- Rspamd <-> Valkey communicate via Unix socket
- Postfix & Dovecot <-> Rspamd via inet port/milter: smtpd_milters = inet:localhost:11332 non_smtpd_milters = inet:localhost:11332
- 'First line defence' = DNSBL via postscreen
- Rspamd SPF checking, DKIM signing and DMARC configured
All of the above installed, working and tested.
DOVECOT PACKAGES INSTALLED:
Name : dovecot
Version : 2.4.2
Architecture : x86_64
Source : dovecot-2.4.2-2.src.rpm
From repo : dovecot-2.4-latest
Name : dovecot-sieve
Version : 2.4.2
Architecture : x86_64
Source : dovecot-sieve-2.4.2-2.src.rpm
From repo : dovecot-2.4-latest
Name : dovecot-managesieved (see note about this in the email)
Version : 2.4.2
Architecture : x86_64
Source : dovecot-sieve-2.4.2-2.src.rpm
From repo : dovecot-2.4-latest
Name : dovecot-submissiond
Version : 2.4.2
Architecture : x86_64
Source : dovecot-2.4.2-2.src.rpm
From repo : dovecot-2.4-latest
Name : dovecot-imapd
Version : 2.4.2
Architecture : x86_64
Source : dovecot-2.4.2-2.src.rpm
From repo : dovecot-2.4-latest
Name : dovecot-lmtpd
Version : 2.4.2
Architecture : x86_64
Source : dovecot-2.4.2-2.src.rpm
From repo : dovecot-2.4-latest
Name : dovecot-lua
Version : 2.4.2
Architecture : x86_64
Source : dovecot-2.4.2-2.src.rpm
From repo : dovecot-2.4-latest
OUTPUT OF dovecot -n:
# dovecot -n
# 2.4.2-2 (0962ed2104): /etc/dovecot/dovecot.conf
# Pigeonhole version 2.4.2-2 (767418c3)
# OS: Linux 5.14.0-611.34.1.el9_7.x86_64 x86_64 Rocky Linux release 9.7 (Blue Onyx)
# Hostname: srv01.example.com
dovecot_config_version = 2.4.2
auth_default_domain = example.com
auth_mechanisms = plain
auth_username_format = %{user | lower }
dovecot_storage_version = 2.4.2
mail_access_groups = vmail
mail_control_path = ~/control
mail_driver = maildir
mail_gid = 5000
mail_home = /var/vmail/%{user | domain }/%{user | username }
mail_index_path = ~/indexes
mail_path = %{home}/Maildir
mail_privileged_group = vmail
mail_uid = 5000
mailbox_list_utf8 = yes
protocols = imap lmtp
sieve_global_extensions {
vnd.dovecot.pipe = yes
}
sieve_pipe_bin_dir = /etc/dovecot/sieve/bin
sieve_plugins {
sieve_imapsieve = yes
sieve_extprograms = yes
}
sieve_trace_dir = /var/log/dovecot/sieve-trace
sieve_trace_level = actions
ssl = required
syslog_facility = local5
protocol lmtp {
mail_plugins {
sieve = yes
}
}
ssl_server {
cert_file = /etc/ssl/server/server_example_com.crt
key_file = /etc/ssl/server/server_example_com.key
}
passdb passwd-file {
auth_username_format = %{user | username}
default_password_scheme = SHA512-CRYPT
passwd_file_path = /etc/dovecot/passwd
}
userdb passwd-file {
auth_username_format = %{user | username}
passwd_file_path = /etc/dovecot/passwd
fields {
gid:default = 5000
uid:default = 5000
}
}
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
group = postfix
mode = 0600
user = postfix
}
}
service auth {
unix_listener /var/spool/postfix/private/auth {
group = postfix
mode = 0660
user = postfix
}
}
service imap-login {
inet_listener imap {
port = 0
}
inet_listener imaps {
port = 993
ssl = yes
}
}
service auth-worker {
user = $SET:default_internal_user
}
service anvil {
unix_listener anvil {
group = $SET:default_internal_group
mode = 0660
}
}
service doveadm {
unix_listener doveadm-server {
mode = 0600
user = $SET:default_internal_user
}
}
sieve_script rspamd_to_junk {
driver = file
path = /etc/dovecot/sieve/rspamd-to-junk.sieve
type = before
}
namespace inbox {
mail_plugins {
imap_sieve = yes
}
inbox = yes
mailbox Junk {
auto = create
autoexpunge = 90d
special_use = "\\Junk"
sieve_script report-spam {
cause = copy
path = /etc/dovecot/sieve/report-spam.sieve
type = before
}
}
imapsieve_from Junk {
sieve_script report-ham {
cause = copy
path = /etc/dovecot/sieve/report-ham.sieve
type = before
}
}
mailbox Drafts {
auto = subscribe
special_use = "\\Drafts"
}
mailbox Sent {
auto = subscribe
special_use = "\\Sent"
}
mailbox Trash {
auto = subscribe
special_use = "\\Trash"
}
}
Update:
On further investigation I believe running dovecot --build-options is not relevant for showing that there are files necessary for Sieve functionality that are missing in installations from the RHEL 9 repo on the Dovecot site. I know this also as (because I wanted to get this solved and working) I compiled Pigeonhole from source from https://pigeonhole.dovecot.org/download. I compiled Pigeonhole from source after downloading necessary devel header files. I made sure it installed into /usr/ not /usr/local.
make clean
./configure --with-dovecot=/usr/lib64/dovecot --prefix=/usr
make
make install
After installing Pigeonhole — and working through the necessary config in /etc/dovecot/dovecot.conf (config all in main file) and building .sieve scripts I got a **fully working** (and tested) Sieve setup — for example emails flagged as SPAM by Rspamd automatically moved to /Junk.
Anyway two points:
- It seems clear and confirmed that the
dovecot-sieve2.4.2 package does not install necessary files. As a help I did a files list of both thedovecotanddovecot-sievepackages and selected out files in/usr/lib64/dovecotand merged sorted them. Then a did a find listing of/usr/lib64/dovecotfrom the server and fed them into an online diff checker, you can have a look here to see the differences...
https://www.diffchecker.com/PuShQgqJ/
there are a lot of files added by compiling Pigeonhole.
- Moving forward I imagine there will be a re-release of the
dovecot-sievepackage. I am wondering about my installation — which is working fine now. Should — would it be best to try to reinstall the updateddovecot-sievepackage? Or can I stay with the (again working) compiled Pigeonhole. Obviously when it comes time to update Dovecot + Sieve that will/may be a problem.
- Patrick
On 08/03/2026 19:32 EET Patrick S. via dovecot <dovecot@dovecot.org> wrote:
Update:
Long story short.
Pigeonhole is an external plugin to dovecot, hence it won't show up in build options. In repo.dovecot.org, the libpigeonhole_settings.so went accidentically to dovecot-managesieved package instead of dovecot-sieve package.
This will be fixed soon, and we'll republish the packages, and it should be fine after that. To remediate, you might have to first uninstall dovecot-sieve and dovecot-managesieved, and then install them back.
Aki
Hi
In repo.dovecot.org, the libpigeonhole_settings.so went accidentically to dovecot-managesieved package instead of dovecot-sieve package.
The thing is though I installed dovecot-managesieved as you suggested and the error that Dovecot did not recognise any of the sieve directives in dovecot.conf went away **but there was still not any Sieve functionality**. I double/triple checked and confirmed that — only after installing Pigeonhole did Sieve work.
The pigeonhole compiled installation put more files into /usr/lib64/dovecot/settings/ than dovecot-managesieved did. This is my current listing after removing dovecot-managesieved and installing Pigeonhole from source. Installing dovecot-managesieved only put three files into Settings.
# ls -la /usr/lib64/dovecot/settings/
total 232
drwxr-xr-x 2 root root 4096 Mar 6 12:41 .
drwxr-xr-x 7 root root 8192 Mar 6 12:41 ..
-rw-r--r-- 1 root root 42624 Mar 6 12:41 libmanagesieve_login_settings.a
-rwxr-xr-x 1 root root 1362 Mar 6 12:41 libmanagesieve_login_settings.la
-rwxr-xr-x 1 root root 34808 Mar 6 12:41 libmanagesieve_login_settings.so
-rw-r--r-- 1 root root 20654 Mar 6 12:41 libmanagesieve_settings.a
-rwxr-xr-x 1 root root 1055 Mar 6 12:41 libmanagesieve_settings.la
-rwxr-xr-x 1 root root 26160 Mar 6 12:41 libmanagesieve_settings.so
-rw-r--r-- 1 root root 33642 Mar 6 12:41 libpigeonhole_settings.a
-rwxr-xr-x 1 root root 1358 Mar 6 12:41 libpigeonhole_settings.la
-rwxr-xr-x 1 root root 34400 Mar 6 12:41 libpigeonhole_settings.so
Anyway, again, installing `dovecot-managesieved` did not solve the missing Sieve functionality.
__________________
Patrick
> On 9 Mar 2026, at 07:49, Aki Tuomi <aki.tuomi@open-xchange.com> wrote:
>
>
>> On 08/03/2026 19:32 EET Patrick S. via dovecot <dovecot@dovecot.org> wrote:
>>
>>
>> Update:
>>
>
> Long story short.
>
> Pigeonhole is an external plugin to dovecot, hence it won't show up in build options. In repo.dovecot.org, the libpigeonhole_settings.so went accidentically to dovecot-managesieved package instead of dovecot-sieve package.
>
> This will be fixed soon, and we'll republish the packages, and it should be fine after that. To remediate, you might have to first uninstall dovecot-sieve and dovecot-managesieved, and then install them back.
>
> Aki
>
On 09/03/2026 09:34 EET Patrick Starrenburg via dovecot <dovecot@dovecot.org> wrote:
Hi
In repo.dovecot.org, the libpigeonhole_settings.so went accidentically to dovecot-managesieved package instead of dovecot-sieve package.
The thing is though I installed
dovecot-managesievedas you suggested and the error that Dovecot did not recognise any of the sieve directives indovecot.confwent away **but there was still not any Sieve functionality**. I double/triple checked and confirmed that — only after installing Pigeonhole did Sieve work.The pigeonhole compiled installation put more files into
/usr/lib64/dovecot/settings/thandovecot-managesieveddid. This is my current listing after removingdovecot-managesievedand installing Pigeonhole from source. Installingdovecot-managesievedonly put three files into Settings.
It did work for my rhel10 test. Not sure what went wrong in your case.
$ rpm -qa | grep dovecot dovecot-lua-2.4.2-2.x86_64 dovecot-2.4.2-2.x86_64 dovecot-ldap-2.4.2-2.x86_64 dovecot-sieve-2.4.2-2.x86_64 dovecot-sieve-devel-2.4.2-2.x86_64 dovecot-managesieved-2.4.2-2.x86_64
$ doveconf
2.4.2-2 (0962ed2104): /etc/dovecot/dovecot.conf
Pigeonhole version 2.4.2-2 (767418c3)
OS: Linux 6.8.0-94-generic x86_64 Red Hat Enterprise Linux release 10.0 (Coughlan)
Hostname: a4565594f1a4
dovecot_config_version = 2.4.2 dovecot_storage_version = 2.4.2 mail_driver = maildir mail_home = /home/%{user|name} mail_inbox_path = /var/mail/%{user|name} mail_path = ~/mail mailbox_list_utf8 = yes protocols = sieve imap lmtp pop3 submission passdb pam { } userdb passwd { } namespace inbox { inbox = yes separator = / } sieve_script personal { }
Aki
It did work for my rhel10 test. Not sure what went wrong in your case.
It did give the appearance of working in my case also (the unrecognised sieve directive errors went) but Sieve functioning did not work.
Did you try any Sieve processing on your RHEL 10 machine after the workaround?
Of course it (installing dovecot-managesieved as workaround not working) could well be down to my learning Dovecot/Sieve — this is my first Dovecot setup. My Rocky Linux 9 machine is fairly clean (new install, not moving to RHEL 10 yet) and I installed from packages from the repo with no problems.
Separate but related question - is there an uninstall option for Pigeonhole that was installed compiled from source? I still have the source directory on the machine.
Patrick
On 9 Mar 2026, at 08:56, Aki Tuomi <aki.tuomi@open-xchange.com> wrote:
On 09/03/2026 09:34 EET Patrick Starrenburg via dovecot <dovecot@dovecot.org> wrote:
Hi
In repo.dovecot.org, the libpigeonhole_settings.so went accidentically to dovecot-managesieved package instead of dovecot-sieve package.
The thing is though I installed
dovecot-managesievedas you suggested and the error that Dovecot did not recognise any of the sieve directives indovecot.confwent away **but there was still not any Sieve functionality**. I double/triple checked and confirmed that — only after installing Pigeonhole did Sieve work.The pigeonhole compiled installation put more files into
/usr/lib64/dovecot/settings/thandovecot-managesieveddid. This is my current listing after removingdovecot-managesievedand installing Pigeonhole from source. Installingdovecot-managesievedonly put three files into Settings.It did work for my rhel10 test. Not sure what went wrong in your case.
$ rpm -qa | grep dovecot dovecot-lua-2.4.2-2.x86_64 dovecot-2.4.2-2.x86_64 dovecot-ldap-2.4.2-2.x86_64 dovecot-sieve-2.4.2-2.x86_64 dovecot-sieve-devel-2.4.2-2.x86_64 dovecot-managesieved-2.4.2-2.x86_64
$ doveconf
2.4.2-2 (0962ed2104): /etc/dovecot/dovecot.conf
Pigeonhole version 2.4.2-2 (767418c3)
OS: Linux 6.8.0-94-generic x86_64 Red Hat Enterprise Linux release 10.0 (Coughlan)
Hostname: a4565594f1a4
dovecot_config_version = 2.4.2 dovecot_storage_version = 2.4.2 mail_driver = maildir mail_home = /home/%{user|name} mail_inbox_path = /var/mail/%{user|name} mail_path = ~/mail mailbox_list_utf8 = yes protocols = sieve imap lmtp pop3 submission passdb pam { } userdb passwd { } namespace inbox { inbox = yes separator = / } sieve_script personal { }
Aki
Hi!
Mar 09 09:51:59 lmtp(testuser1)<274><E8i8DzSYrmkSAQAAUraM8A>: Debug: sieve: msgid=unspecified: Finished executing implicit keep action (status=ok) Mar 09 09:51:59 lmtp(testuser1)<274><E8i8DzSYrmkSAQAAUraM8A>: Debug: sieve: msgid=unspecified: Finalizing actions Mar 09 09:51:59 lmtp(testuser1)<274><E8i8DzSYrmkSAQAAUraM8A>: Debug: sieve: msgid=unspecified: Finished finalizing actions (status=ok, keep=implicit, committed=no) Mar 09 09:51:59 lmtp(testuser1)<274><E8i8DzSYrmkSAQAAUraM8A>: Debug: sieve: msgid=unspecified: Finalize implicit keep (status=ok) Mar 09 09:51:59 lmtp(testuser1)<274><E8i8DzSYrmkSAQAAUraM8A>: Debug: sieve: msgid=unspecified: Finalize implicit keep action(status=ok, action_status=ok, commit_status=ok)
It really seems to work just fine. I think you are probably missing come configuration, or you did not activate your sieve script.
Aki
dovecot_config_version = 2.4.2 dovecot_storage_version = 2.4.2 log_debug = category=lmtp log_path = /dovecot.log mail_driver = sdbox mail_gid = vmail mail_home = /home/vmail/%{user} mail_path = ~/mail mail_uid = vmail protocols = lmtp protocol lmtp { mail_plugins { sieve = yes } } passdb static { password = # hidden, use -P to show it } sieve_script personal { active_path = ~/.dovecot.sieve.active driver = file path = ~/.dovecot.sieve type = personal }
~$ cat /etc/redhat-release Red Hat Enterprise Linux release 10.0 (Coughlan)
On 09/03/2026 10:25 EET Patrick Starrenburg via dovecot <dovecot@dovecot.org> wrote:
It did work for my rhel10 test. Not sure what went wrong in your case.
It did give the appearance of working in my case also (the unrecognised sieve directive errors went) but Sieve functioning did not work.
Did you try any Sieve processing on your RHEL 10 machine after the workaround?
Of course it (installing dovecot-managesieved as workaround not working) could well be down to my learning Dovecot/Sieve — this is my first Dovecot setup. My Rocky Linux 9 machine is fairly clean (new install, not moving to RHEL 10 yet) and I installed from packages from the repo with no problems.
Separate but related question - is there an uninstall option for Pigeonhole that was installed compiled from source? I still have the source directory on the machine.
Patrick
On 9 Mar 2026, at 08:56, Aki Tuomi <aki.tuomi@open-xchange.com> wrote:
On 09/03/2026 09:34 EET Patrick Starrenburg via dovecot <dovecot@dovecot.org> wrote:
Hi
In repo.dovecot.org, the libpigeonhole_settings.so went accidentically to dovecot-managesieved package instead of dovecot-sieve package.
The thing is though I installed
dovecot-managesievedas you suggested and the error that Dovecot did not recognise any of the sieve directives indovecot.confwent away **but there was still not any Sieve functionality**. I double/triple checked and confirmed that — only after installing Pigeonhole did Sieve work.The pigeonhole compiled installation put more files into
/usr/lib64/dovecot/settings/thandovecot-managesieveddid. This is my current listing after removingdovecot-managesievedand installing Pigeonhole from source. Installingdovecot-managesievedonly put three files into Settings.It did work for my rhel10 test. Not sure what went wrong in your case.
$ rpm -qa | grep dovecot dovecot-lua-2.4.2-2.x86_64 dovecot-2.4.2-2.x86_64 dovecot-ldap-2.4.2-2.x86_64 dovecot-sieve-2.4.2-2.x86_64 dovecot-sieve-devel-2.4.2-2.x86_64 dovecot-managesieved-2.4.2-2.x86_64
$ doveconf
2.4.2-2 (0962ed2104): /etc/dovecot/dovecot.conf
Pigeonhole version 2.4.2-2 (767418c3)
OS: Linux 6.8.0-94-generic x86_64 Red Hat Enterprise Linux release 10.0 (Coughlan)
Hostname: a4565594f1a4
dovecot_config_version = 2.4.2 dovecot_storage_version = 2.4.2 mail_driver = maildir mail_home = /home/%{user|name} mail_inbox_path = /var/mail/%{user|name} mail_path = ~/mail mailbox_list_utf8 = yes protocols = sieve imap lmtp pop3 submission passdb pam { } userdb passwd { } namespace inbox { inbox = yes separator = / } sieve_script personal { }
Aki
dovecot mailing list -- dovecot@dovecot.org To unsubscribe send an email to dovecot-leave@dovecot.org
Hi again
It really seems to work just fine. I think you are probably missing come configuration, or you did not activate your sieve script.
Thanks for doing live test, appreciate it. I was doing/trying so many things to get it to work (not being super familiar with Dovecot as yet) mixed in with the Sieve package not functioning anything could have happened. Everything had been going smoothly up until then.
Anyway will wait for the updated dovecot-sieve package.
==> Getting back to the question I had before (about getting system back to a package only setup) does the Pigeonhole compile have an UNINSTALL script/option so I can uninstall Pigeonhole cleanly.
Thanks
Patrick
participants (4)
-
Aki Tuomi
-
Patrick S
-
Patrick S.
-
Patrick Starrenburg