dovecot-2.0: Added doveadm quota plugin.
dovecot at dovecot.org
dovecot at dovecot.org
Mon Mar 8 17:29:24 EET 2010
details: http://hg.dovecot.org/dovecot-2.0/rev/6248d194f430
changeset: 10860:6248d194f430
user: Timo Sirainen <tss at iki.fi>
date: Mon Mar 08 17:28:48 2010 +0200
description:
Added doveadm quota plugin.
diffstat:
src/plugins/quota/Makefile.am | 11 +++++-
src/plugins/quota/doveadm-quota.c | 88 ++++++++++++++++++++++++++++++++++++++++++++
src/plugins/quota/quota-plugin.h | 2 +
3 files changed, 100 insertions(+), 1 deletions(-)
diffs (138 lines):
diff -r b06d874708d4 -r 6248d194f430 src/plugins/quota/Makefile.am
--- a/src/plugins/quota/Makefile.am Mon Mar 08 17:28:29 2010 +0200
+++ b/src/plugins/quota/Makefile.am Mon Mar 08 17:28:48 2010 +0200
@@ -1,3 +1,5 @@
+doveadm_moduledir = $(moduledir)/doveadm
+
AM_CPPFLAGS = \
-I$(top_srcdir)/src/lib \
-I$(top_srcdir)/src/lib-dict \
@@ -5,7 +7,8 @@
-I$(top_srcdir)/src/lib-mail \
-I$(top_srcdir)/src/lib-storage \
-I$(top_srcdir)/src/lib-storage/index \
- -I$(top_srcdir)/src/lib-storage/index/maildir
+ -I$(top_srcdir)/src/lib-storage/index/maildir \
+ -I$(top_srcdir)/src/doveadm
lib10_quota_plugin_la_LDFLAGS = -module -avoid-version
@@ -25,6 +28,12 @@
lib10_quota_plugin_la_SOURCES = $(quota_dist_sources)
nodist_lib10_quota_plugin_la_SOURCES = $(RQUOTA_XDR)
+doveadm_module_LTLIBRARIES = \
+ lib10_doveadm_quota_plugin.la
+
+lib10_doveadm_quota_plugin_la_SOURCES = \
+ doveadm-quota.c
+
if HAVE_RQUOTA
RQUOTA_XDR = rquota_xdr.c
#RQUOTA_X = /usr/include/rpcsvc/rquota.x
diff -r b06d874708d4 -r 6248d194f430 src/plugins/quota/doveadm-quota.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/plugins/quota/doveadm-quota.c Mon Mar 08 17:28:48 2010 +0200
@@ -0,0 +1,88 @@
+/* Copyright (c) 2005-2010 Dovecot authors, see the included COPYING file */
+
+#include "lib.h"
+#include "module-dir.h"
+#include "quota-plugin.h"
+#include "quota-private.h"
+#include "doveadm-mail.h"
+
+#include <stdio.h>
+
+const char *doveadm_quota_plugin_version = DOVECOT_VERSION;
+
+void doveadm_quota_plugin_init(struct module *module);
+void doveadm_quota_plugin_deinit(void);
+
+static void cmd_quota_get_root(struct mail_user *user, struct quota_root *root)
+{
+ const char *const *res;
+ uint64_t value, limit;
+ int ret;
+
+ printf("%s(%s): ", user->username, root->set->name);
+ res = quota_root_get_resources(root);
+ for (; *res != NULL; res++) {
+ ret = quota_get_resource(root, "", *res, &value, &limit);
+ printf("%s %llu/%llu", *res,
+ (unsigned long long)value,
+ (unsigned long long)limit);
+ if (res[1] != NULL)
+ printf(", ");
+ }
+ printf("\n");
+}
+
+static void cmd_quota_get(struct mail_user *user, struct quota *quota)
+{
+ struct quota_root *const *root;
+
+ array_foreach("a->roots, root)
+ cmd_quota_get_root(user, *root);
+}
+
+static void cmd_quota_recalc(struct quota *quota)
+{
+ struct quota_root *const *root;
+ struct quota_transaction_context trans;
+
+ memset(&trans, 0, sizeof(trans));
+ trans.quota = quota;
+ trans.recalculate = TRUE;
+
+ array_foreach("a->roots, root)
+ (void)(*root)->backend.v.update(*root, &trans);
+}
+
+static void cmd_quota(struct mail_user *user, const char *args[])
+{
+ struct quota_user *quser = QUOTA_USER_CONTEXT(user);
+ struct quota *quota;
+ const char *subcmd = args[0];
+
+ if (subcmd == NULL)
+ doveadm_mail_help_name("quota");
+
+ if (quser == NULL)
+ i_fatal("User has no quota");
+
+ quota = quser->quota;
+ if (strcmp(subcmd, "get") == 0)
+ cmd_quota_get(user, quota);
+ else if (strcmp(subcmd, "recalc") == 0)
+ cmd_quota_recalc(quota);
+ else
+ doveadm_mail_help_name("quota");
+}
+
+static struct doveadm_mail_cmd quota_cmd = {
+ cmd_quota, "quota", "get|recalc"
+};
+
+void doveadm_quota_plugin_init(struct module *module ATTR_UNUSED)
+{
+ doveadm_mail_register_cmd("a_cmd);
+}
+
+void doveadm_quota_plugin_deinit(void)
+{
+}
diff -r b06d874708d4 -r 6248d194f430 src/plugins/quota/quota-plugin.h
--- a/src/plugins/quota/quota-plugin.h Mon Mar 08 17:28:29 2010 +0200
+++ b/src/plugins/quota/quota-plugin.h Mon Mar 08 17:28:48 2010 +0200
@@ -2,8 +2,10 @@
#define QUOTA_PLUGIN_H
#include "module-context.h"
+#include "mail-user.h"
struct module;
+struct mailbox;
#define QUOTA_USER_CONTEXT(obj) \
MODULE_CONTEXT(obj, quota_user_module)
More information about the dovecot-cvs
mailing list