[Dovecot] Dovecot 2.1.16 doveadm purge -A segfault

Daniel Parthey daniel.parthey at informatik.tu-chemnitz.de
Mon Apr 29 17:38:56 EEST 2013


Hi,

I know that a lot of work has been done regarding doveadm server, but I'm still
experiencing easily reproducible segfault crashes of doveadm-server with 2.1.16
when running the following command in a 4 node director/mailbox cluster:

  /usr/bin/doveadm -c /etc/dovecot-director/dovecot-director.conf -D purge -A

The dovecot-error.log shows the following errors (addresses anonymized):

Apr 29 15:45:14 10.129.3.233 dovecot: doveadm: Error: purge: invalid option -- ''
Apr 29 15:45:14 10.129.3.233 dovecot: doveadm(x.xxxxxx at xxx-xxxxxx.xx): Error: doveadm purge: Client sent unknown parameter: ?
Apr 29 15:45:14 10.129.3.233 dovecot: doveadm: Error: purge: invalid option -- '�'
Apr 29 15:45:14 10.129.3.233 dovecot: doveadm(x.xxxxxx at xxx-xxxxxx.xx): Error: doveadm purge: Client sent unknown parameter: ?
Apr 29 15:45:14 10.129.3.249 dovecot: doveadm: Error: purge: invalid option -- '�'
Apr 29 15:45:14 10.129.3.249 dovecot: doveadm(x.xxxxxx at xxx-xxxxxx.xx): Error: doveadm purge: Client sent unknown parameter: ?
Apr 29 15:45:14 10.129.3.249 dovecot: doveadm: Error: purge: invalid option -- 'r'
Apr 29 15:45:14 10.129.3.249 dovecot: doveadm(x.xxxxxx at xxx-xxxxxx.xx): Error: doveadm purge: Client sent unknown parameter: ?
Apr 29 15:45:14 10.129.3.213 dovecot: doveadm: Error: purge: invalid option -- 'e'
Apr 29 15:45:14 10.129.3.213 dovecot: doveadm(xxxxx at xxxxxx.xx): Error: doveadm purge: Client sent unknown parameter: ?
Apr 29 15:45:14 10.129.3.213 dovecot: doveadm: Error: purge: invalid option -- 'g'
Apr 29 15:45:14 10.129.3.213 dovecot: doveadm(xxxxx at xxxxxx.xx): Error: doveadm purge: Client sent unknown parameter: ?
Apr 29 15:45:14 10.129.3.213 dovecot: doveadm: Error: purge: invalid option -- 'e'
Apr 29 15:45:14 10.129.3.213 dovecot: doveadm(xxxxx at xxxxxx.xx): Error: doveadm purge: Client sent unknown parameter: ?
Apr 29 15:45:14 10.129.3.213 dovecot: doveadm: Error: purge: invalid option -- '-'
Apr 29 15:45:14 10.129.3.213 dovecot: doveadm(xxxxx at xxxxxx.xx): Error: doveadm purge: Client sent unknown parameter: ?
Apr 29 15:45:14 10.129.3.249 dovecot: doveadm: Error: purge: invalid option -- ''
Apr 29 15:45:14 10.129.3.249 dovecot: doveadm(xxxxxxxxxx at xxxxxxxxxx.xx): Error: doveadm purge: Client sent unknown parameter: ?
Apr 29 15:45:14 10.129.3.213 dovecot: doveadm(xxxxx at xxxxxx.xx): Fatal: master: service(doveadm): child 6316 killed with signal 11 (core dumped)

There seems to something wrong with the doveadm command parser:

# gdb /usr/lib/dovecot/doveadm-server /var/tmp/6316
(gdb) bt full
#0  0x00007f52f0dc7cca in ?? () from /lib/libc.so.6
No symbol table info available.
#1  0x00007f52f0dc8dab in ?? () from /lib/libc.so.6
No symbol table info available.
#2  0x00007f52f0dc8e18 in getopt () from /lib/libc.so.6
No symbol table info available.
#3  0x00000000004138ce in doveadm_mail_cmd_server_parse (conn=0xe09ad0) at client-connection.c:69
        getopt_args = 0xdfa6b8 "AS:u:"
        c = <value optimized out>
        cmd = 0xe062c8
        add_username_header = false
#4  client_handle_command (conn=0xe09ad0) at client-connection.c:223
        ctx = 0xe0dae0
        flags = <value optimized out>
        cmd_name = <value optimized out>
        input = {module = 0x0, service = 0x4210f0 "doveadm", username = 0xdfa59a "xxxxxxx at xxxxxxxx.xx", session_id = 0x0, local_ip = {family = 0, u = {ip6 = {__in6_u = {__u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0,
                    0}}}, ip4 = {s_addr = 0}}}, remote_ip = {family = 0, u = {ip6 = {__in6_u = {__u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0}}}, ip4 = {s_addr = 0}}}, local_port = 0, remote_port = 0,
          userdb_fields = 0x0, flags_override_add = 0, flags_override_remove = 0, no_userdb_lookup = 0}
        argc = <value optimized out>
#5  client_connection_input (conn=0xe09ad0) at client-connection.c:326
        args = <value optimized out>
        _data_stack_cur_id = 3
        line = <value optimized out>
        ok = <value optimized out>
