From 88f5f425411481b2f9a8aabe1ea27113de304d63 Mon Sep 17 00:00:00 2001 From: Siavash Tavakoli Date: Thu, 3 Jun 2021 18:30:17 +0100 Subject: [PATCH] quota: Initialize dict_op_settings for dict operations --- src/plugins/quota-clone/quota-clone-plugin.c | 3 ++- src/plugins/quota/quota-dict.c | 12 +++++++++--- src/plugins/quota/quota.c | 4 +++- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/plugins/quota-clone/quota-clone-plugin.c b/src/plugins/quota-clone/quota-clone-plugin.c index f084b84c07..4acf9b568c 100644 --- a/src/plugins/quota-clone/quota-clone-plugin.c +++ b/src/plugins/quota-clone/quota-clone-plugin.c @@ -116,7 +116,8 @@ static bool quota_clone_flush_real(struct mail_user *user) the special case of lookup changing from RESULT_LIMITED/RESULT_UNLIMITED to RESULT_UNKNOWN_RESOURCE, which leaves the old value unchanged. */ - trans = dict_transaction_begin(quser->dict, NULL); + const struct dict_op_settings *set = mail_user_get_dict_op_settings(user); + trans = dict_transaction_begin(quser->dict, set); if (bytes_res == QUOTA_GET_RESULT_LIMITED || bytes_res == QUOTA_GET_RESULT_UNLIMITED) { dict_set(trans, DICT_QUOTA_CLONE_BYTES_PATH, diff --git a/src/plugins/quota/quota-dict.c b/src/plugins/quota/quota-dict.c index a833f884c4..1c0476a800 100644 --- a/src/plugins/quota/quota-dict.c +++ b/src/plugins/quota/quota-dict.c @@ -114,11 +114,13 @@ dict_quota_count(struct dict_quota_root *root, struct dict_transaction_context *dt; uint64_t bytes, count; enum quota_get_result error_res; + const struct dict_op_settings *set; if (quota_count(&root->root, &bytes, &count, &error_res, error_r) < 0) return error_res; - dt = dict_transaction_begin(root->dict, NULL); + set = mail_user_get_dict_op_settings(root->root.quota->user); + dt = dict_transaction_begin(root->dict, set); /* these unsets are mainly necessary for pgsql, because its trigger otherwise increases quota without deleting it. but some people with other databases want to store the @@ -147,6 +149,7 @@ dict_quota_get_resource(struct quota_root *_root, struct dict_quota_root *root = (struct dict_quota_root *)_root; bool want_bytes; int ret; + const struct dict_op_settings *set; if (strcmp(name, QUOTA_NAME_STORAGE_BYTES) == 0) want_bytes = TRUE; @@ -157,10 +160,11 @@ dict_quota_get_resource(struct quota_root *_root, return QUOTA_GET_RESULT_UNKNOWN_RESOURCE; } + set = mail_user_get_dict_op_settings(root->root.quota->user); const char *key, *value, *error; key = want_bytes ? DICT_QUOTA_CURRENT_BYTES_PATH : DICT_QUOTA_CURRENT_COUNT_PATH; - ret = dict_lookup(root->dict, NULL, unsafe_data_stack_pool, + ret = dict_lookup(root->dict, set, unsafe_data_stack_pool, key, &value, &error); if (ret < 0) { *error_r = t_strdup_printf( @@ -214,13 +218,15 @@ dict_quota_update(struct quota_root *_root, struct dict_quota_root *root = (struct dict_quota_root *) _root; struct dict_transaction_context *dt; uint64_t value; + const struct dict_op_settings *set; if (ctx->recalculate != QUOTA_RECALCULATE_DONT) { if (dict_quota_count(root, TRUE, &value, error_r) <= QUOTA_GET_RESULT_INTERNAL_ERROR) return -1; } else { - dt = dict_transaction_begin(root->dict, NULL); + set = mail_user_get_dict_op_settings(root->root.quota->user); + dt = dict_transaction_begin(root->dict, set); if (ctx->bytes_used != 0) { dict_atomic_inc(dt, DICT_QUOTA_CURRENT_BYTES_PATH, ctx->bytes_used); diff --git a/src/plugins/quota/quota.c b/src/plugins/quota/quota.c index 25d6032fde..be16a26e63 100644 --- a/src/plugins/quota/quota.c +++ b/src/plugins/quota/quota.c @@ -833,6 +833,7 @@ int quota_set_resource(struct quota_root *root, const char *name, { struct dict_transaction_context *trans; const char *key, *error; + const struct dict_op_settings *set; if (root->set->limit_set == NULL) { *client_error_r = MAIL_ERRSTR_NO_PERMISSION; @@ -868,7 +869,8 @@ int quota_set_resource(struct quota_root *root, const char *name, } } - trans = dict_transaction_begin(root->limit_set_dict, NULL); + set = mail_user_get_dict_op_settings(root->ns->user); + trans = dict_transaction_begin(root->limit_set_dict, set); key = t_strdup_printf(QUOTA_LIMIT_SET_PATH"%s", key); dict_set(trans, key, dec2str(value)); if (dict_transaction_commit(&trans, &error) < 0) { -- 2.47.3