]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Added autocreate plugin.
authorTimo Sirainen <tss@iki.fi>
Sat, 18 Oct 2008 18:36:54 +0000 (21:36 +0300)
committerTimo Sirainen <tss@iki.fi>
Sat, 18 Oct 2008 18:36:54 +0000 (21:36 +0300)
--HG--
branch : HEAD

configure.in
src/plugins/Makefile.am
src/plugins/autocreate/Makefile.am [new file with mode: 0644]
src/plugins/autocreate/autocreate-plugin.c [new file with mode: 0644]
src/plugins/autocreate/autocreate-plugin.h [new file with mode: 0644]

index b9540fa682520c3ab77480778d397cfd737f2404..6be969110c20cfd9b06bfb2d7b9df25962ef53ef 100644 (file)
@@ -2440,6 +2440,7 @@ src/tests/Makefile
 src/util/Makefile
 src/plugins/Makefile
 src/plugins/acl/Makefile
+src/plugins/autocreate/Makefile
 src/plugins/convert/Makefile
 src/plugins/expire/Makefile
 src/plugins/fts/Makefile
index a5d3f362458b99f6248dda17a05ca559e925065f..3ad0376935fb9481c5c8c0c3490b16280ee42571 100644 (file)
@@ -11,6 +11,19 @@ FTS_LUCENE = fts-solr
 endif
 
 SUBDIRS = \
-       acl convert expire fts fts-squat lazy-expunge mail-log mbox-snarf \
-       quota imap-quota trash virtual \
-       $(ZLIB) $(FTS_LUCENE) $(FTS_SOLR)
+       acl \
+       autocreate \
+       convert \
+       expire \
+       fts \
+       fts-squat \
+       lazy-expunge \
+       mail-log \
+       mbox-snarf \
+       quota \
+       imap-quota \
+       trash \
+       virtual \
+       $(ZLIB) \
+       $(FTS_LUCENE) \
+       $(FTS_SOLR)
diff --git a/src/plugins/autocreate/Makefile.am b/src/plugins/autocreate/Makefile.am
new file mode 100644 (file)
index 0000000..13f5370
--- /dev/null
@@ -0,0 +1,24 @@
+AM_CPPFLAGS = \
+       -I$(top_srcdir)/src/lib \
+       -I$(top_srcdir)/src/lib-mail \
+       -I$(top_srcdir)/src/lib-imap \
+       -I$(top_srcdir)/src/lib-storage
+
+lib20_autocreate_plugin_la_LDFLAGS = -module -avoid-version
+
+module_LTLIBRARIES = \
+       lib20_autocreate_plugin.la
+
+lib20_autocreate_plugin_la_SOURCES = \
+       autocreate-plugin.c
+
+noinst_HEADERS = \
+       autocreate-plugin.h
+
+install-exec-local:
+       for d in imap pop3 lda; do \
+         $(mkdir_p) $(DESTDIR)$(moduledir)/$$d; \
+         rm -f $(DESTDIR)$(moduledir)/$$d/lib20_autocreate_plugin$(MODULE_SUFFIX); \
+         $(LN_S) ../lib20_autocreate_plugin$(MODULE_SUFFIX) $(DESTDIR)$(moduledir)/$$d; \
+       done
+
diff --git a/src/plugins/autocreate/autocreate-plugin.c b/src/plugins/autocreate/autocreate-plugin.c
new file mode 100644 (file)
index 0000000..7f8042b
--- /dev/null
@@ -0,0 +1,70 @@
+/* Copyright (C) 2007 Timo Sirainen, LGPLv2.1 */
+
+#include "lib.h"
+#include "mail-storage.h"
+#include "mail-namespace.h"
+#include "autocreate-plugin.h"
+
+#include <stdlib.h>
+
+const char *autocreate_plugin_version = PACKAGE_VERSION;
+
+static void (*autocreate_next_hook_mail_namespaces_created)
+       (struct mail_namespace *ns);
+
+static void autocreate_mailboxes(struct mail_storage *storage)
+{
+       char env_name[20];
+       const char *env;
+       unsigned int i;
+
+       i = 1;
+       env = getenv("AUTOCREATE");
+       while (env != NULL) {
+               (void)mail_storage_mailbox_create(storage, env, FALSE);
+               i_snprintf(env_name, sizeof(env_name), "AUTOCREATE%d", ++i);
+               env = getenv(env_name);
+       }
+}
+
+static void autosubscribe_mailboxes(struct mailbox_list *list)
+{
+       char env_name[20];
+       const char *env;
+       unsigned int i;
+
+       i = 1;
+       env = getenv("AUTOSUBSCRIBE");
+       while (env != NULL) {
+               (void)mailbox_list_set_subscribed(list, env, TRUE);
+               i_snprintf(env_name, sizeof(env_name), "AUTOSUBSCRIBE%d", ++i);
+               env = getenv(env_name);
+       }
+}
+
+static void autocreate_mail_namespaces_created(struct mail_namespace *ns)
+{
+       if (autocreate_next_hook_mail_namespaces_created != NULL)
+               autocreate_next_hook_mail_namespaces_created(ns);
+
+       for (; ns != NULL; ns = ns->next) {
+               if (ns->type == NAMESPACE_PRIVATE) {
+                       autocreate_mailboxes(ns->storage);
+                       autosubscribe_mailboxes(ns->list);
+                       break;
+               }
+       }
+}
+
+void autocreate_plugin_init(void)
+{
+       autocreate_next_hook_mail_namespaces_created =
+               hook_mail_namespaces_created;
+       hook_mail_namespaces_created = autocreate_mail_namespaces_created;
+}
+
+void autocreate_plugin_deinit(void)
+{
+       hook_mail_namespaces_created =
+               autocreate_next_hook_mail_namespaces_created;
+}
diff --git a/src/plugins/autocreate/autocreate-plugin.h b/src/plugins/autocreate/autocreate-plugin.h
new file mode 100644 (file)
index 0000000..d24d801
--- /dev/null
@@ -0,0 +1,7 @@
+#ifndef AUTOCREATE_PLUGIN_H
+#define AUTOCREATE_PLUGIN_H
+
+void autocreate_plugin_init(void);
+void autocreate_plugin_deinit(void);
+
+#endif