[BUG] dovecot 2.3.0 - service(lmtp) killed with signal 11 when user is overquota

Marco Giunta giunta at sissa.it
Wed Jan 17 15:22:44 EET 2018


Hi,
I'm using dovecot 2.3.0 installed on a new CentOS 7.4 with rpm from 
Dovecot repo. When I use LMTP to deliver an email to an overquota user, 
lmtp service hangs with a segfault:

Jan 17 13:39:45 server-02.example.com kernel: lmtp[5099]: segfault at 0 
ip 0000563599e372c2 sp 00007ffeaa4fdc80 error 4 in lmtp[563599e31000+b000]
Jan 17 13:39:45 server-02.example.com dovecot[5089]: lmtp(5099): Fatal: 
master: service(lmtp): child 5099 killed with signal 11 (core dumped)

If I try to deliver a mail with 'dovecot-lda' on the same overquota 
user, email was rejected, as expected:

Jan 17 13:38:26 server-02.example.com dovecot[6773]: 
lda(USERNAME)<6773><ZbQDO8FDX1p1GgAASpDaHg>: Debug: Mailbox stdin: 
Opened mail UID=1 because: copying
Jan 17 13:38:26 server-02.example.com dovecot[6773]: 
lda(USERNAME)<6773><ZbQDO8FDX1p1GgAASpDaHg>: msgid=unspecified: save 
failed to INBOX: Quota exceeded (mailbox for user is full)
Jan 17 13:38:26 server-02.example.com dovecot[6773]: 
lda(USERNAME)<6773><ZbQDO8FDX1p1GgAASpDaHg>: msgid=unspecified: 
rejected: Quota exceeded (mailbox for user is full)
Jan 17 13:38:26 server-02.example.com dovecot[6773]: 
lda(USERNAME)<6773><ZbQDO8FDX1p1GgAASpDaHg>: msgid=: Return-Path 
missing, rejection reason: Quota exceeded (mailbox for user is full)

If user is no more overquota, LTMP delivery works:

Jan 17 14:13:16 server-02.example.com dovecot[8651]: 
lmtp(USERNAME at example.com)<8665><ZMKmEexLX1rZIQAASpDaHg>: Debug: Mailbox 
<lmtp DATA local>: Opened mail UID=1 because: copying
Jan 17 14:13:16 server-02.example.com dovecot[8651]: 
lmtp(USERNAME at example.com)<8665><ZMKmEexLX1rZIQAASpDaHg>: Debug: INBOX: 
Mailbox opened because: quota count
Jan 17 14:13:16 server-02.example.com dovecot[8651]: 
lmtp(USERNAME at example.com)<8665><ZMKmEexLX1rZIQAASpDaHg>: sieve: 
msgid=<151619479629.10128.16766154794856971096 at client.example.com>: 
stored mail into mailbox 'INBOX'

Attached my dovecot configuration and a backtrace from gdb.

Thanks,
   Marco



-- 

-------------- next part --------------
#0  lmtp_local_rcpt_reply_overquota (rcpt=rcpt at entry=0x55ee1015b400, error=0x55ee101835c0 "Quota exceeded (mailbox for user is full)") at lmtp-local.c:136
        address = <optimized out>
        lda_set = <optimized out>
#1  0x000055ee0dff5652 in lmtp_local_rcpt_check_quota (rcpt=0x55ee1015b400) at lmtp-local.c:231
        box = 0x55ee10176ef8
        status = {messages = 0, recent = 0, unseen = 0, uidvalidity = 0, uidnext = 0, first_unseen_seq = 0, first_recent_uid = 0, last_cached_seq = 0, highest_modseq = 0, 
          highest_pvt_modseq = 0, keywords = 0x0, permanent_flags = 0, flags = 0, permanent_keywords = false, allow_new_keywords = false, nonpermanent_modseqs = false, 
          no_modseq_tracking = false, have_guids = true, have_save_guids = true, have_only_guid128 = false}
        mail_error = MAIL_ERROR_NOQUOTA
        ret = <optimized out>
        client = <optimized out>
        address = 0x55ee10150770
        user = 0x55ee101613e8
        ns = <optimized out>
        error = 0x55ee101835c0 "Quota exceeded (mailbox for user is full)"
