]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
quota: Split off quota_root_settings
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 26 Aug 2024 10:01:43 +0000 (13:01 +0300)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Fri, 17 Jan 2025 08:40:00 +0000 (10:40 +0200)
src/plugins/quota/quota-count.c
src/plugins/quota/quota-maildir.c
src/plugins/quota/quota-private.h
src/plugins/quota/quota-settings.c
src/plugins/quota/quota-settings.h
src/plugins/quota/quota-util.c
src/plugins/quota/quota.c

index dd69a6b637cee463fa4af85bdb1008584f176ca7..ddee277b3e4be7dba619c93e44554cd69ea94fff 100644 (file)
@@ -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, &quota_setting_parser_info, 0,
+       if (settings_get(event, &quota_root_setting_parser_info, 0,
                         &set, error_r) < 0)
                ret = -1;
        else if (set->quota_ignore)
index 0556af89a2c5dd81f37e5a42598f3ccdd6a43efc..5322dad12490806073fa0b1a17b6c4eb1e1aa968 100644 (file)
@@ -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, &quota_setting_parser_info, 0,
-                                        &set, &error) < 0)
+                       if (settings_get(event, &quota_root_setting_parser_info,
+                                        0, &set, &error) < 0)
                                e_error(event, "%s", error);
                        else {
                                quota_ignore = set->quota_ignore;
index 23f70ce2b160cd3a400f17b6bdc561a345bc0ad1..37e23c9f81ab26bf4c9edd6572efcce2f2c3f2eb 100644 (file)
@@ -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);
index 917dc6309cceb97eef925ba6d40cc7ae1ac8be5e..3571f071126cf8b6f7660a2800167061f5869f87 100644 (file)
@@ -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 = &quota_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 = &quota_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 = &quota_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) {
index 131dc7f7d227c206552d3c2ebc18fbb70de35f3f..0bc63d98d2d3cb9b27da8ef6da47ec59a14cd2a7 100644 (file)
@@ -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
index 74b2e3ce9956c1514cf090c1264aa8c2802a13d0..f4d59359bfca371609ea3ca6a8d330f7d9cc4ba3 100644 (file)
@@ -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)
index 0d6d8799dfb6caf0803f02b574159632e617872e..917bd0ff9864476649ead95135e677dd3de10cb9 100644 (file)
@@ -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, &quota_setting_parser_info, 0,
+       int ret = settings_get(event, &quota_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,
-                                       &quota_setting_parser_info, 0,
+                                       &quota_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,
-                               &quota_setting_parser_info, 0,
+                               &quota_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,
-                               &quota_setting_parser_info, 0,
+                               &quota_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,
-                                       &quota_setting_parser_info, 0,
+                                       &quota_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) {