From: Timo Sirainen Date: Mon, 26 Aug 2024 10:01:43 +0000 (+0300) Subject: quota: Split off quota_root_settings X-Git-Tag: 2.4.0~375 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f1ec6bb558908aead281ea7565de05083ff82ba5;p=thirdparty%2Fdovecot%2Fcore.git quota: Split off quota_root_settings --- diff --git a/src/plugins/quota/quota-count.c b/src/plugins/quota/quota-count.c index dd69a6b637..ddee277b3e 100644 --- a/src/plugins/quota/quota-count.c +++ b/src/plugins/quota/quota-count.c @@ -30,7 +30,7 @@ quota_count_mailbox(struct quota_root *root, struct mail_namespace *ns, enum quota_get_result *error_result_r, const char **error_r) { - const struct quota_settings *set = NULL; + const struct quota_root_settings *set = NULL; struct mailbox *box; struct mailbox_metadata metadata; struct mailbox_status status; @@ -41,7 +41,7 @@ quota_count_mailbox(struct quota_root *root, struct mail_namespace *ns, box = mailbox_alloc(ns->list, vname, MAILBOX_FLAG_READONLY); struct event *event = event_create(box->event); event_add_str(event, "quota", root->set->quota_name); - if (settings_get(event, "a_setting_parser_info, 0, + if (settings_get(event, "a_root_setting_parser_info, 0, &set, error_r) < 0) ret = -1; else if (set->quota_ignore) diff --git a/src/plugins/quota/quota-maildir.c b/src/plugins/quota/quota-maildir.c index 0556af89a2..5322dad124 100644 --- a/src/plugins/quota/quota-maildir.c +++ b/src/plugins/quota/quota-maildir.c @@ -167,15 +167,15 @@ maildir_list_next(struct maildir_list_context *ctx, time_t *mtime_r) if (ctx->info == NULL) return NULL; - const struct quota_settings *set; + const struct quota_root_settings *set; bool quota_ignore = FALSE; const char *error; struct event *event = mail_storage_mailbox_create_event( ctx->root->root.backend.event, ctx->info->ns->list, ctx->info->vname); - if (settings_get(event, "a_setting_parser_info, 0, - &set, &error) < 0) + if (settings_get(event, "a_root_setting_parser_info, + 0, &set, &error) < 0) e_error(event, "%s", error); else { quota_ignore = set->quota_ignore; diff --git a/src/plugins/quota/quota-private.h b/src/plugins/quota/quota-private.h index 23f70ce2b1..37e23c9f81 100644 --- a/src/plugins/quota/quota-private.h +++ b/src/plugins/quota/quota-private.h @@ -65,7 +65,7 @@ struct quota_backend { struct quota_root { pool_t pool; - const struct quota_settings *set; + const struct quota_root_settings *set; struct quota *quota; struct quota_backend backend; @@ -139,7 +139,7 @@ struct quota *quota_get_mail_user_quota(struct mail_user *user); int quota_count(struct quota_root *root, uint64_t *bytes_r, uint64_t *count_r, enum quota_get_result *error_result_r, const char **error_r); -bool quota_warning_match(const struct quota_settings *w, +bool quota_warning_match(const struct quota_root_settings *w, uint64_t bytes_before, uint64_t bytes_current, uint64_t count_before, uint64_t count_current, const char **reason_r); diff --git a/src/plugins/quota/quota-settings.c b/src/plugins/quota/quota-settings.c index 917dc6309c..3571f07112 100644 --- a/src/plugins/quota/quota-settings.c +++ b/src/plugins/quota/quota-settings.c @@ -5,7 +5,7 @@ #include "quota-private.h" #include "quota-settings.h" -static bool quota_settings_check(void *_set, pool_t pool, const char **error_r); +static bool quota_root_settings_check(void *_set, pool_t pool, const char **error_r); #undef DEF #define DEF(type, name) \ @@ -17,8 +17,38 @@ static const struct setting_define quota_setting_defines[] = { { .type = SET_FILTER_ARRAY, .key = "quota", .offset = offsetof(struct quota_settings, quota_roots), .filter_array_field_name = "quota_name", }, + + DEF(UINT, quota_mailbox_count), + DEF(UINT, quota_mailbox_message_count), + DEF(SIZE, quota_mail_size), + DEF(STR, quota_exceeded_message), + + SETTING_DEFINE_LIST_END +}; + +static const struct quota_settings quota_default_settings = { + .quota_roots = ARRAY_INIT, + + .quota_mailbox_count = SET_UINT_UNLIMITED, + .quota_mail_size = SET_SIZE_UNLIMITED, + .quota_mailbox_message_count = SET_UINT_UNLIMITED, + .quota_exceeded_message = "Quota exceeded (mailbox for user is full)", +}; + +const struct setting_parser_info quota_setting_parser_info = { + .name = "quota", + .defines = quota_setting_defines, + .defaults = "a_default_settings, + .struct_size = sizeof(struct quota_settings), + .pool_offset1 = 1 + offsetof(struct quota_settings, pool), +}; + +#undef DEF +#define DEF(type, name) \ + SETTING_DEFINE_STRUCT_##type(#name, name, struct quota_root_settings) +static const struct setting_define quota_root_setting_defines[] = { { .type = SET_FILTER_ARRAY, .key = "quota_warning", - .offset = offsetof(struct quota_settings, quota_warnings), + .offset = offsetof(struct quota_root_settings, quota_warnings), .filter_array_field_name = "quota_warning_name", .required_setting = "execute", }, @@ -45,16 +75,10 @@ static const struct setting_define quota_setting_defines[] = { DEF(STR, quota_over_status_current), DEF(STR, quota_over_status_mask), - DEF(UINT, quota_mailbox_count), - DEF(UINT, quota_mailbox_message_count), - DEF(SIZE, quota_mail_size), - DEF(STR, quota_exceeded_message), - SETTING_DEFINE_LIST_END }; -static const struct quota_settings quota_default_settings = { - .quota_roots = ARRAY_INIT, +static const struct quota_root_settings quota_root_default_settings = { .quota_warnings = ARRAY_INIT, .quota_name = "", @@ -79,29 +103,24 @@ static const struct quota_settings quota_default_settings = { .quota_over_status_lazy_check = FALSE, .quota_over_status_current = "", .quota_over_status_mask = "", - - .quota_mailbox_count = SET_UINT_UNLIMITED, - .quota_mail_size = SET_SIZE_UNLIMITED, - .quota_mailbox_message_count = SET_UINT_UNLIMITED, - .quota_exceeded_message = "Quota exceeded (mailbox for user is full)", }; -const struct setting_parser_info quota_setting_parser_info = { - .name = "quota", - .defines = quota_setting_defines, - .defaults = "a_default_settings, - .struct_size = sizeof(struct quota_settings), +const struct setting_parser_info quota_root_setting_parser_info = { + .name = "quota_root", + .defines = quota_root_setting_defines, + .defaults = "a_root_default_settings, + .struct_size = sizeof(struct quota_root_settings), #ifndef CONFIG_BINARY - .check_func = quota_settings_check, + .check_func = quota_root_settings_check, #endif - .pool_offset1 = 1 + offsetof(struct quota_settings, pool), + .pool_offset1 = 1 + offsetof(struct quota_root_settings, pool), }; #ifndef CONFIG_BINARY -static bool quota_settings_check(void *_set, pool_t pool ATTR_UNUSED, - const char **error_r) +static bool quota_root_settings_check(void *_set, pool_t pool ATTR_UNUSED, + const char **error_r) { - struct quota_settings *set = _set; + struct quota_root_settings *set = _set; set->backend = quota_backend_find(set->quota_driver); if (set->backend == NULL) { diff --git a/src/plugins/quota/quota-settings.h b/src/plugins/quota/quota-settings.h index 131dc7f7d2..0bc63d98d2 100644 --- a/src/plugins/quota/quota-settings.h +++ b/src/plugins/quota/quota-settings.h @@ -13,9 +13,19 @@ struct quota_settings { pool_t pool; ARRAY_TYPE(const_string) quota_roots; - ARRAY_TYPE(const_string) quota_warnings; - /* For quota roots: */ + /* Globals: */ + + unsigned int quota_mailbox_count; + uoff_t quota_mail_size; + unsigned int quota_mailbox_message_count; + const char *quota_exceeded_message; +}; + +struct quota_root_settings { + pool_t pool; + + ARRAY_TYPE(const_string) quota_warnings; /* Client-visible name of the quota root */ const char *quota_name; @@ -59,17 +69,11 @@ struct quota_settings { const char *quota_warning_threshold; /* For quota_over_status: */ + bool quota_over_status_lazy_check; const char *quota_over_status_current; const char *quota_over_status_mask; - /* Globals: */ - - unsigned int quota_mailbox_count; - uoff_t quota_mail_size; - unsigned int quota_mailbox_message_count; - const char *quota_exceeded_message; - /* Generated: */ const struct quota_backend *backend; @@ -78,5 +82,6 @@ struct quota_settings { struct quota_settings *quota_get_unlimited_set(void); extern const struct setting_parser_info quota_setting_parser_info; +extern const struct setting_parser_info quota_root_setting_parser_info; #endif diff --git a/src/plugins/quota/quota-util.c b/src/plugins/quota/quota-util.c index 74b2e3ce99..f4d59359bf 100644 --- a/src/plugins/quota/quota-util.c +++ b/src/plugins/quota/quota-util.c @@ -3,7 +3,7 @@ #include "lib.h" #include "quota-private.h" -bool quota_warning_match(const struct quota_settings *w, +bool quota_warning_match(const struct quota_root_settings *w, uint64_t bytes_before, uint64_t bytes_current, uint64_t count_before, uint64_t count_current, const char **reason_r) diff --git a/src/plugins/quota/quota.c b/src/plugins/quota/quota.c index 0d6d8799df..917bd0ff98 100644 --- a/src/plugins/quota/quota.c +++ b/src/plugins/quota/quota.c @@ -143,7 +143,7 @@ static void quota_root_deinit(struct quota_root *root) static int quota_root_settings_get(struct quota_root *root, struct event *set_event, - const struct quota_settings **set_r, + const struct quota_root_settings **set_r, const char **error_r) { struct event *event; @@ -154,7 +154,7 @@ quota_root_settings_get(struct quota_root *root, struct event *set_event, event = event_create(set_event); event_add_str(event, "quota", root->set->quota_name); } - int ret = settings_get(event, "a_setting_parser_info, 0, + int ret = settings_get(event, "a_root_setting_parser_info, 0, set_r, error_r); if (set_event != NULL) event_unref(&event); @@ -163,7 +163,7 @@ quota_root_settings_get(struct quota_root *root, struct event *set_event, static int quota_root_has_under_warnings(struct quota_root *root) { - const struct quota_settings *set; + const struct quota_root_settings *set; const char *warn_name, *error; if (!array_is_created(&root->set->quota_warnings)) @@ -171,7 +171,7 @@ static int quota_root_has_under_warnings(struct quota_root *root) array_foreach_elem(&root->set->quota_warnings, warn_name) { if (settings_get_filter(root->backend.event, "quota_warning", warn_name, - "a_setting_parser_info, 0, + "a_root_setting_parser_info, 0, &set, &error) < 0) { e_error(root->backend.event, "%s", error); quota_root_deinit(root); @@ -190,11 +190,11 @@ static int quota_root_init(struct quota *quota, struct event *set_event, const char *root_name, struct quota_root **root_r, const char **error_r) { - const struct quota_settings *root_set; + const struct quota_root_settings *root_set; struct quota_root *root; if (settings_get_filter(set_event, "quota", root_name, - "a_setting_parser_info, 0, + "a_root_setting_parser_info, 0, &root_set, error_r) < 0) return -1; @@ -232,7 +232,7 @@ quota_root_init(struct quota *quota, struct event *set_event, const char *root_n event_set_ptr(set_event, SETTINGS_EVENT_FILTER_NAME, p_strdup(event_get_pool(set_event), backend_filter)); if (settings_get_filter(set_event, "quota", root_name, - "a_setting_parser_info, 0, + "a_root_setting_parser_info, 0, &root->set, error_r) < 0) { event_unref(&set_event); return -1; @@ -335,7 +335,7 @@ quota_root_get_rule_limits(struct quota_root *root, struct event *set_event, uint64_t *bytes_limit_r, uint64_t *count_limit_r, bool *ignored_r, const char **error_r) { - const struct quota_settings *set; + const struct quota_root_settings *set; if (quota_root_settings_get(root, set_event, &set, error_r) < 0) return -1; @@ -689,7 +689,7 @@ struct quota_transaction_context *quota_transaction_begin(struct mailbox *box) if (!quota_root_is_visible(*rootp, ctx->box)) continue; - const struct quota_settings *set = NULL; + const struct quota_root_settings *set = NULL; const char *error; if (quota_root_settings_get(*rootp, box->event, &set, &error) < 0) { @@ -872,7 +872,7 @@ quota_warning_execute(struct event *event, const char *last_arg, static void quota_warnings_execute(struct quota_transaction_context *ctx, struct quota_root *root) { - const struct quota_settings *set; + const struct quota_root_settings *set; uint64_t bytes_current, bytes_before, bytes_limit; uint64_t count_current, count_before, count_limit; const char *warn_name, *reason, *error; @@ -908,7 +908,7 @@ static void quota_warnings_execute(struct quota_transaction_context *ctx, array_foreach_elem(&root->set->quota_warnings, warn_name) { if (settings_get_filter(root->backend.event, "quota_warning", warn_name, - "a_setting_parser_info, 0, + "a_root_setting_parser_info, 0, &set, &error) < 0) { e_error(root->backend.event, "%s", error); return; @@ -953,7 +953,7 @@ int quota_transaction_commit(struct quota_transaction_context **_ctx) if (!quota_root_is_visible(roots[i], ctx->box)) continue; - const struct quota_settings *set = NULL; + const struct quota_root_settings *set = NULL; const char *error; if (quota_root_settings_get(roots[i], ctx->box->event, &set, &error) < 0) {