#6  0x00007f52f10e6166 in io_loop_call_io (io=0xe097e0) at ioloop.c:379
        ioloop = 0xe026a0
        t_id = 2
#7  0x00007f52f10e71ef in io_loop_handler_run (ioloop=<value optimized out>) at ioloop-epoll.c:213
        ctx = 0xe054f0
        event = 0xe05560
        list = 0xe09950
        io = 0xdfa5c8
        tv = {tv_sec = 2147483, tv_usec = 0}
        msecs = <value optimized out>
        ret = <value optimized out>
        i = 0
        call = false
#8  0x00007f52f10e6108 in io_loop_run (ioloop=0xe026a0) at ioloop.c:398
No locals.
#9  0x00007f52f10d15a3 in master_service_run (service=0xe02550, callback=0) at master-service.c:544
No locals.
#10 0x0000000000414111 in main (argc=1, argv=0xe02370) at main.c:90
        set_roots = {0x422780, 0x0}
        error = 0x0

Regards
Daniel
-- 
https://plus.google.com/103021802792276734820
-------------- next part --------------
# 2.1.16: /etc/dovecot/dovecot.conf
# OS: Linux 2.6.32-46-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 = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
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): <%{session}>: "
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 vnd.dovecot.duplicate
mdbox_rotate_interval = 1 weeks
mdbox_rotate_size = 50 M
mmap_disable = yes
namespace {
  inbox = yes
  location = 
  mailbox Archives {
    special_use = \Archive
  }
  mailbox Drafts {
    special_use = \Drafts
  }
  mailbox Junk {
    special_use = \Junk
  }
  mailbox Sent {
    special_use = \Sent
  }
  mailbox Trash {
    special_use = \Trash
  }
  prefix = 
  separator = /
  type = private
}
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
  sieve_extensions = +vnd.dovecot.duplicate
  stats_refresh = 30 secs
  stats_track_cmds = yes
}
protocols = imap pop3 lmtp sieve
service auth {
  unix_listener auth-userdb {
    group = dovecot
    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-without-quota {
    address = *
    port = 19025
  }
  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
syslog_facility = local1
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
}
-------------- next part --------------
# 2.1.16: /etc/dovecot-director/dovecot-director.conf
# OS: Linux 2.6.32-46-server x86_64 Ubuntu 10.04.4 LTS 
auth_verbose = yes
auth_verbose_passwords = sha1
base_dir = /var/run/dovecot-director
deliver_log_format = director: deliver: msgid=%m from=%f: %$
director_doveadm_port = 20000
director_mail_servers = 10.129.3.193 10.129.3.192 10.129.3.191 10.129.3.190
director_servers = 10.129.3.193 10.129.3.192 10.129.3.191 10.129.3.190
director_user_expire = 2 days
disable_plaintext_auth = no
doveadm_password = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
doveadm_proxy_port = 19000
instance_name = dovecot-director
lmtp_proxy = yes
login_greeting = Mail Balancer
login_log_format = director: 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 = "director: mail: %s(%u): <%{session}>: "
mail_max_userip_connections = 20
mail_privileged_group = vmail
mail_uid = vmail
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
mmap_disable = yes
passdb {
  args = /etc/dovecot-director/conf.d/dovecot-sql.conf.ext
  driver = sql
}
protocols = imap pop3 lmtp sieve
service auth {
  unix_listener auth-userdb {
    user = dovecot
  }
}
service director {
  fifo_listener login/proxy-notify {
    mode = 0666
  }
  inet_listener {
    port = 9090
  }
  unix_listener director-userdb {
    mode = 0600
  }
  unix_listener login/director {
    mode = 0666
  }
}
service doveadm {
  executable = doveadm-server director
  inet_listener doveadm-server {
    port = 20000
  }
}
service imap-login {
  executable = imap-login director
  inet_listener imap {
    port = 20143
  }
  inet_listener imaps {
    port = 20993
    ssl = yes
  }
}
service ipc {
  unix_listener ipc {
    user = dovecot
  }
}
service lmtp {
  inet_listener lmtp-without-quota {
    address = *
    port = 20025
  }
  inet_listener lmtp {
    address = *
    port = 20024
  }
}
service managesieve-login {
  executable = managesieve-login director
  inet_listener sieve {
    port = 20200
  }
}
service pop3-login {
  executable = pop3-login director
  inet_listener pop3 {
    port = 20110
  }
  inet_listener pop3s {
    port = 20995
    ssl = yes
  }
}
ssl_cert = </etc/certs/wildcard.net.crt
ssl_key = </etc/certs/wildcard.net.key
syslog_facility = local2
userdb {
  driver = prefetch
}
userdb {
  args = /etc/dovecot-director/conf.d/dovecot-sql.conf.ext
  driver = sql
}
verbose_proctitle = yes
protocol lmtp {
  auth_socket_path = director-userdb
}
protocol sieve {
  auth_socket_path = director-userdb
}
protocol doveadm {
  auth_socket_path = director-userdb
}
protocol imap {
  imap_client_workarounds = delay-newmail tb-extra-mailbox-sep
}


More information about the dovecot mailing list