ARRAY(struct quota_root *) roots;
ARRAY(struct mail_namespace *) namespaces;
struct mail_namespace *unwanted_ns;
+
+ enum quota_alloc_result (*test_alloc)(
+ struct quota_transaction_context *ctx, uoff_t size,
+ const char **error_r);
};
struct quota_settings {
pool_t pool;
ARRAY(struct quota_root_settings *) root_sets;
- enum quota_alloc_result (*test_alloc)(
- struct quota_transaction_context *ctx, uoff_t size,
- const char **error_r);
unsigned int max_mailbox_count;
uoff_t max_mail_size;
pool = pool_alloconly_create("quota settings", 2048);
quota_set = p_new(pool, struct quota_settings, 1);
quota_set->pool = pool;
- quota_set->test_alloc = quota_default_test_alloc;
quota_set->quota_exceeded_msg =
mail_user_plugin_getenv(user, "quota_exceeded_message");
if (quota_set->quota_exceeded_msg == NULL)
event_set_append_log_prefix(quota->event, "quota: ");
quota->user = user;
quota->set = quota_set;
+ quota->test_alloc = quota_default_test_alloc;
i_array_init("a->roots, 8);
root_sets = array_get("a_set->root_sets, &count);
return QUOTA_ALLOC_RESULT_OK;
/* this is a virtual function mainly for trash plugin and similar,
which may automatically delete mails to stay under quota. */
- return ctx->quota->set->test_alloc(ctx, size, error_r);
+ return ctx->quota->test_alloc(ctx, size, error_r);
}
static enum quota_alloc_result quota_default_test_alloc(
if (tuser != NULL && read_configuration(user, tuser->config_file) == 0) {
i_assert(quser != NULL);
trash_next_quota_test_alloc =
- quser->quota->set->test_alloc;
- quser->quota->set->test_alloc = trash_quota_test_alloc;
+ quser->quota->test_alloc;
+ quser->quota->test_alloc = trash_quota_test_alloc;
}
}