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;
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)
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;
struct quota_root {
pool_t pool;
- const struct quota_settings *set;
+ const struct quota_root_settings *set;
struct quota *quota;
struct quota_backend backend;
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);
#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) \
{ .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", },
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 = "",
.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) {
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;
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;
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
#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)
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;
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);
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))
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);
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;
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;
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;
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) {
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;
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;
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) {