From: Timo Sirainen Date: Mon, 14 Dec 2009 19:32:01 +0000 (-0500) Subject: plugins: Use mail_namespace_storage_added hook instead of mailbox_list_created. X-Git-Tag: 2.0.beta2~135 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=81c0e970da009d078dcdaa7c05990675d1352899;p=thirdparty%2Fdovecot%2Fcore.git plugins: Use mail_namespace_storage_added hook instead of mailbox_list_created. In mailbox_list_created the storage hasn't yet overridden the list functions. --HG-- branch : HEAD --- diff --git a/src/plugins/acl/acl-mailbox-list.c b/src/plugins/acl/acl-mailbox-list.c index 7539777023..930e352579 100644 --- a/src/plugins/acl/acl-mailbox-list.c +++ b/src/plugins/acl/acl-mailbox-list.c @@ -607,17 +607,17 @@ static void acl_mailbox_list_init_default(struct mailbox_list *list) MODULE_CONTEXT_SET(list, acl_mailbox_list_module, alist); } -void acl_mailbox_list_created(struct mailbox_list *list) +void acl_mail_namespace_storage_added(struct mail_namespace *ns) { - struct acl_user *auser = ACL_USER_CONTEXT(list->ns->user); + struct acl_user *auser = ACL_USER_CONTEXT(ns->user); if (auser == NULL) { /* ACLs disabled for this user */ - } else if ((list->ns->flags & NAMESPACE_FLAG_NOACL) != 0) { + } else if ((ns->flags & NAMESPACE_FLAG_NOACL) != 0) { /* no ACL checks for internal namespaces (lda, shared) */ - if (list->ns->type == NAMESPACE_SHARED) - acl_mailbox_list_init_shared(list); + if (ns->type == NAMESPACE_SHARED) + acl_mailbox_list_init_shared(ns->list); } else { - acl_mailbox_list_init_default(list); + acl_mailbox_list_init_default(ns->list); } } diff --git a/src/plugins/acl/acl-plugin.c b/src/plugins/acl/acl-plugin.c index 9ac8645ea7..8b8687512a 100644 --- a/src/plugins/acl/acl-plugin.c +++ b/src/plugins/acl/acl-plugin.c @@ -12,7 +12,7 @@ const char *acl_plugin_version = PACKAGE_VERSION; static struct mail_storage_hooks acl_mail_storage_hooks = { .mail_user_created = acl_mail_user_created, .mail_storage_created = acl_mail_storage_created, - .mailbox_list_created = acl_mailbox_list_created + .mail_namespace_storage_added = acl_mail_namespace_storage_added }; void acl_plugin_init(struct module *module) diff --git a/src/plugins/acl/acl-plugin.h b/src/plugins/acl/acl-plugin.h index 221bd68bbf..5a35037d44 100644 --- a/src/plugins/acl/acl-plugin.h +++ b/src/plugins/acl/acl-plugin.h @@ -40,7 +40,7 @@ extern MODULE_CONTEXT_DEFINE(acl_mailbox_list_module, &mailbox_list_module_register); void acl_mail_storage_created(struct mail_storage *storage); -void acl_mailbox_list_created(struct mailbox_list *list); +void acl_mail_namespace_storage_added(struct mail_namespace *ns); void acl_mail_user_created(struct mail_user *list); struct mailbox * diff --git a/src/plugins/lazy-expunge/lazy-expunge-plugin.c b/src/plugins/lazy-expunge/lazy-expunge-plugin.c index d56a953c1b..40058f1200 100644 --- a/src/plugins/lazy-expunge/lazy-expunge-plugin.c +++ b/src/plugins/lazy-expunge/lazy-expunge-plugin.c @@ -341,10 +341,11 @@ lazy_expunge_mailbox_list_delete(struct mailbox_list *list, const char *name) return 0; } -static void lazy_expunge_mailbox_list_created(struct mailbox_list *list) +static void lazy_expunge_mail_namespace_storage_added(struct mail_namespace *ns) { + struct mailbox_list *list = ns->list; struct lazy_expunge_mail_user *luser = - LAZY_EXPUNGE_USER_CONTEXT(list->ns->user); + LAZY_EXPUNGE_USER_CONTEXT(ns->user); struct lazy_expunge_mailbox_list *llist; const char *const *p; unsigned int i; @@ -353,13 +354,13 @@ static void lazy_expunge_mailbox_list_created(struct mailbox_list *list) quota plugin sees it */ p = t_strsplit_spaces(luser->env, " "); for (i = 0; i < LAZY_NAMESPACE_COUNT; i++, p++) { - if (strcmp(list->ns->prefix, *p) == 0) { - list->ns->flags |= NAMESPACE_FLAG_NOQUOTA; + if (strcmp(ns->prefix, *p) == 0) { + ns->flags |= NAMESPACE_FLAG_NOQUOTA; break; } } - if (luser != NULL && list->ns->type == NAMESPACE_PRIVATE) { + if (luser != NULL && ns->type == NAMESPACE_PRIVATE) { llist = p_new(list->pool, struct lazy_expunge_mailbox_list, 1); llist->module_ctx.super = list->v; list->v.delete_mailbox = lazy_expunge_mailbox_list_delete; @@ -421,7 +422,7 @@ static void lazy_expunge_mail_user_created(struct mail_user *user) static struct mail_storage_hooks lazy_expunge_mail_storage_hooks = { .mail_user_created = lazy_expunge_mail_user_created, .mail_namespaces_created = lazy_expunge_mail_namespaces_created, - .mailbox_list_created = lazy_expunge_mailbox_list_created, + .mail_namespace_storage_added = lazy_expunge_mail_namespace_storage_added, .mailbox_allocated = lazy_expunge_mailbox_allocated }; diff --git a/src/plugins/listescape/listescape-plugin.c b/src/plugins/listescape/listescape-plugin.c index 8cf3a00a9a..da140937f0 100644 --- a/src/plugins/listescape/listescape-plugin.c +++ b/src/plugins/listescape/listescape-plugin.c @@ -301,15 +301,16 @@ static void listescape_mail_storage_created(struct mail_storage *storage) MODULE_CONTEXT_SET(storage, listescape_storage_module, mstorage); } -static void listescape_mailbox_list_created(struct mailbox_list *list) +static void listescape_mail_namespace_storage_added(struct mail_namespace *ns) { + struct mailbox_list *list = ns->list; struct listescape_mailbox_list *mlist; const char *env; - if (list->hierarchy_sep == list->ns->sep) + if (list->hierarchy_sep == ns->sep) return; - list->ns->real_sep = list->ns->sep; + ns->real_sep = ns->sep; mlist = p_new(list->pool, struct listescape_mailbox_list, 1); mlist->module_ctx.super = list->v; @@ -333,7 +334,7 @@ static void listescape_mailbox_list_created(struct mailbox_list *list) static struct mail_storage_hooks listescape_mail_storage_hooks = { .mail_storage_created = listescape_mail_storage_created, - .mailbox_list_created = listescape_mailbox_list_created + .mail_namespace_storage_added = listescape_mail_namespace_storage_added }; void listescape_plugin_init(struct module *module) diff --git a/src/plugins/notify/notify-storage.c b/src/plugins/notify/notify-storage.c index c24d8c2a8f..97faf848d5 100644 --- a/src/plugins/notify/notify-storage.c +++ b/src/plugins/notify/notify-storage.c @@ -266,8 +266,9 @@ static void notify_mail_storage_created(struct mail_storage *storage) MODULE_CONTEXT_SET_SELF(storage, notify_storage_module, lstorage); } -static void notify_mailbox_list_created(struct mailbox_list *list) +static void notify_mail_namespace_storage_added(struct mail_namespace *ns) { + struct mailbox_list *list = ns->list; union mailbox_list_module_context *llist; llist = p_new(list->pool, union mailbox_list_module_context, 1); @@ -280,7 +281,7 @@ static void notify_mailbox_list_created(struct mailbox_list *list) static struct mail_storage_hooks notify_mail_storage_hooks = { .mail_storage_created = notify_mail_storage_created, - .mailbox_list_created = notify_mailbox_list_created + .mail_namespace_storage_added = notify_mail_namespace_storage_added }; void notify_plugin_init_storage(struct module *module) diff --git a/src/plugins/quota/quota-plugin.c b/src/plugins/quota/quota-plugin.c index 89dec660c4..184089b3da 100644 --- a/src/plugins/quota/quota-plugin.c +++ b/src/plugins/quota/quota-plugin.c @@ -13,7 +13,7 @@ static struct mail_storage_hooks quota_mail_storage_hooks = { .mail_user_created = quota_mail_user_created, .mail_namespaces_created = quota_mail_namespaces_created, .mail_storage_created = quota_mail_storage_created, - .mailbox_list_created = quota_mailbox_list_created + .mail_namespace_storage_added = quota_mail_namespace_storage_added }; void quota_plugin_init(struct module *module) diff --git a/src/plugins/quota/quota-plugin.h b/src/plugins/quota/quota-plugin.h index 2b0268ecdd..3686d12783 100644 --- a/src/plugins/quota/quota-plugin.h +++ b/src/plugins/quota/quota-plugin.h @@ -20,7 +20,7 @@ extern MODULE_CONTEXT_DEFINE(quota_user_module, &mail_user_module_register); void quota_mail_user_created(struct mail_user *user); void quota_mail_storage_created(struct mail_storage *storage); -void quota_mailbox_list_created(struct mailbox_list *list); +void quota_mail_namespace_storage_added(struct mail_namespace *ns); void quota_mail_namespaces_created(struct mail_namespace *namespaces); void quota_plugin_init(struct module *module); diff --git a/src/plugins/quota/quota-storage.c b/src/plugins/quota/quota-storage.c index 4b9db09999..d1b1932d57 100644 --- a/src/plugins/quota/quota-storage.c +++ b/src/plugins/quota/quota-storage.c @@ -528,23 +528,24 @@ quota_find_root_for_ns(struct quota *quota, struct mail_namespace *ns) return NULL; } -void quota_mailbox_list_created(struct mailbox_list *list) +void quota_mail_namespace_storage_added(struct mail_namespace *ns) { + struct mailbox_list *list = ns->list; struct quota_mailbox_list *qlist; struct quota *quota = NULL; struct quota_root *root; bool add; - if ((list->ns->flags & NAMESPACE_FLAG_NOQUOTA) != 0) + if ((ns->flags & NAMESPACE_FLAG_NOQUOTA) != 0) add = FALSE; - else if (list->ns->owner == NULL) { + else if (ns->owner == NULL) { /* see if we have a quota explicitly defined for this namespace */ - quota = quota_get_mail_user_quota(list->ns->user); - root = quota_find_root_for_ns(quota, list->ns); + quota = quota_get_mail_user_quota(ns->user); + root = quota_find_root_for_ns(quota, ns); add = root != NULL; if (root != NULL) - root->ns = list->ns; + root->ns = ns; } else { add = TRUE; } @@ -557,10 +558,10 @@ void quota_mailbox_list_created(struct mailbox_list *list) MODULE_CONTEXT_SET(list, quota_mailbox_list_module, qlist); /* register to owner's quota roots */ - quota = list->ns->owner != NULL ? - quota_get_mail_user_quota(list->ns->owner) : - quota_get_mail_user_quota(list->ns->user); - quota_add_user_namespace(quota, list->ns); + quota = ns->owner != NULL ? + quota_get_mail_user_quota(ns->owner) : + quota_get_mail_user_quota(ns->user); + quota_add_user_namespace(quota, ns); } }