Niccolo Rigacci
2021-Feb-23  11:36 UTC
Problem with fs:User quota: Postfix quota-status returns always DUNNO
I installed a mail server on a Debian GNU/Linux 10 Buster, which 
provide Dovecot 2.3.4.1.
It works almost everything, but I'm unable to make the Postfix 
quota service to work as expected.
First of all I verify that the Dovecot idea of quota is OK:
  doveadm quota get -u username at example.org
  Quota name Type    Value Limit   %
  User quota STORAGE  2752  3500  78
Then I ask the Postfix quota-status service:
  printf "recipient=username at example.org\nsize=3000000\n\n" \
    | nc localhost 12340
  action=DUNNO
But a size of 3 Mb should trigger the "action=554 5.2.2 Quota 
exceeded" message.
I find a workaround for this problem: just adding the following 
section will "fix" the problem:
  plugin {
    quota_over_flag_value = FALSE
    quota_over_script = quota-warning mismatch %u
  }
How the quota_over_flag_value is related to the quota over 
filesystem?
Why should I add both the quota_over_flag_value AND the 
quota_over_script options?
The script is executed always for each SMTP check (regardless of 
the quota_over_flag_value is FALSE or TRUE), obviously I provided 
a "do nothing" quota-warning script.
Here the relevant parts of "dovecot -n" output:
plugin {
  quota = fs:User quota:user
  quota_grace = 5%%
  quota_over_flag_value = FALSE
  quota_over_script = quota-warning mismatch %u
  quota_status_nouser = DUNNO
  quota_status_overquota = 554 5.2.2 Quota exceeded
  quota_status_success = DUNNO
  quota_warning = storage=90%% quota-warning 90 %u
  quota_warning2 = storage=80%% quota-warning 80 %u
  sieve = file:~/sieve;active=~/.dovecot.sieve
  sieve_before = ~/sieve_before.d/
  sieve_extensions = +vnd.dovecot.filter
  sieve_filter_bin_dir = /usr/local/lib/dovecot/sieve-filter
  sieve_filter_socket_dir = sieve-filter
  sieve_plugins = sieve_extprograms
}
service quota-status {
  client_limit = 1
  executable = quota-status -p postfix
  inet_listener {
    port = 12340
  }
}
service quota-warning {
  executable = script /usr/local/bin/quota-warning.sh
  unix_listener quota-warning {
    group = dovecot
    mode = 0666
    user = dovecot
  }
  user = root
}
-- 
Niccolo Rigacci - http://www.rigacci.net/
Firenze/Prato - Italy
Tel. Mobile: +39-327-5619352