Hi, I'm getting segfaults and unexpected disconnects from managesieve server, when the Thunderbird SIEVE extension tries to validate SIEVE scripts agains Pidgeonhole in Dovecot 2.1.8.
The extension says: "Server terminated unexpectedly the connection, click on reconnect to try again." It can be reproduced by simply calling CHECKSCRIPT followed by a string: mail01:~# telnet 127.0.0.1 19200 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. "IMPLEMENTATION" "Sieve" "SIEVE" "fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date ihave" "NOTIFY" "mailto" "SASL" "PLAIN" "VERSION" "1.0" OK "Mailbox" AUTHENTICATE "PLAIN" "AGRwYXJ0aGV5QGV4YW1wbGUub3JnAGRwYXJ0aGV5" OK "Logged in." CHECKSCRIPT {6+} abcdef Connection closed by foreign host. The server interrupts the connection and the logs show the following: # dovecot.log Sep 7 01:40:46 dovecot: mailbox: mail: managesieve(dpart...@example.org): Fatal: master: service(managesieve): child 31356 killed with signal 11 (core dumped) # kern.log Sep 7 01:40:46 kernel: [1417105.954609] managesieve[31356]: segfault at 0 ip 00007f1c415c4876 sp 00007fffb3731f88 error 4 in libc-2.11.1.so[7f1c41543000+17a000] Here is the backtrace: mail01:~# gdb /usr/lib/dovecot/managesieve /var/tmp/core.managesieve.31356 Core was generated by `dovecot-mailbox/managesieve'. Program terminated with signal 11, Segmentation fault. #0 0x00007f1c415c4876 in ?? () from /lib/libc.so.6 (gdb) bt full #0 0x00007f1c415c4876 in ?? () from /lib/libc.so.6 No symbol table info available. #1 0x000000000040b1c3 in sieve_storage_save_will_activate (ctx=0x257f1a0) at sieve-storage-save.c:328 _data_stack_cur_id = 4 scriptname = 0x25400ae "default.sieve" ret = <value optimized out> #2 0x00000000004065b0 in cmd_putscript_finish_parsing (cmd=0x2575cb8) at cmd-putscript.c:206 ehandler = <value optimized out> cpflags = <value optimized out> sbin = <value optimized out> errors = <value optimized out> _data_stack_cur_id = 0 script = <value optimized out> client = 0x2575c30 ctx = 0x2578180 args = 0x254bc68 ret = <value optimized out> #3 0x0000000000406838 in cmd_putscript_continue_script (cmd=0x2575cb8) at cmd-putscript.c:423 all_written = <value optimized out> client = 0x2575c30 ctx = 0x2578180 size = 39279968 #4 0x0000000000406caf in client_input_putscript (context=0x2575c30) at cmd-putscript.c:84 cmd = 0x2575cb8 __FUNCTION__ = "client_input_putscript" #5 0x00007f1c41d1d3e6 in io_loop_call_io (io=0x2575fd0) at ioloop.c:379 ioloop = 0x2548680 t_id = 2 #6 0x00007f1c41d1e46f in io_loop_handler_run (ioloop=<value optimized out>) at ioloop-epoll.c:213 ctx = 0x25489f0 event = 0x2548a60 list = 0x2576020 io = 0x0 tv = {tv_sec = 18, tv_usec = 988469} msecs = <value optimized out> ret = <value optimized out> i = 0 call = false #7 0x00007f1c41d1d388 in io_loop_run (ioloop=0x2548680) at ioloop.c:398 No locals. #8 0x00007f1c41d09653 in master_service_run (service=0x2548530, callback=0x25400ae) at master-service.c:543 No locals. #9 0x00000000004096ce in main (argc=1, argv=0x2548370) at main.c:308 set_roots = {0x610d60, 0x0} login_set = {auth_socket_path = 0x2540088 "/var/run/dovecot/auth-master", postlogin_socket_path = 0x0, postlogin_timeout_secs = 60, callback = 0x409810 <login_client_connected>, failure_callback = 0x409290 <login_client_failed>} service_flags = <value optimized out> storage_service_flags = MAIL_STORAGE_SERVICE_FLAG_DISALLOW_ROOT username = 0x0 c = <value optimized out> Regards Daniel -- https://plus.google.com/103021802792276734820
# 2.1.8: /etc/dovecot/dovecot.conf # OS: Linux 2.6.32-42-server x86_64 Ubuntu 10.04.4 LTS auth_cache_negative_ttl = 0 auth_cache_size = 10 M auth_cache_ttl = 1 mins auth_verbose = yes auth_verbose_passwords = sha1 deliver_log_format = mailbox: deliver: msgid=%m from=%f: %$ dict { quota = mysql:/etc/dovecot/conf.d/dovecot-dict-sql.conf.ext } disable_plaintext_auth = no doveadm_password = xxx imapc_features = rfc822.size imapc_host = local-mailbox imapc_port = 18143 instance_name = dovecot-mailbox lda_mailbox_autocreate = yes lda_mailbox_autosubscribe = yes login_greeting = Mailbox login_log_format = mailbox: login: %$: %s login_trusted_networks = 10.129.3.0/24 mail_debug = yes mail_fsync = always mail_gid = vmail mail_home = /mail/dovecot/%d/%n mail_location = mdbox:~/mail mail_log_prefix = "mailbox: mail: %s(%u): " mail_plugins = quota stats mail_privileged_group = vmail mail_uid = vmail managesieve_implementation_string = Sieve managesieve_notify_capability = mailto managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date ihave mdbox_rotate_interval = 1 weeks mdbox_rotate_size = 50 M mmap_disable = yes passdb { args = /etc/dovecot/conf.d/dovecot-sql.conf.ext driver = sql } plugin { quota = dict:User quota::proxy::quota quota_rule = *:storage=10G quota_rule2 = Trash:storage=+100M quota_warning = storage=95%% quota-warning 95 %u quota_warning2 = storage=80%% quota-warning 80 %u sieve = ~/.dovecot.sieve sieve_dir = ~/sieve stats_refresh = 30 secs stats_track_cmds = yes } protocols = imap pop3 lmtp sieve service auth { unix_listener auth-userdb { group = dovecot mode = 0660 user = dovecot } } service dict { unix_listener dict { group = vmail mode = 0660 } } service doveadm { inet_listener doveadm-server { port = 19000 } } service imap-login { inet_listener imap { port = 19143 } } service imap-postlogin { executable = script-login /usr/local/bin/dovecot-postlogin user = $default_internal_user } service imap { executable = imap imap-postlogin } service lmtp { inet_listener lmtp { address = * port = 19024 } } service managesieve-login { inet_listener sieve { port = 19200 } } service pop3-login { inet_listener pop3 { port = 19110 } } service pop3-postlogin { executable = script-login /usr/local/bin/dovecot-postlogin user = $default_internal_user } service pop3 { executable = pop3 pop3-postlogin } service quota-warning { executable = script /usr/local/bin/quota-warning extra_groups = dovecot unix_listener quota-warning { user = vmail } user = vmail } service stats { fifo_listener stats-mail { mode = 0600 user = vmail } } ssl = no userdb { driver = prefetch } userdb { args = /etc/dovecot/conf.d/dovecot-sql.conf.ext driver = sql } verbose_proctitle = yes protocol imap { imap_client_workarounds = delay-newmail tb-extra-mailbox-sep mail_plugins = quota stats imap_quota imap_stats } protocol lmtp { mail_plugins = quota stats sieve }