dovecot-2.0: Check that namespace's alias_for points to a namesp...
dovecot at dovecot.org
dovecot at dovecot.org
Fri Mar 19 15:35:14 EET 2010
details: http://hg.dovecot.org/dovecot-2.0/rev/566360ae12fc
changeset: 10950:566360ae12fc
user: Timo Sirainen <tss at iki.fi>
date: Fri Mar 19 15:35:11 2010 +0200
description:
Check that namespace's alias_for points to a namespace with compatible storage.
diffstat:
src/lib-storage/mail-namespace.c | 26 ++++++++++++++++++++++++++
1 files changed, 26 insertions(+), 0 deletions(-)
diffs (43 lines):
diff -r de26a4054910 -r 566360ae12fc src/lib-storage/mail-namespace.c
--- a/src/lib-storage/mail-namespace.c Fri Mar 19 15:34:39 2010 +0200
+++ b/src/lib-storage/mail-namespace.c Fri Mar 19 15:35:11 2010 +0200
@@ -137,6 +137,29 @@
return 0;
}
+static bool namespace_is_valid_alias_storage(struct mail_namespace *ns,
+ const char **error_r)
+{
+ if (strcmp(ns->storage->name, ns->alias_for->storage->name) != 0) {
+ *error_r = t_strdup_printf(
+ "Namespace %s can't have alias_for=%s "
+ "to a different storage type (%s vs %s)",
+ ns->prefix, ns->alias_for->prefix,
+ ns->storage->name, ns->alias_for->storage->name);
+ return FALSE;
+ }
+
+ if ((ns->storage->class_flags & MAIL_STORAGE_CLASS_FLAG_UNIQUE_ROOT) != 0 &&
+ ns->storage != ns->alias_for->storage) {
+ *error_r = t_strdup_printf(
+ "Namespace %s can't have alias_for=%s "
+ "to a different storage (different root dirs)",
+ ns->prefix, ns->alias_for->prefix);
+ return FALSE;
+ }
+ return TRUE;
+}
+
static int
namespace_set_alias_for(struct mail_namespace *ns,
struct mail_namespace *all_namespaces,
@@ -155,6 +178,9 @@
ns->set->alias_for);
return -1;
}
+ if (!namespace_is_valid_alias_storage(ns, error_r))
+ return -1;
+
ns->alias_chain_next = ns->alias_for->alias_chain_next;
ns->alias_for->alias_chain_next = ns;
}
More information about the dovecot-cvs
mailing list