From: Timo Sirainen Date: Sat, 18 Oct 2008 18:36:54 +0000 (+0300) Subject: Added autocreate plugin. X-Git-Tag: 1.2.alpha3~20 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=800ce5df11647686f4fc33e8dffb2d22a10f5394;p=thirdparty%2Fdovecot%2Fcore.git Added autocreate plugin. --HG-- branch : HEAD --- diff --git a/configure.in b/configure.in index b9540fa682..6be969110c 100644 --- a/configure.in +++ b/configure.in @@ -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 diff --git a/src/plugins/Makefile.am b/src/plugins/Makefile.am index a5d3f36245..3ad0376935 100644 --- a/src/plugins/Makefile.am +++ b/src/plugins/Makefile.am @@ -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 index 0000000000..13f537045c --- /dev/null +++ b/src/plugins/autocreate/Makefile.am @@ -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 index 0000000000..7f8042b47b --- /dev/null +++ b/src/plugins/autocreate/autocreate-plugin.c @@ -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 + +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 index 0000000000..d24d801eac --- /dev/null +++ b/src/plugins/autocreate/autocreate-plugin.h @@ -0,0 +1,7 @@ +#ifndef AUTOCREATE_PLUGIN_H +#define AUTOCREATE_PLUGIN_H + +void autocreate_plugin_init(void); +void autocreate_plugin_deinit(void); + +#endif