Пытаюсь настроить квоты. Я хочу установить квоту по умолчанию (скажем, 10 ГБ) и разрешить +100 МБ для корзины. Мне также нужно установить индивидуальную квоту для пользователя. Мои пользователи приходят из LDAP / AD.
Я могу установить квоту по умолчанию и определить индивидуальную для пользователя. Это отлично работает.
Теперь я пытаюсь выделить для мусора еще 100 МБ.
Чтобы проверить это, я отправил пару писем на свою тестовую учетную запись и определил низкую квоту (10 МБ) для этой учетной записи. Я сделал свою квоту более 140%. Затем я переместил все свои письма в корзину.
У меня все еще превышена квота, потому что я не очистил корзину, но поскольку у меня есть quota_rule2, в котором говорится, что для корзины разрешено больше 100 МБ, я ожидаю, что смогу получать почту для этой учетной записи.
Когда учетная запись получает новое письмо, оно отклоняется, потому что учетная запись превышает квоту, но этого не должно быть, потому что все письма находятся в корзине, а все остальные папки пусты.
# doveconf -n
# 2.2.33.2 (d6601f4ec): /etc/dovecot/dovecot.conf
# Pigeonhole version 0.4.21 (92477967)
# OS: Linux 4.15.0-43-generic x86_64 Ubuntu 18.04.1 LTS
auth_default_realm = example.com
doveadm_password = # hidden, use -P to show it
doveadm_port = 53683
first_valid_uid = 200
last_valid_uid = 200
mail_attachment_dir = /var/vmail/attachments
mail_attachment_hash = %{sha1}.%{size}
mail_location = mbox:~/mail:INBOX=/var/mail/%u
mail_plugins = " notify replication zlib quota"
mail_privileged_group = mail
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
mdbox_rotate_interval = 1 days
namespace inbox {
inbox = yes
location =
mailbox Drafts {
special_use = \Drafts
}
mailbox Junk {
special_use = \Junk
}
mailbox Sent {
special_use = \Sent
}
mailbox "Sent Messages" {
special_use = \Sent
}
mailbox Trash {
special_use = \Trash
}
prefix =
}
passdb {
args = /etc/dovecot/dovecot-ldap.conf.ext
driver = ldap
}
plugin {
mail_replica = tcp:mail2.example.com:53683
quota = count:User quota
quota_grace = 10%%
quota_rule = *:storage=10G
quota_rule2 = Trash:storage=+100M
quota_vsizes = yes
quota_warning = storage=95%% quota-warning 95 %u
quota_warning2 = storage=80%% quota-warning 80 %u
sieve = /var/vmail/%d/%n/.dovecot.sieve
sieve_before = /var/vmail/sieve/before.sieve
sieve_default = /var/vmail/sieve/default.sieve
sieve_global = /var/vmail/sieve/global
zlib_save = lz4
}
protocols = " imap lmtp sieve"
service aggregator {
fifo_listener replication-notify-fifo {
user = vmail
}
unix_listener replication-notify {
user = vmail
}
}
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0666
}
}
service doveadm {
inet_listener {
port = 53683
ssl = no
}
}
service imap-login {
inet_listener imap {
port = 0
}
process_min_avail = 10
}
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
group = postfix
mode = 0660
user = postfix
}
}
service quota-warning {
executable = script /usr/local/bin/quota-warning.sh
unix_listener quota-warning {
user = vmail
}
user = dovecot
}
service replicator {
process_min_avail = 1
}
ssl = required
ssl_cert = </etc/ssl/example.com.crtbundle
ssl_client_ca_dir = /etc/ssl/certs
ssl_key = # hidden, use -P to show it
userdb {
args = /etc/dovecot/dovecot-ldap.conf.ext
driver = ldap
}
protocol lda {
mail_plugins = " notify replication zlib quota sieve"
postmaster_address = postmaster@example.com
}
protocol imap {
mail_plugins = " notify replication zlib quota imap_quota"
}
protocol lmtp {
mail_plugins = " notify replication zlib quota sieve"
postmaster_address = postmaster@example.com
}
# cat dovecot-ldap.conf.ext
uris = (redacted)
dn = (redacted)
dnpass = (redacted)
auth_bind = yes
base = (redacted)
scope = subtree
deref = never
user_filter = (&(mail=%u)(&(|(objectclass=person))(!(UserAccountControl:1.2.840.113556.1.4.803:=2))))
pass_filter = (&(mail=%u)(&(|(objectclass=person))(!(UserAccountControl:1.2.840.113556.1.4.803:=2))))
iterate_attrs = mail=user # Used primarily by "doveadm" needed to users
iterate_filter = (objectclass=person)
user_attrs = \
=quota_rule=*:storage=%{ldap:division:10G}, \
=quota_rule2=Trash:storage=+100M, \
=home=/var/vmail/%d/%{ldap:sAMAccountName}, \
=mail=mdbox:/var/vmail/%d/%{ldap:sAMAccountName}/mdbox, \
=uid=200, \
=gid=200