imap-quota-plugin.c revision 6ef7e31619edfaa17ed044b45861d106a86191ef
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen/* Copyright (C) 2005 Timo Sirainen */
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainenquota_send(struct client_command_context *cmd, struct quota_root *root)
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen const char *const *list;
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen unsigned int i;
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen imap_quote_append_string(str, quota_root_get_name(root), FALSE);
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen ret = quota_get_resource(root, *list, &value, &limit);
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen (unsigned long long)value,
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen (unsigned long long)limit);
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen } else if (ret < 0) {
6ef7e31619edfaa17ed044b45861d106a86191efTimo Sirainenstatic bool cmd_getquotaroot(struct client_command_context *cmd)
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen /* <mailbox> */
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen if (!client_read_string_args(cmd, 1, &mailbox))
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen box = mailbox_open(storage, mailbox, NULL, (MAILBOX_OPEN_READONLY |
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen /* send QUOTAROOT reply */
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen imap_quote_append_string(str, mailbox, FALSE);
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen while ((root = quota_root_iter_next(iter)) != NULL) {
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen imap_quote_append_string(str, quota_root_get_name(root), FALSE);
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen /* some failure, send as untagged error */
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen /* send QUOTA reply for each quotaroot */
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen while ((root = quota_root_iter_next(iter)) != NULL)
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen /* some failure, send as untagged error */
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen client_send_tagline(cmd, "OK Getquotaroot completed.");
6ef7e31619edfaa17ed044b45861d106a86191efTimo Sirainenstatic bool cmd_getquota(struct client_command_context *cmd)
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen /* <quota root> */
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen if (!client_read_string_args(cmd, 1, &root_name))
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen client_send_tagline(cmd, "NO Quota root doesn't exist.");
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen client_send_tagline(cmd, "OK Getquota completed.");
6ef7e31619edfaa17ed044b45861d106a86191efTimo Sirainenstatic bool cmd_setquota(struct client_command_context *cmd)
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen /* <quota root> <resource limits> */
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen if (args[1].type != IMAP_ARG_LIST || root_name == NULL) {
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen client_send_command_error(cmd, "Invalid arguments.");
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen client_send_tagline(cmd, "NO Quota root doesn't exist.");
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen if (name == NULL || arg[1].type != IMAP_ARG_ATOM ||
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen client_send_command_error(cmd, "Invalid arguments.");
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen value = strtoull(IMAP_ARG_STR_NONULL(&arg[1]), NULL, 10);
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen if (quota_set_resource(root, name, value) < 0) {
1795e934ebcd58175d3b5bbdd811b13c7889efa3Timo Sirainen client_send_tagline(cmd, "OK Setquota completed.");