From: Martti Rannanjärvi Date: Tue, 17 Oct 2017 07:12:48 +0000 (+0300) Subject: quota: Add error_r to get_resource() of quota_backend_vfuncs X-Git-Tag: 2.3.0.rc1~802 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a525be16a69367f43765d20c873b5f168c5b7ea3;p=thirdparty%2Fdovecot%2Fcore.git quota: Add error_r to get_resource() of quota_backend_vfuncs --- diff --git a/src/plugins/quota/quota-count.c b/src/plugins/quota/quota-count.c index 9501ae7a8d..a034126910 100644 --- a/src/plugins/quota/quota-count.c +++ b/src/plugins/quota/quota-count.c @@ -228,13 +228,16 @@ count_quota_root_get_resources(struct quota_root *root ATTR_UNUSED) static int count_quota_get_resource(struct quota_root *_root, - const char *name, uint64_t *value_r) + const char *name, uint64_t *value_r, + const char **error_r) { struct count_quota_root *root = (struct count_quota_root *)_root; uint64_t bytes, count; - if (quota_count_cached(root, &bytes, &count) < 0) + if (quota_count_cached(root, &bytes, &count) < 0) { + *error_r = "quota-count failed"; return -1; + } if (strcmp(name, QUOTA_NAME_STORAGE_BYTES) == 0) *value_r = bytes; diff --git a/src/plugins/quota/quota-dict.c b/src/plugins/quota/quota-dict.c index 262c04a904..ece6ceea89 100644 --- a/src/plugins/quota/quota-dict.c +++ b/src/plugins/quota/quota-dict.c @@ -140,7 +140,8 @@ dict_quota_count(struct dict_quota_root *root, static int dict_quota_get_resource(struct quota_root *_root, - const char *name, uint64_t *value_r) + const char *name, uint64_t *value_r, + const char **error_r) { struct dict_quota_root *root = (struct dict_quota_root *)_root; bool want_bytes; @@ -176,6 +177,8 @@ dict_quota_get_resource(struct quota_root *_root, value_r); } } + if (ret < 0) + *error_r = "quota-dict failed"; return ret; } diff --git a/src/plugins/quota/quota-dirsize.c b/src/plugins/quota/quota-dirsize.c index c2faf1eebf..489420b841 100644 --- a/src/plugins/quota/quota-dirsize.c +++ b/src/plugins/quota/quota-dirsize.c @@ -192,7 +192,7 @@ get_quota_root_usage(struct quota_root *root, uint64_t *value_r) static int dirsize_quota_get_resource(struct quota_root *_root, const char *name, - uint64_t *value_r) + uint64_t *value_r, const char **error_r) { int ret; @@ -201,6 +201,9 @@ dirsize_quota_get_resource(struct quota_root *_root, const char *name, ret = get_quota_root_usage(_root, value_r); + if (ret < 0) + *error_r = "quota-dirsize failed"; + return ret < 0 ? -1 : 1; } diff --git a/src/plugins/quota/quota-fs.c b/src/plugins/quota/quota-fs.c index 7d46fd9dee..3e4119c11c 100644 --- a/src/plugins/quota/quota-fs.c +++ b/src/plugins/quota/quota-fs.c @@ -856,7 +856,7 @@ static bool fs_quota_match_box(struct quota_root *_root, struct mailbox *box) static int fs_quota_get_resource(struct quota_root *_root, const char *name, - uint64_t *value_r) + uint64_t *value_r, const char **error_r) { struct fs_quota_root *root = (struct fs_quota_root *)_root; uint64_t bytes_value, count_value; @@ -887,6 +887,8 @@ fs_quota_get_resource(struct quota_root *_root, const char *name, &count_value, &count_limit); } } + if (ret < 0) + *error_r = "quota-fs failed"; if (ret <= 0) return ret; diff --git a/src/plugins/quota/quota-imapc.c b/src/plugins/quota/quota-imapc.c index 3799d5d904..6e8deb858c 100644 --- a/src/plugins/quota/quota-imapc.c +++ b/src/plugins/quota/quota-imapc.c @@ -423,12 +423,14 @@ imapc_quota_root_get_resources(struct quota_root *root ATTR_UNUSED) static int imapc_quota_get_resource(struct quota_root *_root, const char *name, - uint64_t *value_r) + uint64_t *value_r, const char **error_r) { struct imapc_quota_root *root = (struct imapc_quota_root *)_root; - if (imapc_quota_refresh(root) < 0) + if (imapc_quota_refresh(root) < 0) { + *error_r = "quota-imapc failed"; return -1; + } if (strcmp(name, QUOTA_NAME_STORAGE_BYTES) == 0) *value_r = root->bytes_last; diff --git a/src/plugins/quota/quota-maildir.c b/src/plugins/quota/quota-maildir.c index c39a659953..d279222ee8 100644 --- a/src/plugins/quota/quota-maildir.c +++ b/src/plugins/quota/quota-maildir.c @@ -836,13 +836,15 @@ maildir_quota_root_get_resources(struct quota_root *root ATTR_UNUSED) static int maildir_quota_get_resource(struct quota_root *_root, const char *name, - uint64_t *value_r) + uint64_t *value_r, const char **error_r) { struct maildir_quota_root *root = (struct maildir_quota_root *)_root; bool recalculated; - if (maildirquota_refresh(root, &recalculated) < 0) + if (maildirquota_refresh(root, &recalculated) < 0) { + *error_r = "quota-maildir failed"; return -1; + } if (strcmp(name, QUOTA_NAME_STORAGE_BYTES) == 0) { *value_r = root->total_bytes; diff --git a/src/plugins/quota/quota-private.h b/src/plugins/quota/quota-private.h index 7274a49c8a..2c14ce4353 100644 --- a/src/plugins/quota/quota-private.h +++ b/src/plugins/quota/quota-private.h @@ -69,7 +69,8 @@ struct quota_backend_vfuncs { /* Returns 1 if value was returned, 0 if resource name doesn't exist, -1 if internal error. */ int (*get_resource)(struct quota_root *root, - const char *name, uint64_t *value_r); + const char *name, uint64_t *value_r, + const char **error_r); int (*update)(struct quota_root *root, struct quota_transaction_context *ctx); diff --git a/src/plugins/quota/quota.c b/src/plugins/quota/quota.c index a94189f23d..c5df7f5384 100644 --- a/src/plugins/quota/quota.c +++ b/src/plugins/quota/quota.c @@ -772,11 +772,12 @@ quota_get_resource(struct quota_root *root, const char *mailbox_name, /* Get the value first. This call may also update quota limits if they're defined externally. */ - ret = root->backend.v.get_resource(root, name, value_r); + const char *error; + ret = root->backend.v.get_resource(root, name, value_r, &error); if (ret < 0) { *error_r = t_strdup_printf( - "Could not get %s from quota backend for mailbox %s", - name, mailbox_name); + "Could not get %s from quota backend for mailbox %s: %s", + name, mailbox_name, error); return QUOTA_GET_RESULT_INTERNAL_ERROR; } else if (ret == 0) { *error_r = t_strdup_printf( @@ -785,7 +786,6 @@ quota_get_resource(struct quota_root *root, const char *mailbox_name, return QUOTA_GET_RESULT_UNKNOWN_RESOURCE; } - const char *error; if (quota_root_get_rule_limits(root, mailbox_name, &bytes_limit, &count_limit, &ignored, &error) < 0) {