Hello everyone,

   I am currently working on porting the Dovecot 2.4 configuration from the
   latest 2.3 version.

   During this process, I encountered issues with the Sieve filters,
   particularly those related to SQL dict mappings.

   The previous (2.3) configuration looked like this and worked:

 map {
   pattern = priv/sieve/name/$script_name
   table = sieve_before
   username_field = username
   value_field = id
   fields {
     script_name = $script_name
   }
 }

 map {
   pattern = priv/sieve/data/$id
   table = sieve_before
   username_field = username
   value_field = script_data
   fields {
     id = $id
   }
 }

   This resulted in the following SQL queries on the MySQL server:

 2025-08-15 11:01:29.237511 SELECT id FROM sieve_after WHERE script_name = 
'active' AND username = '[1]frittenjo...@derlinkman.de'
 2025-08-15 11:01:29.236416 SELECT id FROM sieve_before WHERE script_name = 
'active' AND username = '[2]frittenjo...@derlinkman.de'

   As you can see, there are SQL mappings for sieve_before and sieve_after,
   alongside a local file loaded prior to the SQL settings, as they are
   user-based.

   In Dovecot 2.3, everything worked and the scripts were executed. In 2.4,
   however, they no longer run.

   I adapted the configuration for dict SQL mapping for Sieve filters
   according to the documentation:

 dict_map priv/sieve/name/$script_name {
   sql_table = sieve_before
   username_field = username
   value_field id {
   }

   # The script name field in the table to query
   key_field script_name {
     value = $script_name
   }
 }

 dict_map priv/sieve/data/$id {
   sql_table = sieve_before
   username_field = username
   value_field script_data {
   }
   key_field id {
     value = $id
   }
 }

   This also results in the dict proxy querying the database with the same
   pattern as before:

 2025-08-15 11:11:47.175184 SELECT id FROM sieve_after WHERE script_name = 
'active' AND username = '[3]frittenjo...@derlinkman.de'
 2025-08-15 11:11:47.172952 SELECT id FROM sieve_before WHERE script_name = 
'active' AND username = '[4]frittenjo...@derlinkman.de'
 2025-08-15 11:11:47.155786 SELECT id FROM sieve_after WHERE script_name = 
'active' AND username = '[5]frittenjo...@derlinkman.de'
 2025-08-15 11:11:47.136030 SELECT id FROM sieve_before WHERE script_name = 
'active' AND username = '[6]frittenjo...@derlinkman.de'

   However, unlike in 2.3, it now queries the DB twice.

   In the Sieve debug logs, I see the following:

   [7]https://pastebin.com/PTKkLsDQ

   Notably:

 Aug 15 12:22:24 43664c142e0a dovecot: 
lmtp([8]frittenjo...@derlinkman.de)<2407><mPFNN2AKn2hnCQAAhwrv7A>: Debug: Local 
delivery failed: Temporarily unable to access necessary Sieve scripts

   This line concerns me.

   Here are the current Sieve script declarations:

 sieve_script before {
   type = before
   driver = file
   path = /var/vmail/sieve/global_sieve_before.sieve
 }

 sieve_script before2 {
   type = before
   driver = dict
   name = active
   dict proxy {
     name = sieve_before
     sieve_script_bin_path = /var/vmail/sieve_before_bindir
   }
 }

 sieve_script after {
   type = after
   driver = file
   path = /var/vmail/sieve/global_sieve_after.sieve
 }

 sieve_script after2 {
   type = after
   driver = dict
   name = active
   dict proxy {
     name = sieve_after
     sieve_script_bin_path = /var/vmail/sieve_after_bindir
   }
 }

 # Personal scripts
 sieve_script personal {
   type = personal
   driver = file
   path = ~/sieve
   active_path = ~/.dovecot.sieve
 }

   The dict proxy configuration, pointing to the dict_map SQL query above,
   looks like this:

 dict sieve_after {
   driver = sql
   !include /etc/dovecot/sql/dovecot-dict-sql-sieve_after.conf
 }

 dict sieve_before {
   driver = sql
   !include /etc/dovecot/sql/dovecot-dict-sql-sieve_before.conf
 }

   Thanks for your guidance.

   Kind regards

   Niklas Meyer

   Maintainer of the mailcow project

References

   Visible links
   1. mailto:frittenjo...@derlinkman.de
   2. mailto:frittenjo...@derlinkman.de
   3. mailto:frittenjo...@derlinkman.de
   4. mailto:frittenjo...@derlinkman.de
   5. mailto:frittenjo...@derlinkman.de
   6. mailto:frittenjo...@derlinkman.de
   7. https://pastebin.com/PTKkLsDQ
   8. mailto:frittenjo...@derlinkman.de
_______________________________________________
dovecot mailing list -- dovecot@dovecot.org
To unsubscribe send an email to dovecot-le...@dovecot.org

Reply via email to