Mercurial > dovecot > core-2.2
changeset 13711:e0556ffd1527
lib-storage: Fixed using "auto" driver with shared namespaces.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 16 Nov 2011 19:39:33 +0200 |
parents | f11ce0efa6a8 |
children | 4bdfe947a0b2 |
files | src/lib-storage/index/shared/shared-storage.c src/lib-storage/index/shared/shared-storage.h |
diffstat | 2 files changed, 11 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- 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;
--- 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);