Bug report: Pigeonhole Sieve delivery plugin fails to load in Dovecot 2.4 — undefined symbol mail_deliver_ctx_get_log_var_expand_table
Hello Dovecot Team,
I am reporting what appears to be a packaging/ABI issue affecting the Pigeonhole Sieve delivery plugin in Dovecot 2.4. I have performed extensive diagnostics and would appreciate any guidance.
Environment Operating System: Debian 13 (Trixie), amd64 Repository: Official Dovecot CE repository (repo.dovecot.org/ce-2.4-latest/debian/trixie) Installed package version:2:2.4.4-5+debian13 Installed packages:
dovecot-core dovecot-sieve dovecot-lmtpd dovecot-imapd dovecot-pop3d dovecot-managesieved dovecot-pgsql All packages are installed at the exact same version.
Problem Description When enabling the Sieve delivery plugin with:
mail_plugins { sieve = yes } Dovecot fails to load the plugin with the following error:
sievec: Fatal: Couldn't load required plugin /usr/lib/dovecot/modules/lib90_sieve_plugin.so: dlopen() failed: /usr/lib/dovecot/modules/lib90_sieve_plugin.so: undefined symbol: mail_deliver_ctx_get_log_var_expand_table As a result, message delivery fails entirely whenever the Sieve delivery plugin is enabled. Disabling the plugin restores normal mail delivery.
Diagnostics Performed1. Package verification All installed packages are version 2:2.4.4-5+debian13 from the official Dovecot CE repository. There are no mixed package versions.
- Symbol verification I searched for the symbol mail_deliver_ctx_get_log_var_expand_table throughout the Dovecot libraries.
Results:
nm -D on libdovecot-lda.so.0.0.0 → symbol not found
readelf -sW on libdovecot-lda.so.0.0.0 → symbol not found
Recursive search across all .so files under:
/usr/lib/dovecot/ /usr/lib/x86_64-linux-gnu/dovecot/ → symbol not exported anywhere The symbol string exists inside both:
lib90_sieve_plugin.so libdovecot-lda.so.0.0.0 but only as plain text (visible via grep), never as an exported ELF symbol.
- Dependency verification ldd on lib90_sieve_plugin.so shows dependencies on:
libdovecot-sieve.so.0 libdovecot-storage.so.0 libdovecot.so.0 It does not directly link against libdovecot-lda.so.
- Standalone sievec Compiling a Sieve script works correctly:
sievec /tmp/test.sieve Exit status is 0 as long as no configuration enables the Sieve delivery plugin.
The failure only occurs once:
mail_plugins { sieve = yes } is present in the configuration.
Reproduced on a Clean Debian 13 Installation To rule out configuration or upgrade issues, I reproduced the exact same problem on a completely clean debian:13-slim container.
I installed only the Debian stable packages:
apt-get install dovecot-core dovecot-sieve dovecot-lmtpd (version 1:2.4.1+dfsg1-6+deb13u6)
Using the same production configuration with:
mail_plugins { sieve = yes } produces the exact same error:
sievec: Fatal: Couldn't load required plugin ... undefined symbol: mail_deliver_ctx_get_log_var_expand_table This indicates the problem is not caused by:
mixed package versions an upgrade issue local modifications custom configuration The issue reproduces consistently on both:
Dovecot CE 2.4.4 Debian 13's packaged Dovecot 2.4.1 Questions Is mail_deliver_ctx_get_log_var_expand_table a new internal function that should be exported in Dovecot 2.4? Was there an ABI change affecting the Pigeonhole plugin?
Is this a known issue in the Dovecot 2.4.x packages? If so, is a fix planned (for example, in 2.4.5)?
Is there any recommended workaround for using Sieve during message delivery (e.g. moving spam to the Junk folder) while this issue is unresolved?
I am trying to use the new Dovecot 2.4 configuration syntax (sieve_script_type, sieve_script_precedence, and sieve_script_path), since sieve_before and the plugin {} block were removed in 2.4.
Thank you for your time. I would be happy to provide additional logs, the complete doveconf -n output, or a core dump if that would be helpful.
Best regards,
Miguel A Morales
Server: Debian 13 (amd64) Dovecot: 2.4.4-5+debian13
Hello Dovecot Team,
I am reporting what appears to be a packaging/ABI issue affecting the Pigeonhole Sieve delivery plugin in Dovecot 2.4. I have performed extensive diagnostics and would appreciate any guidance.
Environment
o Operating System: Debian 13 (Trixie), amd64
o Repository: Official Dovecot CE repository
(repo.dovecot.org/ce-2.4-latest/debian/trixie)
o Installed package version: 2:2.4.4-5+debian13
Installed packages:
o dovecot-core
o dovecot-sieve
o dovecot-lmtpd
o dovecot-imapd
o dovecot-pop3d
o dovecot-managesieved
o dovecot-pgsql
All packages are installed at the exact same version.
Problem Description
When enabling the Sieve delivery plugin with:
mail_plugins { sieve = yes }
Dovecot fails to load the plugin with the following error:
sievec: Fatal: Couldn't load required plugin /usr/lib/dovecot/modules/lib90_sieve_plugin.so: dlopen() failed: /usr/lib/dovecot/modules/lib90_sieve_plugin.so: undefined symbol: mail_deliver_ctx_get_log_var_expand_table
As a result, message delivery fails entirely whenever the Sieve delivery plugin is enabled. Disabling the plugin restores normal mail delivery.
Diagnostics Performed
- Package verification
All installed packages are version 2:2.4.4-5+debian13 from the official Dovecot CE repository. There are no mixed package versions.
- Symbol verification
I searched for the symbol mail_deliver_ctx_get_log_var_expand_table throughout the Dovecot libraries.
Results:
o nm -D on libdovecot-lda.so.0.0.0 -> symbol not found
o readelf -sW on libdovecot-lda.so.0.0.0 -> symbol not found
o Recursive search across all .so files under:
o /usr/lib/dovecot/
o /usr/lib/x86_64-linux-gnu/dovecot/
-> symbol not exported anywhere
o The symbol string exists inside both:
o lib90_sieve_plugin.so
o libdovecot-lda.so.0.0.0
but only as plain text (visible via grep), never as an exported ELF
symbol.
3. Dependency verification
ldd on lib90_sieve_plugin.so shows dependencies on:
o libdovecot-sieve.so.0
o libdovecot-storage.so.0
o libdovecot.so.0
It does not directly link against libdovecot-lda.so.
- Standalone sievec
Compiling a Sieve script works correctly:
sievec /tmp/test.sieve
Exit status is 0 as long as no configuration enables the Sieve delivery plugin.
The failure only occurs once:
mail_plugins { sieve = yes }
is present in the configuration.
Reproduced on a Clean Debian 13 Installation
To rule out configuration or upgrade issues, I reproduced the exact same problem on a completely clean debian:13-slim container.
I installed only the Debian stable packages:
apt-get install dovecot-core dovecot-sieve dovecot-lmtpd
(version 1:2.4.1+dfsg1-6+deb13u6)
Using the same production configuration with:
mail_plugins { sieve = yes }
produces the exact same error:
sievec: Fatal: Couldn't load required plugin ... undefined symbol: mail_deliver_ctx_get_log_var_expand_table
This indicates the problem is not caused by:
o mixed package versions
o an upgrade issue
o local modifications
o custom configuration
The issue reproduces consistently on both:
o Dovecot CE 2.4.4
o Debian 13's packaged Dovecot 2.4.1
Questions
1. Is mail_deliver_ctx_get_log_var_expand_table a new internal function
that should be exported in Dovecot 2.4? Was there an ABI change
affecting the Pigeonhole plugin?
2. Is this a known issue in the Dovecot 2.4.x packages? If so, is a fix
planned (for example, in 2.4.5)?
3. Is there any recommended workaround for using Sieve during message
delivery (e.g. moving spam to the Junk folder) while this issue is
unresolved?
I am trying to use the new Dovecot 2.4 configuration syntax (sieve_script_type, sieve_script_precedence, and sieve_script_path), since sieve_before and the plugin {} block were removed in 2.4.
Thank you for your time. I would be happy to provide additional logs, the complete doveconf -n output, or a core dump if that would be helpful.
Best regards,
Miguel A Morales
Server: Debian 13 (amd64) Dovecot: 2.4.4-5+debian13
Hi!
Sieve cannot be loaded globally.
Or lda
protocol lmtp { mail_plugins { sieve = yes } }
Aki
On August 7, 2026 2:12:42 AM GMT+03:00, Developer Sub N Grill via dovecot <dovecot@dovecot.org> wrote:
Hello Dovecot Team,
I am reporting what appears to be a packaging/ABI issue affecting the Pigeonhole Sieve delivery plugin in Dovecot 2.4. I have performed extensive diagnostics and would appreciate any guidance.
Environment Operating System: Debian 13 (Trixie), amd64 Repository: Official Dovecot CE repository (repo.dovecot.org/ce-2.4-latest/debian/trixie) Installed package version:2:2.4.4-5+debian13 Installed packages:
dovecot-core dovecot-sieve dovecot-lmtpd dovecot-imapd dovecot-pop3d dovecot-managesieved dovecot-pgsql All packages are installed at the exact same version.
Problem Description When enabling the Sieve delivery plugin with:
mail_plugins { sieve = yes } Dovecot fails to load the plugin with the following error:
sievec: Fatal: Couldn't load required plugin /usr/lib/dovecot/modules/lib90_sieve_plugin.so: dlopen() failed: /usr/lib/dovecot/modules/lib90_sieve_plugin.so: undefined symbol: mail_deliver_ctx_get_log_var_expand_table As a result, message delivery fails entirely whenever the Sieve delivery plugin is enabled. Disabling the plugin restores normal mail delivery.
Can't reproduce this. Sieve works and sorts mail coming in via lmtp.
Also on debian 13 with the dovecot ce packages.
For LMTP my 20-lmtp.conf has this section. If you use LDA you will have to load the plugins for protocol lda as well.
protocol lmtp { mail_plugins { sieve = yes quota = yes fts = yes fts_solr = yes } }
Thank you for your time. I would be happy to provide additional logs, the complete doveconf -n output, or a core dump if that would be helpful.
doveconf -n would be very useful to start with.
Best regards,
Miguel A Morales
Server: Debian 13 (amd64) Dovecot: 2.4.4-5+debian13
-- Christian Kivalo
participants (3)
-
Aki Tuomi
-
Christian Kivalo
-
Developer Sub N Grill