dovecot-2.0: Namespaces: Check alias_for namespaces after all na...
dovecot at dovecot.org
dovecot at dovecot.org
Wed Jun 24 03:09:40 EEST 2009
details: http://hg.dovecot.org/dovecot-2.0/rev/7ba2c40ed078
changeset: 9521:7ba2c40ed078
user: Timo Sirainen <tss at iki.fi>
date: Tue Jun 23 20:09:35 2009 -0400
description:
Namespaces: Check alias_for namespaces after all namespaces have been parsed.
diffstat:
1 file changed, 27 insertions(+), 22 deletions(-)
src/lib-storage/mail-namespace.c | 49 ++++++++++++++++++++------------------
diffs (87 lines):
diff -r 7c7ff145b171 -r 7ba2c40ed078 src/lib-storage/mail-namespace.c
--- a/src/lib-storage/mail-namespace.c Tue Jun 23 20:04:45 2009 -0400
+++ b/src/lib-storage/mail-namespace.c Tue Jun 23 20:09:35 2009 -0400
@@ -59,7 +59,6 @@ namespace_add(struct mail_user *user,
namespace_add(struct mail_user *user,
struct mail_namespace_settings *ns_set,
const struct mail_storage_settings *mail_set,
- struct mail_namespace *prev_namespaces,
struct mail_namespace **ns_p, const char **error_r)
{
struct mail_namespace *ns;
@@ -99,25 +98,6 @@ namespace_add(struct mail_user *user,
if (ns_set->subscriptions)
ns->flags |= NAMESPACE_FLAG_SUBSCRIPTIONS;
- if (ns_set->alias_for != NULL) {
- ns->alias_for = mail_namespace_find_prefix(prev_namespaces,
- ns_set->alias_for);
- if (ns->alias_for == NULL) {
- *error_r = t_strdup_printf("Invalid namespace alias_for: %s",
- ns_set->alias_for);
- mail_namespace_free(ns);
- return -1;
- }
- if (ns->alias_for->alias_for != NULL) {
- *error_r = t_strdup_printf("Chained namespace alias_for: %s",
- ns_set->alias_for);
- mail_namespace_free(ns);
- return -1;
- }
- ns->alias_chain_next = ns->alias_for->alias_chain_next;
- ns->alias_for->alias_chain_next = ns;
- }
-
if (mail_set->mail_debug) {
i_info("Namespace: type=%s, prefix=%s, sep=%s, "
"inbox=%s, hidden=%s, list=%s, subscriptions=%s",
@@ -155,6 +135,30 @@ namespace_add(struct mail_user *user,
return 0;
}
+static int
+namespace_set_alias_for(struct mail_namespace *ns,
+ struct mail_namespace *all_namespaces,
+ const char **error_r)
+{
+ if (ns->set->alias_for != NULL) {
+ ns->alias_for = mail_namespace_find_prefix(all_namespaces,
+ ns->set->alias_for);
+ if (ns->alias_for == NULL) {
+ *error_r = t_strdup_printf("Invalid namespace alias_for: %s",
+ ns->set->alias_for);
+ return -1;
+ }
+ if (ns->alias_for->alias_for != NULL) {
+ *error_r = t_strdup_printf("Chained namespace alias_for: %s",
+ ns->set->alias_for);
+ return -1;
+ }
+ ns->alias_chain_next = ns->alias_for->alias_chain_next;
+ ns->alias_for->alias_chain_next = ns;
+ }
+ return 0;
+}
+
static bool
namespaces_check(struct mail_namespace *namespaces, const char **error_r)
{
@@ -163,6 +167,8 @@ namespaces_check(struct mail_namespace *
char list_sep = '\0';
for (ns = namespaces; ns != NULL; ns = ns->next) {
+ if (namespace_set_alias_for(ns, namespaces, error_r) < 0)
+ return FALSE;
if ((ns->flags & NAMESPACE_FLAG_INBOX) != 0) {
if (inbox_ns != NULL) {
*error_r = "namespace configuration error: "
@@ -235,8 +241,7 @@ int mail_namespaces_init(struct mail_use
count = 0;
}
for (i = 0; i < count; i++) {
- if (namespace_add(user, ns_set[i], mail_set, namespaces,
- ns_p, error_r) < 0)
+ if (namespace_add(user, ns_set[i], mail_set, ns_p, error_r) < 0)
return -1;
ns_p = &(*ns_p)->next;
}
More information about the dovecot-cvs
mailing list