dovecot-2.2: imapc: Added imapc_list_prefix setting to limit wha...
dovecot at dovecot.org
dovecot at dovecot.org
Sun May 20 03:26:33 EEST 2012
details: http://hg.dovecot.org/dovecot-2.2/rev/03f44d61d582
changeset: 14495:03f44d61d582
user: Timo Sirainen <tss at iki.fi>
date: Fri Apr 20 22:27:01 2012 +0300
description:
imapc: Added imapc_list_prefix setting to limit what mailboxes are accessed.
diffstat:
src/lib-storage/index/imapc/imapc-list.c | 49 +++++++++++++++++++++++++--
src/lib-storage/index/imapc/imapc-settings.c | 2 +
src/lib-storage/index/imapc/imapc-settings.h | 1 +
3 files changed, 47 insertions(+), 5 deletions(-)
diffs (124 lines):
diff -r d27b743c9921 -r 03f44d61d582 src/lib-storage/index/imapc/imapc-list.c
--- a/src/lib-storage/index/imapc/imapc-list.c Fri Apr 20 19:09:55 2012 +0300
+++ b/src/lib-storage/index/imapc/imapc-list.c Fri Apr 20 22:27:01 2012 +0300
@@ -92,7 +92,7 @@
T_BEGIN {
const char *vname =
- mailbox_list_default_get_vname(&list->list, name);
+ mailbox_list_get_vname(&list->list, name);
if ((info_flags & MAILBOX_NONEXISTENT) != 0)
node = mailbox_tree_lookup(tree, vname);
@@ -191,6 +191,37 @@
return list->sep;
}
+static const char *
+imapc_list_get_storage_name(struct mailbox_list *_list, const char *vname)
+{
+ struct imapc_mailbox_list *list = (struct imapc_mailbox_list *)_list;
+ const char *prefix = list->storage->set->imapc_list_prefix;
+ const char *storage_name;
+
+ storage_name = mailbox_list_default_get_storage_name(_list, vname);
+ if (*prefix != '\0') {
+ storage_name = t_strdup_printf("%s%c%s", prefix, list->sep,
+ storage_name);
+ }
+ return storage_name;
+}
+
+static const char *
+imapc_list_get_vname(struct mailbox_list *_list, const char *storage_name)
+{
+ struct imapc_mailbox_list *list = (struct imapc_mailbox_list *)_list;
+ const char *prefix = list->storage->set->imapc_list_prefix;
+ unsigned int prefix_len;
+
+ if (*prefix != '\0') {
+ prefix_len = strlen(prefix);
+ i_assert(strncmp(prefix, storage_name, prefix_len) == 0 &&
+ storage_name[prefix_len] == list->sep);
+ storage_name += prefix_len+1;
+ }
+ return mailbox_list_default_get_vname(_list, storage_name);
+}
+
static struct mailbox_list *imapc_list_get_fs(struct imapc_mailbox_list *list)
{
struct mailbox_list_settings list_set;
@@ -313,14 +344,22 @@
{
struct imapc_command *cmd;
struct imapc_simple_context ctx;
+ const char *pattern;
i_assert(list->sep != '\0');
if (list->refreshed_mailboxes)
return 0;
+ if (*list->storage->set->imapc_list_prefix == '\0')
+ pattern = "*";
+ else {
+ pattern = t_strdup_printf("%s%c*",
+ list->storage->set->imapc_list_prefix, list->sep);
+ }
+
cmd = imapc_list_simple_context_init(&ctx, list);
- imapc_command_send(cmd, "LIST \"\" *");
+ imapc_command_sendf(cmd, "LIST \"\" %s", pattern);
mailbox_tree_deinit(&list->mailboxes);
list->mailboxes = mailbox_tree_init(list->sep);
@@ -611,7 +650,7 @@
i_assert(list->sep != '\0');
- vname = mailbox_list_default_get_vname(_list, name);
+ vname = mailbox_list_get_vname(_list, name);
if (!list->refreshed_mailboxes) {
node = mailbox_tree_lookup(list->mailboxes, vname);
if (node != NULL)
@@ -646,8 +685,8 @@
imapc_is_valid_existing_name,
imapc_is_valid_create_name,
imapc_list_get_hierarchy_sep,
- mailbox_list_default_get_vname,
- mailbox_list_default_get_storage_name,
+ imapc_list_get_vname,
+ imapc_list_get_storage_name,
imapc_list_get_path,
imapc_list_get_temp_prefix,
imapc_list_join_refpattern,
diff -r d27b743c9921 -r 03f44d61d582 src/lib-storage/index/imapc/imapc-settings.c
--- a/src/lib-storage/index/imapc/imapc-settings.c Fri Apr 20 19:09:55 2012 +0300
+++ b/src/lib-storage/index/imapc/imapc-settings.c Fri Apr 20 22:27:01 2012 +0300
@@ -27,6 +27,7 @@
DEF(SET_STR, imapc_features),
DEF(SET_STR, imapc_rawlog_dir),
+ DEF(SET_STR, imapc_list_prefix),
DEF(SET_STR, ssl_crypto_device),
SETTING_DEFINE_LIST_END
@@ -46,6 +47,7 @@
.imapc_features = "",
.imapc_rawlog_dir = "",
+ .imapc_list_prefix = "",
.ssl_crypto_device = ""
};
diff -r d27b743c9921 -r 03f44d61d582 src/lib-storage/index/imapc/imapc-settings.h
--- a/src/lib-storage/index/imapc/imapc-settings.h Fri Apr 20 19:09:55 2012 +0300
+++ b/src/lib-storage/index/imapc/imapc-settings.h Fri Apr 20 22:27:01 2012 +0300
@@ -22,6 +22,7 @@
const char *imapc_features;
const char *imapc_rawlog_dir;
+ const char *imapc_list_prefix;
const char *ssl_crypto_device;
enum imapc_features parsed_features;
More information about the dovecot-cvs
mailing list