dovecot-2.2: dsync: Added assert to make sure namespace prefix i...
dovecot at dovecot.org
dovecot at dovecot.org
Thu Feb 5 17:36:39 UTC 2015
details: http://hg.dovecot.org/dovecot-2.2/rev/560043558dd6
changeset: 18220:560043558dd6
user: Timo Sirainen <tss at iki.fi>
date: Thu Feb 05 19:36:29 2015 +0200
description:
dsync: Added assert to make sure namespace prefix isn't attempted to be renamed.
This can happen, I'm just not sure how exactly.. The previous behavior
caused assert-crashes also, this change just makes it happen earlier.
diffstat:
src/doveadm/dsync/dsync-mailbox-tree-sync.c | 18 ++++++++++++++++++
src/doveadm/dsync/test-dsync-mailbox-tree-sync.c | 5 +++++
2 files changed, 23 insertions(+), 0 deletions(-)
diffs (50 lines):
diff -r 00a57ac1b9fa -r 560043558dd6 src/doveadm/dsync/dsync-mailbox-tree-sync.c
--- a/src/doveadm/dsync/dsync-mailbox-tree-sync.c Thu Feb 05 19:20:17 2015 +0200
+++ b/src/doveadm/dsync/dsync-mailbox-tree-sync.c Thu Feb 05 19:36:29 2015 +0200
@@ -357,6 +357,22 @@
return node_has_existent_children(node, TRUE);
}
+static bool sync_node_is_namespace_prefix(struct dsync_mailbox_tree *tree,
+ struct dsync_mailbox_node *node)
+{
+ const char *full_name;
+ unsigned int prefix_len = node->ns->prefix_len;
+
+ if (prefix_len == 0)
+ return FALSE;
+
+ full_name = dsync_mailbox_node_get_full_name(tree, node);
+ if (node->ns->prefix[prefix_len-1] == mail_namespace_get_sep(node->ns))
+ prefix_len--;
+ return strncmp(full_name, node->ns->prefix, prefix_len) == 0 &&
+ full_name[prefix_len] == '\0';
+}
+
static void
sync_rename_node_to_temp(struct dsync_mailbox_tree_sync_ctx *ctx,
struct dsync_mailbox_tree *tree,
@@ -369,6 +385,8 @@
buffer_t buf;
unsigned int prefix_len, max_prefix_len, counter = 1;
+ i_assert(!sync_node_is_namespace_prefix(tree, node));
+
buffer_create_from_data(&buf, name, sizeof(name));
max_prefix_len = TEMP_MAX_NAME_LEN - TEMP_SUFFIX_MAX_LEN - 1;
if (node->sync_temporary_name) {
diff -r 00a57ac1b9fa -r 560043558dd6 src/doveadm/dsync/test-dsync-mailbox-tree-sync.c
--- a/src/doveadm/dsync/test-dsync-mailbox-tree-sync.c Thu Feb 05 19:20:17 2015 +0200
+++ b/src/doveadm/dsync/test-dsync-mailbox-tree-sync.c Thu Feb 05 19:36:29 2015 +0200
@@ -12,6 +12,11 @@
#define MAX_DEPTH 4
+char mail_namespace_get_sep(struct mail_namespace *ns ATTR_UNUSED)
+{
+ return '/';
+}
+
void mailbox_name_get_sha128(const char *name, guid_128_t guid_128_r)
{
unsigned char sha[SHA1_RESULTLEN];
More information about the dovecot-cvs
mailing list