dovecot-2.1: lib-storage: Fixed using "auto" driver with shared ...
dovecot at dovecot.org
dovecot at dovecot.org
Wed Nov 16 19:39:50 EET 2011
details: http://hg.dovecot.org/dovecot-2.1/rev/e0556ffd1527
changeset: 13711:e0556ffd1527
user: Timo Sirainen <tss at iki.fi>
date: Wed Nov 16 19:39:33 2011 +0200
description:
lib-storage: Fixed using "auto" driver with shared namespaces.
diffstat:
src/lib-storage/index/shared/shared-storage.c | 14 ++++++++++----
src/lib-storage/index/shared/shared-storage.h | 2 +-
2 files changed, 11 insertions(+), 5 deletions(-)
diffs (61 lines):
diff -r f11ce0efa6a8 -r e0556ffd1527 src/lib-storage/index/shared/shared-storage.c
--- a/src/lib-storage/index/shared/shared-storage.c Wed Nov 16 19:39:18 2011 +0200
+++ b/src/lib-storage/index/shared/shared-storage.c Wed Nov 16 19:39:33 2011 +0200
@@ -31,6 +31,7 @@
const char **error_r)
{
struct shared_storage *storage = (struct shared_storage *)_storage;
+ struct mail_storage *storage_class;
const char *driver, *p;
char *wildcardp, key;
bool have_username;
@@ -45,13 +46,14 @@
storage->location = p_strdup(_storage->pool, ns->set->location);
storage->unexpanded_location =
p_strdup(_storage->pool, ns->unexpanded_set->location);
- storage->storage_class = mail_storage_find_class(driver);
- if (storage->storage_class == NULL) {
+ storage_class = mail_storage_find_class(driver);
+ if (storage_class != NULL)
+ _storage->class_flags = storage_class->class_flags;
+ else if (strcmp(driver, "auto") != 0) {
*error_r = t_strconcat("Unknown shared storage driver: ",
driver, NULL);
return -1;
}
- _storage->class_flags = storage->storage_class->class_flags;
wildcardp = strchr(ns->prefix, '%');
if (wildcardp == NULL) {
@@ -106,7 +108,7 @@
{
/* user wasn't found. we'll still need to create the storage
to avoid exposing which users exist and which don't. */
- str_append(location, storage->storage_class->name);
+ str_append(location, storage->storage_class_name);
str_append_c(location, ':');
/* use a reachable but nonexistent path as the mail root directory */
@@ -309,6 +311,10 @@
*_name = mailbox_list_get_storage_name(new_ns->list,
t_strconcat(new_ns->prefix, name, NULL));
*_ns = new_ns;
+ if (_storage->class_flags == 0) {
+ /* flags are unset if we were using "auto" storage */
+ _storage->class_flags = new_ns->storage->class_flags;
+ }
mail_user_add_namespace(user, &new_ns);
return 0;
diff -r f11ce0efa6a8 -r e0556ffd1527 src/lib-storage/index/shared/shared-storage.h
--- a/src/lib-storage/index/shared/shared-storage.h Wed Nov 16 19:39:18 2011 +0200
+++ b/src/lib-storage/index/shared/shared-storage.h Wed Nov 16 19:39:33 2011 +0200
@@ -10,7 +10,7 @@
const char *ns_prefix_pattern;
const char *location, *unexpanded_location;
- struct mail_storage *storage_class;
+ const char *storage_class_name;
};
struct mailbox_list *shared_mailbox_list_alloc(void);
More information about the dovecot-cvs
mailing list