]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
quota: Avoid assert-crash in Maildir++ quota if backend doesn't support control dirs.
authorTimo Sirainen <tss@iki.fi>
Tue, 29 Jul 2014 14:27:24 +0000 (17:27 +0300)
committerTimo Sirainen <tss@iki.fi>
Tue, 29 Jul 2014 14:27:24 +0000 (17:27 +0300)
We'll delay looking up the control dir until we've checked that the storage
is Maildir.

src/plugins/quota/quota-maildir.c

index db2a3ce617e6fabb6f996ca3a06c1c0aadb84373..accd40e7f7a2cc22d5f7aa2e854203e330fd671a 100644 (file)
@@ -634,6 +634,7 @@ static bool maildirquota_limits_init(struct maildir_quota_root *root)
 {
        struct mailbox_list *list;
        struct mail_storage *storage;
+       const char *control_dir;
 
        if (root->limits_initialized)
                return root->maildirsize_path != NULL;
@@ -643,7 +644,6 @@ static bool maildirquota_limits_init(struct maildir_quota_root *root)
                i_assert(root->maildirsize_path == NULL);
                return FALSE;
        }
-       i_assert(root->maildirsize_path != NULL);
 
        list = root->maildirsize_ns->list;
        if (mailbox_list_get_storage(&list, "", &storage) == 0 &&
@@ -658,6 +658,14 @@ static bool maildirquota_limits_init(struct maildir_quota_root *root)
                root->maildirsize_path = NULL;
                return FALSE;
        }
+       if (root->maildirsize_path == NULL) {
+               if (!mailbox_list_get_root_path(list, MAILBOX_LIST_PATH_TYPE_CONTROL,
+                                               &control_dir))
+                       i_unreached();
+               root->maildirsize_path =
+                       p_strconcat(root->root.pool, control_dir,
+                                   "/"MAILDIRSIZE_FILENAME, NULL);
+       }
        return TRUE;
 }
 
@@ -817,18 +825,9 @@ maildir_quota_root_namespace_added(struct quota_root *_root,
                                   struct mail_namespace *ns)
 {
        struct maildir_quota_root *root = (struct maildir_quota_root *)_root;
-       const char *control_dir;
 
-       if (root->maildirsize_path != NULL)
-               return;
-
-       if (!mailbox_list_get_root_path(ns->list, MAILBOX_LIST_PATH_TYPE_CONTROL,
-                                       &control_dir))
-               i_unreached();
-       root->maildirsize_ns = ns;
-       root->maildirsize_path =
-               p_strconcat(_root->pool, control_dir,
-                           "/"MAILDIRSIZE_FILENAME, NULL);
+       if (root->maildirsize_ns == NULL)
+               root->maildirsize_ns = ns;
 }
 
 static void