[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