Today I've tried to configure multiple filesystem quotas, with some strange results.
These are my two filesystems; both using quotas:
/dev/mail mounted to /var/spool/mail using AIX quotas for all users. Mailbox format is 'mbox' and they are named '/var/spool/mail/<logname>'
filer0:/vol/home mounted to /home/f0 via nfs using netapp quotas for all users. Mailboxes are all 'mbox' and located in '~<logname>/Mail'
I've configured _two_ quota roots as described here: http://wiki.dovecot.org/Quota/FS?highlight=(two%20filesystems)
plugin { quota = fs:Home:mount=/home/f0 quota2 = fs:Spool:mount=/var/spool/mail }
This works like a charm, but when testing the configuration, the result was just surprising:
- OK [CAPABILITY IMAP4rev1 SASL-IR SORT THREAD=REFERENCES MULTIAPPEND UNSELECT LITERAL+ IDLE CHILDREN NAMESPACE LOGIN-REFERRALS UIDPLUS LIST-EXTENDED I18NLEVEL=1 QUOTA AUTH=PLAIN] Dovecot ready. . login rfttest XXX . OK Logged in. . getquotaroot "INBOX"
- QUOTAROOT "INBOX" "Home" "Spool"
- QUOTA "Home" (STORAGE 310360 1048576)
- QUOTA "Spool" (STORAGE 89708 1000000) . OK Getquotaroot completed. . getquotaroot "Trash"
- QUOTAROOT "Trash" "Home" "Spool"
- QUOTA "Home" (STORAGE 310360 1048576)
- QUOTA "Spool" (STORAGE 89708 1000000) . OK Getquotaroot completed. . logout
- BYE Logging out . OK Logout completed.
You see, that _always_ both quota roots are reported, whether the references mailbox is actually placed on this filesystem or not.
However reading RFC2087 confirms me in the idea, that just the _related_ quota roots should be listed:
-------------------------------8<----------------------------------------- 4.3. GETQUOTAROOT Command
Arguments: mailbox name
Data: untagged responses: QUOTAROOT, QUOTA
Result: OK - getquota completed
NO - getquota error: no such mailbox, permission denied
BAD - command unknown or arguments invalid
The GETQUOTAROOT command takes the name of a mailbox and returns the
list of quota roots for the mailbox in an untagged QUOTAROOT
response. For each listed quota root, it also returns the quota
root's resource usage and limits in an untagged QUOTA response.
Example: C: A003 GETQUOTAROOT INBOX
S: * QUOTAROOT INBOX ""
S: * QUOTA "" (STORAGE 10 512)
S: A003 OK Getquota completed
------------------------------->8-----------------------------------------
So in my opinion correctly reported quota roots should look like this:
- OK [CAPABILITY IMAP4rev1 SASL-IR SORT THREAD=REFERENCES MULTIAPPEND UNSELECT LITERAL+ IDLE CHILDREN NAMESPACE LOGIN-REFERRALS UIDPLUS LIST-EXTENDED I18NLEVEL=1 QUOTA AUTH=PLAIN] Dovecot ready. . login rfttest XXX . OK Logged in. . getquotaroot "INBOX"
- QUOTAROOT "INBOX" "Spool"
- QUOTA "Spool" (STORAGE 89708 1000000) . OK Getquotaroot completed. . getquotaroot "Trash"
- QUOTAROOT "Trash" "Home"
- QUOTA "Home" (STORAGE 310360 1048576) . OK Getquotaroot completed. . logout
- BYE Logging out . OK Logout completed.
Now I known what I want... but how to get it :-)
While I see no way to use namespaces and/or quota rules to configure this behavior, patching quota.c, quota-fs.c and quota-private.h seems to be an option.
A downside of this is, that I've to extend the quota plugin interface (quota_backend_vfuncs) defined in quota-private.h by adding an new callback function. Since all other quota backends don't have this new function, they have to initialize it with NULL. So there are side effects to other quota backends.
This is the reason why I want to discuss the above described problem (and solution) before posting my patch :-)
Regards, Ralf
--
Dipl.-Inform. (FH) Ralf Becker Rechenzentrum (r/ft) der FH Trier (Network|Mail|Web|Firewall) University of applied sciences Administrator Schneidershof, D-54293 Trier
Mail: beckerr@fh-trier.de Fon: +49 651 8103 499 WWW: http://www.fh-trier.de/~beckerr Fax: +49 651 8103 214