Hi!
Can you provide dovecot version? Also output of mail_debug=yes logs would be useful
Aki
On 19.09.2018 00:19, Ted wrote:
Hello,
I'm trying to implement quota enforcement in our mailservers, and it is all working properly except that the quota warnings are not firing when the quota levels are passed. the server stops accepting email when the quota is reached, and you can see tyhe quota usage through the email client connected through, but as the quota passes the set levels the /usr/local/bin/quota-warning.sh script is not called. I checked from the appropriate user and the script executes from the command line with no problem, but dovecot does not invoke it when the quota levels are crossed. The relevant configs are below, any ideas about what the problem may be or how I should approach this?
/etc/dovecot/dovecot.conf
## Dovecot configuration file
# Protocols we want to be serving. protocols = imap pop3 lmtp sieve
mailbox_list_index = yes # Avoid spending excessive time waiting for the quota calculation to finish when # mails' vsizes aren't already cached. If this many mails are opened, finish the # quota calculation on background in indexer-worker process. Mail deliveries will # be assumed to succeed, and explicit quota lookups will return internal error. # (v2.2.28+) # mail_vsize_bg_after_count = 100
plugin { quota_grace = 10%% # 10% is the default # quota_status_success = DUNNO # quota_status_nouser = DUNNO quota_status_overquota = "552 5.2.2 Mailbox is full" quota_vsizes = yes }
service quota-status { executable = quota-status -p postfix inet_listener { port = 10070 # You can choose any port you want } client_limit = 1 }
mail_plugins = $mail_plugins quota mail_log notify
protocol imap { # Space separated list of plugins to load (default is global mail_plugins). mail_plugins = $mail_plugins imap_quota }
# Greeting message for clients. login_greeting = Welcome to easyMail.
# Show more verbose process titles (in ps). Currently shows user name and # IP address. Useful for seeing who are actually using the IMAP processes # (eg. shared mailboxes or if same uid is used for multiple accounts). verbose_proctitle = yes
# Should all processes be killed when Dovecot master process shuts down. # Setting this to "no" means that Dovecot can be upgraded without # forcing existing client connections to close (although that could also be # a problem if the upgrade is e.g. because of a security fix). shutdown_clients = yes
# A config file can also tried to be included without giving an error if # it's not found: !include_try local.conf
service auth { unix_listener auth-master { mode = 0600 user = vmail } }
/etc/dovecot/dovecot-sql.conf.ext
# Database driver: mysql, pgsql, sqlite driver = mysql
connect = host=redacted dbname=redacted user=redacted password=reallyredacted
# Default password scheme. # # List of supported schemes is in # http://wiki2.dovecot.org/Authentication/PasswordSchemes # default_pass_scheme = CRYPT
password_query = select email as user, crypt_password as password, CONCAT('/',volume,'/',SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1)) AS home, 5000 AS uid, 5000 AS gid, concat('*:storage=', volume_limit ,'G') AS quota_rule from easymail_users where email = '%u' and banned = '0' and active = '1'
user_query = SELECT CONCAT('maildir:/',volume,'/',SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/Maildir') AS mail, CONCAT('/',volume,'/',SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1)) AS home, 5000 AS uid, 5000 AS gid, concat('*:storage=', volume_limit ,'G') AS quota_rule from easymail_users where email = '%u' and banned = '0' and active = '1'
/etc/dovecot/conf.d/90-quota.conf
## ## Quota configuration. ##
## ## Quota warnings ##
# You can execute a given command when user exceeds a specified quota limit. # Each quota root has separate limits. Only the command for the first # exceeded limit is excecuted, so put the highest limit first. # The commands are executed via script service by connecting to the named # UNIX socket (quota-warning below). # Note that % needs to be escaped as %%, otherwise "% " expands to empty.
plugin { quota_warning = storage=95%% quota-warning 95 %u quota_warning2 = storage=90%% quota-warning 90 %u quota_warning3 = storage=80%% quota-warning 80 %u }
# Example quota-warning service. The unix listener's permissions should be # set in a way that mail processes can connect to it. Below example assumes # that mail processes run as vmail user. If you use mode=0666, all system users # can generate quota warnings to anyone. service quota-warning { executable = script /usr/local/bin/quota-warning.sh user = dovecot unix_listener quota-warning { user = dovecot mode = 0666 } }
## ## Quota backends ##
# Multiple backends are supported: # dirsize: Find and sum all the files found from mail directory. # Extremely SLOW with Maildir. It'll eat your CPU and disk I/O. # dict: Keep quota stored in dictionary (eg. SQL) # maildir: Maildir++ quota # fs: Read-only support for filesystem quota
plugin { #quota = dirsize:User quota #quota = maildir:User quota #quota = dict:User quota::proxy::quota quota = count:User quota #quota = fs:User quota }
/usr/local/bin/quota-warning.sh
#!/bin/sh # warning email for approaching their quota
usage=$1 email=$2
/usr/bin/mailx -r "support@easydns.com" -s "Quota Usager Notification" "${email:?}" < /home/vmail/quota"${usage:?}".txt
echo "$(date) ${usage} : ${email}" >> /var/log/quotatest.log
Thank you Ted easyDNS Technologies