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