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