2.3.13 - fails to unlinking quota file
Bron Gondwana
brong at fastmail.fm
Sat Feb 7 20:20:07 EST 2009
On Sat, Feb 07, 2009 at 12:29:54PM +0100, Wolfgang Powisch wrote:
> I think I've encountered a bug in 2.3.13, when I delete a Mailbox, the
> corresponding quota-file isn't removed, and log-output shows that it
> tries to unlink a wrong filename. All other files are removed correctly.
>
> I'm using default quota_db (quotalegacy) and fulldirhash.
>
> Adding some more debug output to code it seems that quota->root get's
> free'd at some point before the commit is called, which should unlink
> the file.
Looks like the whole quota system is pretty broken actually!
imap/mboxlist.c
1021: int deletequotaroot = 0;
1143: if (!r || force) r = mailbox_delete(&mailbox, deletequotaroot, NULL);
Notice the complete lack of any code which actually sets deletequotaroot!
Also,
/*
* Remove a quota root
*/
int mboxlist_unsetquota(const char *root)
-------------
imap/mbdump.c
535: mboxlist_unsetquota(mbname);
imap/mboxlist.c
2691:int mboxlist_unsetquota(const char *root)
imap/mboxlist.h
198:int mboxlist_unsetquota(const char *root);
-------------
It's only called from mbdump, so the "unsetquota" path isn't usually
being used.
There's stuff in imap/user.c for dealing with quotas as well, but back
to "deletequotaroot" above, check out the code around it:
if (!r || force) r = mailbox_delete(&mailbox, deletequotaroot, NULL);
/*
* See if we have to remove mailbox's quota root
*/
if (!r && mailbox.quota.root != NULL) {
/* xxx look for any other mailboxes in this quotaroot */
}
Yeah, ho hum. So I guess we don't bother trying then.
I'm not, off the top of my head, sure how much quota.root looks like a
mailbox, and internal mailbox, or a filesystem path. I'm not sure that
the code is 100% clarified on this at all places either! I've been
looking into exactly that issue while trying to make sure all the buffer
sizes are correct for handling DELETED.* mailbox names safely and
allowing users to be able to delete any mailbox name they are able to
create!
Bron.
More information about the Info-cyrus
mailing list