Mercurial > dovecot > original-hg > dovecot-1.2
changeset 8295:f40ebb033a1b HEAD
Added autocreate plugin.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sat, 18 Oct 2008 21:36:54 +0300 |
parents | 8aa69e3d27ef |
children | 698fca0d8b0a |
files | configure.in src/plugins/Makefile.am src/plugins/autocreate/Makefile.am src/plugins/autocreate/autocreate-plugin.c src/plugins/autocreate/autocreate-plugin.h |
diffstat | 5 files changed, 118 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/configure.in Sat Oct 18 21:31:18 2008 +0300 +++ b/configure.in Sat Oct 18 21:36:54 2008 +0300 @@ -2440,6 +2440,7 @@ 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
--- a/src/plugins/Makefile.am Sat Oct 18 21:31:18 2008 +0300 +++ b/src/plugins/Makefile.am Sat Oct 18 21:36:54 2008 +0300 @@ -11,6 +11,19 @@ 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)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/plugins/autocreate/Makefile.am Sat Oct 18 21:36:54 2008 +0300 @@ -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 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/plugins/autocreate/autocreate-plugin.c Sat Oct 18 21:36:54 2008 +0300 @@ -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; +}