Mercurial > dovecot > core-2.2
changeset 13438:92ab9fa4ec36
imapc: Use mUTF-7 for mailbox names.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 09 Sep 2011 12:57:36 +0300 |
parents | ec947cc9c9c7 |
children | 0801852b2156 |
files | src/lib-storage/index/imapc/imapc-list.c src/lib-storage/index/imapc/imapc-save.c src/lib-storage/index/imapc/imapc-storage.c src/lib-storage/index/imapc/imapc-storage.h |
diffstat | 4 files changed, 34 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/imapc/imapc-list.c Thu Sep 08 16:52:32 2011 +0300 +++ b/src/lib-storage/index/imapc/imapc-list.c Fri Sep 09 12:57:36 2011 +0300 @@ -1,8 +1,10 @@ /* Copyright (c) 2011 Dovecot authors, see the included COPYING file */ #include "lib.h" +#include "str.h" #include "imap-arg.h" #include "imap-match.h" +#include "imap-utf7.h" #include "mailbox-tree.h" #include "mailbox-list-subscriptions.h" #include "imapc-client.h" @@ -82,10 +84,20 @@ flags++; } - if ((info_flags & MAILBOX_NONEXISTENT) != 0) - node = mailbox_tree_lookup(tree, name); - else - node = mailbox_tree_get(tree, name, &created); + T_BEGIN { + string_t *utf8_name = t_str_new(64); + + if (imap_utf7_to_utf8(name, utf8_name)) { + str_truncate(utf8_name, 0); + str_append(utf8_name, name); + } + if ((info_flags & MAILBOX_NONEXISTENT) != 0) + node = mailbox_tree_lookup(tree, str_c(utf8_name)); + else { + node = mailbox_tree_get(tree, str_c(utf8_name), + &created); + } + } T_END; if (node != NULL) node->flags = info_flags; return node;
--- a/src/lib-storage/index/imapc/imapc-save.c Thu Sep 08 16:52:32 2011 +0300 +++ b/src/lib-storage/index/imapc/imapc-save.c Fri Sep 09 12:57:36 2011 +0300 @@ -335,7 +335,8 @@ imapc_client_mailbox_cmdf(src_mbox->client_box, imapc_copy_callback, &sctx, "UID COPY %u %s", - mail->uid, _t->box->name); + mail->uid, + imapc_mutf7_mailbox_name(_t->box)); while (sctx.ret == -2) imapc_storage_run(src_mbox->storage); ctx->finished = TRUE;
--- a/src/lib-storage/index/imapc/imapc-storage.c Thu Sep 08 16:52:32 2011 +0300 +++ b/src/lib-storage/index/imapc/imapc-storage.c Fri Sep 09 12:57:36 2011 +0300 @@ -5,6 +5,7 @@ #include "str.h" #include "imap-arg.h" #include "imap-resp-code.h" +#include "imap-utf7.h" #include "imapc-mail.h" #include "imapc-client-private.h" #include "imapc-connection.h" @@ -362,6 +363,15 @@ imapc_client_stop(ctx->mbox->storage->client); } +const char *imapc_mutf7_mailbox_name(struct mailbox *box) +{ + const char *mutf7_name; + + if (t_imap_utf8_to_utf7(box->name, &mutf7_name) < 0) + i_unreached(); + return mutf7_name; +} + static int imapc_mailbox_open(struct mailbox *box) { struct imapc_mailbox *mbox = (struct imapc_mailbox *)box; @@ -383,8 +393,8 @@ ctx.ret = -2; mbox->client_box = imapc_client_mailbox_open(mbox->storage->client, - box->name, examine, - imapc_mailbox_open_callback, + imapc_mutf7_mailbox_name(box), + examine, imapc_mailbox_open_callback, &ctx, mbox); while (ctx.ret == -2) imapc_storage_run(mbox->storage); @@ -424,7 +434,7 @@ { struct imapc_mailbox *mbox = (struct imapc_mailbox *)box; struct imapc_simple_context sctx; - const char *name = box->name; + const char *name = imapc_mutf7_mailbox_name(box); if (directory) { name = t_strdup_printf("%s%c", name, @@ -544,7 +554,8 @@ mbox->storage->cur_status = status_r; imapc_client_cmdf(mbox->storage->client, imapc_simple_callback, &sctx, - "STATUS %s (%1s)", box->name, str_c(str)+1); + "STATUS %s (%1s)", imapc_mutf7_mailbox_name(box), + str_c(str)+1); imapc_simple_run(&sctx); mbox->storage->cur_status_box = NULL; mbox->storage->cur_status = NULL;
--- a/src/lib-storage/index/imapc/imapc-storage.h Thu Sep 08 16:52:32 2011 +0300 +++ b/src/lib-storage/index/imapc/imapc-storage.h Fri Sep 09 12:57:36 2011 +0300 @@ -90,6 +90,7 @@ void imapc_storage_run(struct imapc_storage *storage); +const char *imapc_mutf7_mailbox_name(struct mailbox *box); void imapc_copy_error_from_reply(struct imapc_storage *storage, enum mail_error default_error, const struct imapc_command_reply *reply);