]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
quota: Add error_r parameter to init_limits() of quota_backend_vfuncs
authorMartti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
Mon, 16 Oct 2017 09:18:53 +0000 (12:18 +0300)
committerTimo Sirainen <tss@dovecot.fi>
Thu, 19 Oct 2017 13:43:44 +0000 (16:43 +0300)
src/plugins/quota/quota-imapc.c
src/plugins/quota/quota-maildir.c
src/plugins/quota/quota-private.h
src/plugins/quota/quota.c

index f7b0dedd064d651413fba02c0fa32f587e7cd10a..3799d5d9048fea76c3448174cc40e766ac1089c0 100644 (file)
@@ -383,11 +383,15 @@ static int imapc_quota_refresh(struct imapc_quota_root *root)
        return ret;
 }
 
-static int imapc_quota_init_limits(struct quota_root *_root)
+static int imapc_quota_init_limits(struct quota_root *_root,
+                                  const char **error_r)
 {
        struct imapc_quota_root *root = (struct imapc_quota_root *)_root;
 
-       return imapc_quota_refresh(root);
+       int ret = imapc_quota_refresh(root);
+       if (ret < 0)
+               *error_r = "Failed to get quota data from remote imap server";
+       return ret;
 }
 
 static void
index 5a793d96a7caf635d6e54e9f47573e6e06148841..c39a659953dd9585f337d84fba54483e0e2a8bac 100644 (file)
@@ -784,11 +784,16 @@ maildir_quota_parse_rule(struct quota_root_settings *root_set ATTR_UNUSED,
        return TRUE;
 }
 
-static int maildir_quota_init_limits(struct quota_root *_root)
+static int maildir_quota_init_limits(struct quota_root *_root,
+                                    const char **error_r)
 {
        struct maildir_quota_root *root = (struct maildir_quota_root *)_root;
 
-       return maildirquota_read_limits(root) < 0 ? -1 : 0;
+       if (maildirquota_read_limits(root) < 0) {
+               *error_r = "Failed to read maildir quota limits";
+               return -1;
+       }
+       return 0;
 }
 
 static void
index 4f5807be41f4b38aef8713018c4eb8a16f474c7d..7274a49c8acee5888d253005fe446c1b91e157fe 100644 (file)
@@ -59,7 +59,7 @@ struct quota_backend_vfuncs {
        bool (*parse_rule)(struct quota_root_settings *root_set,
                           struct quota_rule *rule,
                           const char *str, const char **error_r);
-       int (*init_limits)(struct quota_root *root);
+       int (*init_limits)(struct quota_root *root, const char **error_r);
 
        /* called once for each namespace */
        void (*namespace_added)(struct quota *quota,
index 1e748412abb8f44cfac8d145482d224759f83915..a94189f23d4e5e69714a10e11a42c820ff70578e 100644 (file)
@@ -491,8 +491,11 @@ static int quota_root_get_rule_limits(struct quota_root *root,
 
        if (!root->set->force_default_rule) {
                if (root->backend.v.init_limits != NULL) {
-                       if (root->backend.v.init_limits(root) < 0) {
-                               *error_r = "Initializing limits failed for quota backend";
+                       const char *error;
+                       if (root->backend.v.init_limits(root, &error) < 0) {
+                               *error_r = t_strdup_printf(
+                                       "Initializing limits failed for quota backend: %s",
+                                       error);
                                return -1;
                        }
                }