quota-status returns quota_status_success when email would put user over quota

Aki Tuomi aki.tuomi at dovecot.fi
Wed Feb 1 07:34:59 UTC 2017


Steps to setup quota with status:

mail_plugins = $mail_plugins quota

protocol imap {
   mail_plugins = $mail_plugins imap_quota
}

service quota-status {
    executable = quota-status -p postfix
    inet_listener {
        port = 12340 # You can choose any port you want
    }
    client_limit = 1
}

plugin {
  quota = count:User quota # or some other backend
  quota_rule = *:storage=10M # or from userdb
  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
}


On 01.02.2017 00:20, Christian Kivalo wrote:
>
> Am 31. Jänner 2017 16:36:35 MEZ schrieb Kristian Pedersen <kp at asom-net.dk>:
>> Hi list,
>>
>> We still did not manage to get quota-status working.
>> We're hoping someone can provide some feedback/ideas on how we may 
>> investigate this issue further?
>> Is it likely to be a bug fixed in a newer version?
>>
>> Regards,
>>
>> Kristian
>>
>>
> [...]
>
>>> Quota-status will return unknown user if that is the case:
>>> root at mail:~# printf 
>>> "recipient=kptest2 at asom-net.dk\nsize=1000000000\n\n" | nc -q1 
>>> localhost 12340
>>> action=551 5.5.1 User not found
>>>
> Tried this and works here. Doveconf -n output with regards to quota settings is very similar, i use a quota dict, not maildir, spotted one difference i commented in your doveconf -n and i'm using version 2.2.27 from source
> ...
>>> dovecot -n:
>>> # 2.2.13: /etc/dovecot/dovecot.conf
>>> # OS: Linux 3.16.0-4-amd64 x86_64 Debian 8.6 ext4
>>> auth_default_realm = vejen-net.dk
>>> auth_mechanisms = plain login
>>> auth_verbose = yes
>>> disable_plaintext_auth = no
>>> first_valid_uid = 110
>>> log_timestamp = "%Y-%m-%d %H:%M:%S "
>>> mail_debug = yes
>>> mail_location = maildir:/data/vmail/%d/%n/
> The one line i'm missing here from your doveconf -n output is mail_plugins = " quota" set in conf.d/10-mail.conf
>
> Have you added quota to the global mail plugins setting? http://wiki2.dovecot.org/Quota
>
>>> mail_privileged_group = mail
>>> 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/local-sql.conf
>>>   driver = sql
>>> }
>>> plugin {
>>>   quota = maildir:User quota
>>>   quota_rule = *:storage=200M
>>>   quota_status_nouser = 551 5.5.1 User not found
>>>   quota_status_overquota = 552 5.2.2 Mailbox is full
>>>   quota_status_success = DUNNO
>>> }
>>> protocols = imap pop3
>>> service auth {
>>>   unix_listener /var/spool/postfix/private/auth {
>>>     group = postfix
>>>     mode = 0660
>>>     user = postfix
>>>   }
>>>   unix_listener auth-master {
>>>     mode = 0600
>>>     user = vmail
>>>   }
>>>   user = root
>>> }
>>> service imap-login {
>>>   client_limit = 1024
>>>   process_limit = 256
>>>   process_min_avail = 8
>>>   service_count = 0
>>>   vsz_limit = 512 M
>>> }
>>> service imap {
>>>   process_limit = 10240
>>> }
>>> service pop3-login {
>>>   client_limit = 512
>>>   process_limit = 256
>>>   process_min_avail = 8
>>>   service_count = 0
>>>   vsz_limit = 512 M
>>> }
>>> service pop3 {
>>>   process_limit = 10240
>>> }
>>> service quota-status {
>>>   client_limit = 1
>>>   executable = /usr/lib/dovecot/quota-status -p postfix
>>>   inet_listener {
>>>     port = 12340
>>>   }
>>> }
>>> ssl_cert = </etc/letsencrypt/live/mail.asom-net.dk/fullchain.pem
>>> ssl_key = </etc/letsencrypt/live/mail.asom-net.dk/privkey.pem
>>> ssl_prefer_server_ciphers = yes
>>> userdb {
>>>   args = /etc/dovecot/local-sql.conf
>>>   driver = sql
>>> }
>>> protocol lda {
>>>   auth_socket_path = /var/run/dovecot/auth-master
>>>   mail_plugins = quota
>>>   postmaster_address = postmaster at asom-net.dk
>>> }
>>> protocol imap {
>>>   mail_plugins = quota imap_quota
>>> }
>>> protocol pop3 {
>>>   mail_plugins = quota
>>>   pop3_uidl_format = %08Xu%08Xv
>>> }
>>>
>>>
>>> local-sql.conf:
>>> driver = mysql
>>> connect = host=xyz dbname=xyz user=xyz password=xyz
>>> default_pass_scheme = CRYPT
>>> password_query = SELECT email as user, password FROM virtual_users 
>>> WHERE email='%u';
>>> user_query = SELECT 
>>>
>> CONCAT('/data/vmail/',CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1)))
>>
>>> AS home, 110 AS uid, 110 AS gid, CONCAT('*:storage=',mailquota,'M')
>> AS 
>>> quota_rule FROM virtual_users WHERE email='%u';
>>>
>>> If I do a strace on the quota-status PID, it seems to do a stat on
>> the 
>>> directory and then give up? Not sure Im interpreting it correct (only
>>> including the last few lines):
>>> ...
>>> lseek(14, 833, SEEK_SET)                = 833
>>> munmap(0x7f165d32a000, 833)             = 0
>>> close(14)                               = 0
>>> geteuid()                               = 0
>>> getegid()                               = 110
>>> getgid()                                = 110
>>> getegid()                               = 110
>>> setgroups(1, [110])                     = 0
>>> setresuid(-1, 110, -1)                  = 0
>>> prctl(PR_SET_DUMPABLE, 1)               = 0
>>> stat("/data/vmail/asom-net.dk/kptest", {st_mode=S_IFDIR|0700, 
>>> st_size=4096, ...}) = 0
>>> prctl(PR_SET_DUMPABLE, 1)               = 0
>>> setsockopt(12, SOL_TCP, TCP_CORK, [1], 4) = 0
>>> write(12, "action=DUNNO\n\n", 14)       = 14
>>> setsockopt(12, SOL_TCP, TCP_CORK, [0], 4) = 0
>>> epoll_wait(11, {{EPOLLIN, {u32=1593554016, u64=139734059562080}}}, 5,
>>> 59999) = 1
>>> read(12, "", 8146)                      = 0
>>> epoll_ctl(11, EPOLL_CTL_DEL, 12, 7fff0be817a0) = 0
>>> close(12)                               = 0
>>> epoll_wait(11, {}, 5, 1000)             = 0
>>> write(5, "\35q\1\0007\10\0\0\1\0\0\0", 12) = 12
>>> epoll_wait(11,
>>> ...
>>>
>>> It seems like sort of permission issue?
>>> root at mail:~# su - vmail
>>> No directory, logging in with HOME=/
>>> $ id -a
>>> uid=110(vmail) gid=110(vmail) groups=110(vmail)
>>> $ cat /data/vmail/asom-net.dk/kptest/maildirsize
>>> 524288000S
>>> 685 1
>>> 690 1
>>>
>>> /data/vmail/asom-net.dk is actually a symlink, maybe that could be of
>>> importance?:
>>> root at mail:~# ls -ld /data/vmail/asom-net.dk
>>> lrwxrwxrwx 1 root root 19 Jan  9 11:18 /data/vmail/asom-net.dk -> 
>>> ../mnt1/asom-net.dk
>>>
>>> root at mail:~# ls -ld /data/mnt1/asom-net.dk/
>>> drwxrwx--- 45 vmail vmail 4096 Dec 15 10:54 /data/mnt1/asom-net.dk/
>>>
>>> root at mail:~# ls -ld /data/mnt1/asom-net.dk/kptest/
>>> drwx------ 9 vmail vmail 4096 Jan 23 08:55
>> /data/mnt1/asom-net.dk/kptest/
>>> root at mail:~# ls -ld /data/mnt1/asom-net.dk/kptest/maildirsize
>>> -rw------- 1 vmail vmail 23 Jan 12 16:50 
>>> /data/mnt1/asom-net.dk/kptest/maildirsize
>>>
>>> Anyone have any idea what might be wrong here?
>>>
>>> Regards,
>>>




More information about the dovecot mailing list