changeset 19561:bac33082d68a

imapc: Fixed mailbox name escaping for CREATE, DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Thu, 14 Jan 2016 18:52:01 +0200
parents 5e6afd3b67b6
children 388bd0863909
files src/lib-storage/index/imapc/imapc-list.c src/lib-storage/index/imapc/imapc-storage.c
diffstat 2 files changed, 15 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/imapc/imapc-list.c	Thu Jan 14 18:50:23 2016 +0200
+++ b/src/lib-storage/index/imapc/imapc-list.c	Thu Jan 14 18:52:01 2016 +0200
@@ -810,7 +810,8 @@
 	struct imapc_simple_context ctx;
 
 	cmd = imapc_list_simple_context_init(&ctx, list);
-	imapc_command_sendf(cmd, set ? "SUBSCRIBE %s" : "UNSUBSCRIBE %s", name);
+	imapc_command_sendf(cmd, set ? "SUBSCRIBE %s" : "UNSUBSCRIBE %s",
+			    imapc_list_to_remote(list, name));
 	imapc_simple_run(&ctx);
 	return ctx.ret;
 }
@@ -839,7 +840,7 @@
 	}
 
 	cmd = imapc_list_simple_context_init(&ctx, list);
-	imapc_command_sendf(cmd, "DELETE %s", name);
+	imapc_command_sendf(cmd, "DELETE %s", imapc_list_to_remote(list, name));
 	imapc_simple_run(&ctx);
 
 	if (fs_list != NULL && ctx.ret == 0) {
@@ -886,7 +887,9 @@
 	}
 
 	cmd = imapc_list_simple_context_init(&ctx, list);
-	imapc_command_sendf(cmd, "RENAME %s %s", oldname, newname);
+	imapc_command_sendf(cmd, "RENAME %s %s",
+			    imapc_list_to_remote(list, oldname),
+			    imapc_list_to_remote(list, newname));
 	imapc_simple_run(&ctx);
 	if (ctx.ret == 0 && fs_list != NULL && oldlist == newlist) {
 		oldname = imapc_list_get_fs_name(list, oldname);
--- a/src/lib-storage/index/imapc/imapc-storage.c	Thu Jan 14 18:50:23 2016 +0200
+++ b/src/lib-storage/index/imapc/imapc-storage.c	Thu Jan 14 18:52:01 2016 +0200
@@ -642,11 +642,17 @@
 	struct imapc_mailbox *mbox = (struct imapc_mailbox *)box;
 	struct imapc_command *cmd;
 	struct imapc_simple_context sctx;
-	const char *name = box->name;
+	const char *name = imapc_mailbox_get_remote_name(mbox);
 
-	if (directory) {
+	if (!directory)
+		;
+	else if (strcmp(box->list->name, MAILBOX_LIST_NAME_IMAPC) == 0) {
+		struct imapc_mailbox_list *imapc_list =
+			(struct imapc_mailbox_list *)box->list;
+		name = t_strdup_printf("%s%c", name, imapc_list->root_sep);
+	} else {
 		name = t_strdup_printf("%s%c", name,
-				mailbox_list_get_hierarchy_sep(box->list));
+			mailbox_list_get_hierarchy_sep(box->list));
 	}
 	imapc_simple_context_init(&sctx, mbox->storage->client);
 	cmd = imapc_client_cmd(mbox->storage->client->client,