From: Martti Rannanjärvi Date: Mon, 16 Oct 2017 09:18:53 +0000 (+0300) Subject: quota: Add error_r parameter to init_limits() of quota_backend_vfuncs X-Git-Tag: 2.3.0.rc1~803 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e83a11eb1dc0dea31754396e1d07c5205d810104;p=thirdparty%2Fdovecot%2Fcore.git quota: Add error_r parameter to init_limits() of quota_backend_vfuncs --- diff --git a/src/plugins/quota/quota-imapc.c b/src/plugins/quota/quota-imapc.c index f7b0dedd06..3799d5d904 100644 --- a/src/plugins/quota/quota-imapc.c +++ b/src/plugins/quota/quota-imapc.c @@ -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 diff --git a/src/plugins/quota/quota-maildir.c b/src/plugins/quota/quota-maildir.c index 5a793d96a7..c39a659953 100644 --- a/src/plugins/quota/quota-maildir.c +++ b/src/plugins/quota/quota-maildir.c @@ -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 diff --git a/src/plugins/quota/quota-private.h b/src/plugins/quota/quota-private.h index 4f5807be41..7274a49c8a 100644 --- a/src/plugins/quota/quota-private.h +++ b/src/plugins/quota/quota-private.h @@ -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, diff --git a/src/plugins/quota/quota.c b/src/plugins/quota/quota.c index 1e748412ab..a94189f23d 100644 --- a/src/plugins/quota/quota.c +++ b/src/plugins/quota/quota.c @@ -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; } }