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(&quota->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(&quota->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(&quota_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