#2  lmtp_local_rcpt_anvil_finish (rcpt=rcpt at entry=0x55ee1015b400) at lmtp-local.c:287
        cmd = 0x55ee10150638
#3  0x000055ee0dff5bf8 in lmtp_local_rcpt (client=client at entry=0x55ee10135aa8, cmd=cmd at entry=0x55ee10150638, data=data at entry=0x55ee10150728, username=<optimized out>, 
    detail=0x7f6aa397e4c8 "") at lmtp-local.c:400
        conn = <optimized out>
        address = 0x55ee10150770
        trans = <optimized out>
        rcpt = 0x55ee1015b400
        input = {parent_event = 0x0, module = 0x55ee0dff7dc3 "lmtp", service = 0x55ee0dff7dc3 "lmtp", username = 0x55ee100f4210 "USERNAME at example.com", 
          session_id = 0x55ee10150af0 "pWtqHtE7X1rqEwAASpDaHg", session_id_prefix = 0x0, session_create_time = 0, local_ip = {family = 2, u = {ip6 = {__in6_u = {
                  __u6_addr8 = "\223z\v\205", '\000' <repeats 11 times>, __u6_addr16 = {31379, 34059, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {2232122003, 0, 0, 0}}}, ip4 = {
                s_addr = 2232122003}}}, remote_ip = {family = 2, u = {ip6 = {__in6_u = {__u6_addr8 = "\223z\030.", '\000' <repeats 11 times>, __u6_addr16 = {31379, 11800, 
                    0, 0, 0, 0, 0, 0}, __u6_addr32 = {773356179, 0, 0, 0}}}, ip4 = {s_addr = 773356179}}}, local_port = 24, remote_port = 47292, userdb_fields = 0x0, 
Missing separate debuginfos, use: debuginfo-install cyrus-sasl-lib-2.1.26-21.el7.x86_64 dovecot-pigeonhole-2.3.0-4.x86_64 glibc-2.17-196.el7_4.2.x86_64 keyutils-libs-1.5.8-3.el7.x86_64 krb5-libs-1.15.1-8.el7.x86_64 libcom_err-1.42.9-10.el7.x86_64 libselinux-2.5-11.el7.x86_64 nspr-4.13.1-1.0.el7_3.x86_64 nss-3.28.4-15.el7_4.x86_64 nss-softokn-freebl-3.28.3-8.el7_4.x86_64 nss-util-3.28.4-3.el7.x86_64 openldap-2.4.44-5.el7.x86_64 openssl-libs-1.0.2k-8.el7.x86_64 pcre-8.32-17.el7.x86_64 zlib-1.2.7-17.el7.x86_64
          flags_override_add = (unknown: 0), flags_override_remove = (unknown: 0), no_userdb_lookup = false, debug = false, conn_secured = true, conn_ssl_secured = false}
        service_user = 0x55ee10150dc8
        session_id = 0x55ee10150af0 "pWtqHtE7X1rqEwAASpDaHg"
        error = 0x0
        ret = <optimized out>
        __func__ = "lmtp_local_rcpt"
#4  0x000055ee0dff4eb9 in cmd_rcpt (conn_ctx=0x55ee10135aa8, cmd=0x55ee10150638, data=0x55ee10150728) at commands.c:66
        client = 0x55ee10135aa8
        username = 0x55ee100f4210 "USERNAME at example.com"
        detail = 0x7f6aa397e4c8 ""
        delim = 0 '\000'
        ret = <optimized out>
#5  0x00007f6aa38b0baf in smtp_server_cmd_rcpt (cmd=0x55ee10150638, params=0x55ee1010eba5 "") at smtp-server-cmd-rcpt.c:181
        conn = 0x55ee1014be50
        set = 0x55ee1014bf10
        caps = (SMTP_CAPABILITY_STARTTLS | SMTP_CAPABILITY_PIPELINING | SMTP_CAPABILITY_ENHANCEDSTATUSCODES | SMTP_CAPABILITY_8BITMIME | SMTP_CAPABILITY_CHUNKING)
        callbacks = 0x55ee0e1f9720 <lmtp_callbacks>
        command = 0x55ee10150638
        rcpt_data = 0x55ee10150728
        path = 0x55ee100f41c8
        pperror = SMTP_PARAM_PARSE_ERROR_BAD_SYNTAX
        error = 0x0
        ret = <optimized out>
        __func__ = "smtp_server_cmd_rcpt"
#6  0x00007f6aa38b4cc9 in smtp_server_command_new (conn=0x55ee1014be50, name=name at entry=0x55ee1010eb70 "RCPT", params=params at entry=0x55ee1010eb90 "TO:<USERNAME at example.com>")
    at smtp-server-command.c:235
        tmp_cmd = 0x55ee10150638
        server = 0x55ee1010e768
        cmd = 0x55ee10150638
        __func__ = "smtp_server_command_new"
#7  0x00007f6aa38b6fbf in smtp_server_connection_handle_command (cmd_params=0x55ee1010eb90 "TO:<USERNAME at example.com>", cmd_name=0x55ee1010eb70 "RCPT", conn=0x55ee1014be50)
    at smtp-server-connection.c:341
        tmp_conn = 0x55ee1014be50
        cmd = <optimized out>
#8  smtp_server_connection_handle_input (conn=0x55ee1014be50) at smtp-server-connection.c:436
        pending_command = 0x0
        error_code = SMTP_COMMAND_PARSE_ERROR_NONE
        cmd_name = 0x55ee1010eb70 "RCPT"
        ret = 1
        cmd_params = 0x55ee1010eb90 "TO:<USERNAME at example.com>"
        error = 0x0
#9  smtp_server_connection_input (_conn=<optimized out>) at smtp-server-connection.c:579
        conn = 0x55ee1014be50
        __func__ = "smtp_server_connection_input"
#10 0x00007f6aa39432b5 in io_loop_call_io (io=0x55ee10109780) at ioloop.c:614
        ioloop = 0x55ee100fcc80
        t_id = 2
        __func__ = "io_loop_call_io"
#11 0x00007f6aa3944b5f in io_loop_handler_run_internal (ioloop=ioloop at entry=0x55ee100fcc80) at ioloop-epoll.c:222
        ctx = 0x55ee101031c0
        events = <optimized out>
        list = 0x55ee10135100
        io = <optimized out>
        tv = {tv_sec = 299, tv_usec = 999674}
        events_count = <optimized out>
        msecs = <optimized out>
        ret = 1
        i = 0
        call = <optimized out>
        __func__ = "io_loop_handler_run_internal"
#12 0x00007f6aa39433b2 in io_loop_handler_run (ioloop=ioloop at entry=0x55ee100fcc80) at ioloop.c:666
        __func__ = "io_loop_handler_run"
#13 0x00007f6aa39435d8 in io_loop_run (ioloop=0x55ee100fcc80) at ioloop.c:639
        __func__ = "io_loop_run"
#14 0x00007f6aa38c1b23 in master_service_run (service=0x55ee100fcb10, callback=callback at entry=0x55ee0dff43d0 <client_connected>) at master-service.c:767
No locals.
#15 0x000055ee0dff41a6 in main (argc=1, argv=0x55ee100fc890) at main.c:159
        set_roots = {0x7f6aa3bcbfc0 <smtp_submit_setting_parser_info>, 0x7f6aa412cba0 <lda_setting_parser_info>, 0x55ee0e1f9560 <lmtp_setting_parser_info>, 0x0}
        service_flags = <optimized out>
        storage_service_flags = <optimized out>
        tmp_base_dir = 0x55ee100f4040 "\003"
        c = <optimized out>
        error = 0x0
-------------- next part --------------
# 2.3.0 (c8b89eb): /etc/dovecot/dovecot.conf
# Pigeonhole version 0.5.0.1 (d33dca2)
# OS: Linux 3.10.0-693.11.6.el7.x86_64 x86_64 CentOS Linux release 7.4.1708 (Core)  
auth_master_user_separator = *
auth_mechanisms = plain login
auth_verbose = yes
auth_verbose_passwords = sha1:6
doveadm_password =  # hidden, use -P to show it
doveadm_port = 26001
first_valid_uid = 200
imap_client_workarounds = delay-newmail
listen = *
lmtp_hdr_delivery_address = original
lmtp_rcpt_check_quota = yes
login_trusted_networks = 10.10.1.172/30 10.10.1.212/30 10.10.24.0/23
mail_debug = yes
mail_gid = vmail
mail_home = /srv/mail/%1n/%n
mail_location = mdbox:~/dbox:ALT=/srv/archives/%1n/%n/dbox:INDEX=/srv/indexes/%1n/%n:VOLATILEDIR=/var/tmp/dovecot-volatile/%1n/%n
mail_plugins = acl mailbox_alias quota
mail_server_admin = mailto:postmaster at example.com
mail_shared_explicit_inbox = yes
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 index ihave duplicate mime foreverypart extracttext vacation-seconds spamtest spamtestplus editheader imapflags notify
mbox_write_locks = fcntl
mmap_disable = yes
namespace inbox {
  inbox = yes
  location = 
  mailbox Archives {
    auto = subscribe
    special_use = \Archive
  }
  mailbox Drafts {
    auto = subscribe
    special_use = \Drafts
  }
  mailbox Junk {
    auto = subscribe
    special_use = \Junk
  }
  mailbox Sent {
    auto = subscribe
    special_use = \Sent
  }
  mailbox Trash {
    auto = subscribe
    special_use = \Trash
  }
  prefix = 
  separator = /
}
namespace others {
  list = children
  location = mdbox:%%h/dbox:ALT=/srv/archives/%%1n/%%n/dbox:INDEX=/srv/indexes/%%1n/%%n:INDEXPVT=/srv/indexes/%1n/%n/shared/%%n:VOLATILEDIR=/var/tmp/dovecot-volatile/%1n/%n/shared/%%n
  prefix = Other Users/%%n/
  separator = /
  subscriptions = no
  type = shared
}
passdb {
  args = /etc/dovecot/passwd.masterusers
  default_fields = userdb_master_user=%{login_user}
  driver = passwd-file
  master = yes
  pass = yes
}
passdb {
  args = /etc/dovecot/dovecot-ldap.conf.masterusers.acl
  default_fields = userdb_acl_defaults_from_inbox=yes userdb_mail=mdbox:/srv/mail/%1{login_user}/%{login_user}/dbox:ALT=/srv/archives/%1{login_user}/%{login_user}/dbox:INDEX=/srv/indexes/%1{login_user}/%{login_user}:INDEXPVT=/srv/indexes/%1n/%n/master/%{login_user}:VOLATILEDIR=/var/tmp/dovecot-volatile/%1n/%n/master/%{login_user}
  driver = ldap
  master = yes
  pass = yes
}
passdb {
  args = /etc/dovecot/dovecot-ldap.conf.masterusers.noacl
  default_fields = userdb_master_user=%{login_user} userdb_mail=mdbox:/srv/mail/%1{login_user}/%{login_user}/dbox:ALT=/srv/archives/%1{login_user}/%{login_user}/dbox:INDEX=/srv/indexes/%1{login_user}/%{login_user}:INDEXPVT=/srv/indexes/%1n/%n/master/%{login_user}:VOLATILEDIR=/var/tmp/dovecot-volatile/%1n/%n/master/%{login_user}
  driver = ldap
  master = yes
  pass = yes
}
passdb {
  args = /etc/dovecot/dovecot-ldap.conf.ext
  driver = ldap
}
plugin {
  acl = vfile:/etc/dovecot/global-acls:cache_secs=300
  acl_shared_dict = file:/srv/shared/shared-mailboxes.dict
  fts = solr
  fts_autoindex = yes
  fts_autoindex_max_recent_msgs = 20
  fts_solr = url=http://solr.localdomain:8080/solr/
  last_login_dict = fs:posix:prefix=~/
  last_login_key = lastlogin
  mail_log_events = delete undelete expunge copy mailbox_delete mailbox_rename
  mail_log_fields = uid box msgid from
  mailbox_alias_new = INBOX_spam
  mailbox_alias_new2 = Junk E-mail
  mailbox_alias_new3 = Posta indesiderata
  mailbox_alias_new4 = Deleted Messages
  mailbox_alias_new5 = Posta eliminata
  mailbox_alias_new6 = Sent Messages
  mailbox_alias_new7 = Posta inviata
  mailbox_alias_old = Junk
  mailbox_alias_old2 = Junk
  mailbox_alias_old3 = Junk
  mailbox_alias_old4 = Trash
  mailbox_alias_old5 = Trash
  mailbox_alias_old6 = Sent
  mailbox_alias_old7 = Sent
  quota = count:User quota
  quota_max_mail_size = 25M
  quota_rule = *:storage=581M
  quota_status_nouser = DUNNO
  quota_status_overquota = 552 5.2.2 Quota exceeded (mailbox for user is full)
  quota_status_success = DUNNO
  quota_vsizes = yes
  quota_warning = storage=100%% quota-warning 100 %n
  quota_warning2 = storage=95%% quota-warning 95 %n
  quota_warning3 = storage=90%% quota-warning 90 %n
  quota_warning4 = storage=80%% quota-warning 80 %n
  sieve = file:~/sieve;active=~/.dovecot.sieve
  sieve_before = /etc/dovecot/sieve/SPAMsa.sieve
  sieve_default = /etc/dovecot/sieve/dovecot.sieve
  sieve_editheader_forbid_add = X-SPAMSA-Spam-Score
  sieve_editheader_forbid_delete = X-SPAMSA-Spam-Score
  sieve_extensions = +notify +imapflags +vacation-seconds +spamtest +spamtestplus +editheader
  sieve_max_redirects = 16
  sieve_spamtest_max_value = 10
  sieve_spamtest_status_header = X-SPAMSA-Spam-Score
  sieve_spamtest_status_type = score
  sieve_vacation_min_period = 0s
}
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
protocols = imap pop3 lmtp sieve
service auth {
  inet_listener {
    port = 49494
  }
  unix_listener auth-userdb {
    user = vmail
  }
}
service dict {
  unix_listener dict {
    mode = 0660
    user = vmail
  }
}
service doveadm {
  inet_listener {
    port = 12345
  }
}
service imap-login {
  process_min_avail = 4
  service_count = 0
}
service imap {
  process_limit = 2048
}
service lmtp {
  inet_listener lmtp {
    port = 24
  }
  process_limit = 25
  process_min_avail = 10
  user = vmail
}
service managesieve-login {
  inet_listener sieve {
    port = 4190
  }
  inet_listener sieve_deprecated {
    port = 2000
  }
  process_min_avail = 4
  service_count = 0
  vsz_limit = 256 M
}
service quota-status {
  client_limit = 1
  executable = /usr/libexec/dovecot/quota-status -p postfix
  inet_listener {
    port = 25001
  }
}
service quota-warning {
  executable = script /srv/shared/bin/dovecot-quota-warning.sh
  unix_listener quota-warning {
    user = vmail
  }
  user = vmail
}
service quota2-warning {
  executable = script /srv/shared/bin/dovecot-quota2-warning.sh
  unix_listener quota2-warning {
    user = vmail
  }
  user = vmail
}
ssl = required
ssl_cert = </etc/pki/dovecot/certs/server-02-crt.pem
ssl_client_ca_file = /etc/pki/tls/cert.pem
ssl_dh =  # hidden, use -P to show it
ssl_key =  # hidden, use -P to show it
syslog_facility = local2
userdb {
  driver = prefetch
}
userdb {
  args = /etc/dovecot/dovecot-ldap.conf.ext
  driver = ldap
}
protocol lmtp {
  mail_plugins = acl mailbox_alias quota sieve
  postmaster_address = postmaster at example.com
}
protocol quota-status {
  auth_master_user_separator = 
}
protocol imap {
  mail_max_userip_connections = 50
  mail_plugins = acl mailbox_alias quota imap_quota imap_acl last_login mail_log notify
}
protocol sieve {
  mail_max_userip_connections = 50
}
protocol pop3 {
  mail_max_userip_connections = 50



More information about the dovecot mailing list