22 Oct
2026
22 Oct
'26
11:54 a.m.
Hello!
I recently upgrade from dovecot 2.3 → 2.4 (2.4.5).
Over 10 year I have a script running synchronising sieve scripts from a subversion backend to the dovecot installation.
If I run the script in terminal it works. But as cron job (every hour) it is now complaining about a **sievec** error.
## error message ###
sievec: Panic: file hash.c: line 256 (hash_table_insert_node): assertion failed: (opcode == HASH_TABLE_OP_UPDATE)
sievec: Error: Raw backtrace: #1 [unw_get_proc_name() failed: -10] -> #2 default_fatal_handler[0x7fae27d50e70] -> #3 i_panic[0x7fae27c6e860] -> #4 [unw_get_proc_name() failed: -10] -> #5 ext_include_binary_script_include[0x7fae283acfa0] -> #6 ext_include_generate_include[0x7fae283ad0a0] -> #7 [unw_get_proc_name() failed: -10] -> #8 sieve_generate_block[0x7fae2837f7d0] -> #9 sieve_generator_run[0x7fae28381150] -> #10 sieve_compile_script[0x7fae2839e730] -> #11 sieve_compile[0x7fae2839e900] -> #12 sieve_tool_script_compile[0x55e263c89b60] -> #13 main[0x55e263c886c0] -> #14 [unw_get_proc_name() failed: -10] -> #15 __libc_start_main[0x7fae27a35ce0] -> #16 _start[0x55e263c889e0]
🛈 The full error message is at the end.
## context ###
The error occurs in the following bash code:
``` bash
# Compile the sieve files.
for sieveFile in "${mailHome}"/sieve/*.sieve
do
if [[ -e ${sieveFile} ]]
then
if /usr/bin/sievec -D "${sieveFile}" &>"${catchOut}"
then
[…]
fi
fi
done
Observations
- The error is not stable. The script run every hour but the errors are only ~2/3 of the runs.
- The problem occurres only for one user with his personal
Default.sievefile. (Bad luck that is myself.) - It can be reproduced locally. The following snippet is failing after 1…9 rounds – mostly 1 or 2 rounds.
ctr=1 ; while sievec -D Default.sieve ; do c42_sepLine "$((++ctr)) " ; done; echo ${ctr}? - It doesn't seem to be related to any of the included files. I commented them out one for one.
- If **only 1 include** is left the error is vanished. It doesn't depend on the include.
Default.sieve
require ["include"];
include :personal "_TrollReject";
include :personal "_alert";
include :personal "_tasks";
include :global "spam";
include :global "jobState";
include :global "ReceiptMessages";
include :personal "_c42-list";
include :personal "_mailinglist";
include :personal "_newsletter";
include :personal "_statusmail";
include :personal "_bugtracking";
include :personal "_werbung";
include :personal "_auction";
🛈 _… are personal, other are global scripts.
Full output
sievec: Debug: sieve: Pigeonhole version 2.4.5 (742bb892) initializing
sievec: Debug: sieve: storage _file: file: Using Sieve script path: /srv/mail-c42/dirk/sieve/Default.sieve
sievec: Debug: sieve: storage _file: file: script 'Default': Opened from '_file'
sievec: Debug: sieve: storage _file: file: script 'Default': Opened script for reading
sievec: Debug: sieve: storage personal: file: Storage path '/c42home/dirk/sieve' not found
sievec: Debug: sieve: storage: file: Performing auto-detection
sievec: Debug: sieve: storage: file: Use home (/c42home/dirk)
sievec: Debug: sieve: storage: file: Checking storage path /c42home/dirk/sieve
sievec: Debug: sieve: storage: file: Storage path '/c42home/dirk/sieve' not found
sievec: Debug: sieve: storage: file: Checking storage path ~/.dovecot.sieve
sievec: Debug: sieve: storage: file: Storage path '/c42home/dirk/.dovecot.sieve' not found
sievec: Debug: sieve: storage: Autodetection failed
sievec: Debug: sieve: storage: No matching Sieve storage configured (type=personal and cause=any)
sievec: Debug: sieve: storage default: file: Using Sieve script path: /etc/c42CfgRepos/roles/mail_schiller/data/dovecot/default.sieve
sievec: Debug: sieve: storage default (default): file: script '_TrollReject': Opened from 'default'
sievec: Debug: sieve: storage default (default): file: script '_alert': Opened from 'default'
sievec: Debug: sieve: storage default (default): file: script '_tasks': Opened from 'default'
sievec: Debug: sieve: storage global: file: Using script storage path: /etc/c42CfgRepos/roles/mail_schiller/data/dovecot/sieve_global_dir
sievec: Debug: sieve: storage global: file: script 'spam': Opened from 'global'
sievec: Debug: sieve: storage global: file: Using script storage path: /etc/c42CfgRepos/roles/mail_schiller/data/dovecot/sieve_global_dir
sievec: Debug: sieve: storage global: file: script 'jobState': Opened from 'global'
sievec: Debug: sieve: storage global: file: Using script storage path: /etc/c42CfgRepos/roles/mail_schiller/data/dovecot/sieve_global_dir
sievec: Debug: sieve: storage global: file: script 'ReceiptMessages': Opened from 'global'
sievec: Debug: sieve: storage default (default): file: script '_c42-list': Opened from 'default'
sievec: Debug: sieve: storage default (default): file: script '_mailinglist': Opened from 'default'
sievec: Debug: sieve: storage default (default): file: script '_newsletter': Opened from 'default'
sievec: Debug: sieve: storage default (default): file: script '_statusmail': Opened from 'default'
sievec: Debug: sieve: storage default (default): file: script '_bugtracking': Opened from 'default'
sievec: Debug: sieve: storage default (default): file: script '_werbung': Opened from 'default'
sievec: Debug: sieve: storage default (default): file: script '_auction': Opened from 'default'
sievec: Debug: sieve: storage default (default): file: script '_TrollReject': Opened script for reading
sievec: Debug: sieve: storage global: file: Using script storage path: /etc/c42CfgRepos/roles/mail_schiller/data/dovecot/sieve_global_dir
sievec: Debug: sieve: storage global: file: script 'spam': Opened from 'global'
sievec: Debug: sieve: storage global: file: Using script storage path: /etc/c42CfgRepos/roles/mail_schiller/data/dovecot/sieve_global_dir
sievec: Debug: sieve: storage global: file: script 'jobState': Opened from 'global'
sievec: Debug: sieve: storage global: file: script 'spam': Opened script for reading
sievec: Debug: sieve: storage global: file: script 'jobState': Opened script for reading
sievec: Panic: file hash.c: line 256 (hash_table_insert_node): assertion failed: (opcode == HASH_TABLE_OP_UPDATE)
sievec: Error: Raw backtrace: #1 [unw_get_proc_name() failed: -10] -> #2 default_fatal_handler[0x7f248d750e70] -> #3
i_panic[0x7f248d66e860] -> #4 [unw_get_proc_name() failed: -10] -> #5
ext_include_binary_script_include[0x7f248dc80fa0] -> #6 ext_include_generate_include[0x7f248dc810a0] -> #7
[unw_get_proc_name() failed: -10] -> #8 sieve_generate_block[0x7f248dc537d0] -> #9
sieve_generator_run[0x7f248dc55150] -> #10 sieve_compile_script[0x7f248dc72730] -> #11 sieve_compile[0x7f248dc72900]
-> #12 sieve_tool_script_compile[0x55800baecb60] -> #13 main[0x55800baeb6c0] -> #14 [unw_get_proc_name() failed:
-10] -> #15 __libc_start_main[0x7f248d435ce0] -> #16 _start[0x55800baeb9e0]
ps
Luckily dovecot is processing the compiled files, but the repeating error messages are annoying and the update of sieve files is not guaranteed.
Best Regards,
H.-Dirk Schmitt
Hello!
I recently upgrade from dovecot 2.3 -> 2.4 (2.4.5).
Over 10 year I have a script running synchronising sieve scripts from a subversion backend to the dovecot installation.
If I run the script in terminal it works. But as cron job (every hour) it is now complaining about a **sievec** error.
## error message ###
sievec: Panic: file hash.c: line 256 (hash_table_insert_node): assertion failed: (opcode == HASH_TABLE_OP_UPDATE)
sievec: Error: Raw backtrace: #1 [unw_get_proc_name() failed: -10] -> #2 default_fatal_handler[0x7fae27d50e70] -> #3 i_panic[0x7fae27c6e860] -> #4 [unw_get_proc_name() failed: -10] -> #5 ext_include_binary_script_include[0x7fae283acfa0] -> #6 ext_include_generate_include[0x7fae283ad0a0] -> #7 [unw_get_proc_name() failed: -10] -> #8 sieve_generate_block[0x7fae2837f7d0] -> #9 sieve_generator_run[0x7fae28381150] -> #10 sieve_compile_script[0x7fae2839e730] -> #11 sieve_compile[0x7fae2839e900] -> #12 sieve_tool_script_compile[0x55e263c89b60] -> #13 main[0x55e263c886c0] -> #14 [unw_get_proc_name() failed: -10] -> #15 __libc_start_main[0x7fae27a35ce0] -> #16 _start[0x55e263c889e0]
**** The full error message is at the end.
## context ###
The error occurs in the following bash code:
``` bash
# Compile the sieve files.
for sieveFile in "${mailHome}"/sieve/*.sieve
do
if [[ -e ${sieveFile} ]]
then
if /usr/bin/sievec -D "${sieveFile}" &>"${catchOut}"
then
[...]
fi
fi
done
Observations
1. The error is not stable. The script run every hour but the errors are
only ~2/3 of the runs.
2. The problem occurres only for one user with his personal Default.sieve
file. (Bad luck that is myself.)
3. It can be reproduced locally. The following snippet is failing after
1...9 rounds - mostly 1 or 2 rounds. ctr=1 ; while sievec -D
Default.sieve ; do c42_sepLine "$((++ctr)) " ; done; echo ${ctr}?
4. It doesn't seem to be related to any of the included files. I
commented them out one for one.
5. If only 1 include is left the error is vanished. It doesn't depend on
the include.
Default.sieve
require ["include"];
include :personal "_TrollReject";
include :personal "_alert";
include :personal "_tasks";
include :global "spam";
include :global "jobState";
include :global "ReceiptMessages";
include :personal "_c42-list";
include :personal "_mailinglist";
include :personal "_newsletter";
include :personal "_statusmail";
include :personal "_bugtracking";
include :personal "_werbung";
include :personal "_auction";
**** _... are personal, other are global scripts.
Full output
sievec: Debug: sieve: Pigeonhole version 2.4.5 (742bb892) initializing
sievec: Debug: sieve: storage _file: file: Using Sieve script path: /srv/mail-c42/dirk/sieve/Default.sieve
sievec: Debug: sieve: storage _file: file: script 'Default': Opened from '_file'
sievec: Debug: sieve: storage _file: file: script 'Default': Opened script for reading
sievec: Debug: sieve: storage personal: file: Storage path '/c42home/dirk/sieve' not found
sievec: Debug: sieve: storage: file: Performing auto-detection
sievec: Debug: sieve: storage: file: Use home (/c42home/dirk)
sievec: Debug: sieve: storage: file: Checking storage path /c42home/dirk/sieve
sievec: Debug: sieve: storage: file: Storage path '/c42home/dirk/sieve' not found
sievec: Debug: sieve: storage: file: Checking storage path ~/.dovecot.sieve
sievec: Debug: sieve: storage: file: Storage path '/c42home/dirk/.dovecot.sieve' not found
sievec: Debug: sieve: storage: Autodetection failed
sievec: Debug: sieve: storage: No matching Sieve storage configured (type=personal and cause=any)
sievec: Debug: sieve: storage default: file: Using Sieve script path: /etc/c42CfgRepos/roles/mail_schiller/data/dovecot/default.sieve
sievec: Debug: sieve: storage default (default): file: script '_TrollReject': Opened from 'default'
sievec: Debug: sieve: storage default (default): file: script '_alert': Opened from 'default'
sievec: Debug: sieve: storage default (default): file: script '_tasks': Opened from 'default'
sievec: Debug: sieve: storage global: file: Using script storage path: /etc/c42CfgRepos/roles/mail_schiller/data/dovecot/sieve_global_dir
sievec: Debug: sieve: storage global: file: script 'spam': Opened from 'global'
sievec: Debug: sieve: storage global: file: Using script storage path: /etc/c42CfgRepos/roles/mail_schiller/data/dovecot/sieve_global_dir
sievec: Debug: sieve: storage global: file: script 'jobState': Opened from 'global'
sievec: Debug: sieve: storage global: file: Using script storage path: /etc/c42CfgRepos/roles/mail_schiller/data/dovecot/sieve_global_dir
sievec: Debug: sieve: storage global: file: script 'ReceiptMessages': Opened from 'global'
sievec: Debug: sieve: storage default (default): file: script '_c42-list': Opened from 'default'
sievec: Debug: sieve: storage default (default): file: script '_mailinglist': Opened from 'default'
sievec: Debug: sieve: storage default (default): file: script '_newsletter': Opened from 'default'
sievec: Debug: sieve: storage default (default): file: script '_statusmail': Opened from 'default'
sievec: Debug: sieve: storage default (default): file: script '_bugtracking': Opened from 'default'
sievec: Debug: sieve: storage default (default): file: script '_werbung': Opened from 'default'
sievec: Debug: sieve: storage default (default): file: script '_auction': Opened from 'default'
sievec: Debug: sieve: storage default (default): file: script '_TrollReject': Opened script for reading
sievec: Debug: sieve: storage global: file: Using script storage path: /etc/c42CfgRepos/roles/mail_schiller/data/dovecot/sieve_global_dir
sievec: Debug: sieve: storage global: file: script 'spam': Opened from 'global'
sievec: Debug: sieve: storage global: file: Using script storage path: /etc/c42CfgRepos/roles/mail_schiller/data/dovecot/sieve_global_dir
sievec: Debug: sieve: storage global: file: script 'jobState': Opened from 'global'
sievec: Debug: sieve: storage global: file: script 'spam': Opened script for reading
sievec: Debug: sieve: storage global: file: script 'jobState': Opened script for reading
sievec: Panic: file hash.c: line 256 (hash_table_insert_node): assertion failed: (opcode == HASH_TABLE_OP_UPDATE)
sievec: Error: Raw backtrace: #1 [unw_get_proc_name() failed: -10] -> #2 default_fatal_handler[0x7f248d750e70] -> #3
i_panic[0x7f248d66e860] -> #4 [unw_get_proc_name() failed: -10] -> #5
ext_include_binary_script_include[0x7f248dc80fa0] -> #6 ext_include_generate_include[0x7f248dc810a0] -> #7
[unw_get_proc_name() failed: -10] -> #8 sieve_generate_block[0x7f248dc537d0] -> #9
sieve_generator_run[0x7f248dc55150] -> #10 sieve_compile_script[0x7f248dc72730] -> #11 sieve_compile[0x7f248dc72900]
-> #12 sieve_tool_script_compile[0x55800baecb60] -> #13 main[0x55800baeb6c0] -> #14 [unw_get_proc_name() failed:
-10] -> #15 __libc_start_main[0x7f248d435ce0] -> #16 _start[0x55800baeb9e0]
ps
Luckily dovecot is processing the compiled files, but the repeating error
messages are annoying and the update of sieve files is not guaranteed.
Best Regards,
H.-Dirk Schmitt