From: Timo Sirainen Date: Mon, 2 Jul 2012 11:54:33 +0000 (+0300) Subject: imap: Mailbox names in STATUS replies were sent as UTF-8 instead of mUTF-7. X-Git-Tag: 2.1.8~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a4f2e420ebf0478b92df9a8cb5bd2a36f3817a42;p=thirdparty%2Fdovecot%2Fcore.git imap: Mailbox names in STATUS replies were sent as UTF-8 instead of mUTF-7. --- diff --git a/src/imap/cmd-list.c b/src/imap/cmd-list.c index 7606733807..6fe7833c91 100644 --- a/src/imap/cmd-list.c +++ b/src/imap/cmd-list.c @@ -364,8 +364,9 @@ list_namespace_send_prefix(struct cmd_list_context *ctx, bool have_children) client_send_line(ctx->cmd->client, str_c(str)); } -static void list_send_status(struct cmd_list_context *ctx, const char *name, - enum mailbox_info_flags flags) +static void +list_send_status(struct cmd_list_context *ctx, const char *name, + const char *mutf7_name, enum mailbox_info_flags flags) { struct imap_status_result result; struct mail_namespace *ns; @@ -391,7 +392,8 @@ static void list_send_status(struct cmd_list_context *ctx, const char *name, return; } - imap_status_send(ctx->cmd->client, name, &ctx->status_items, &result); + imap_status_send(ctx->cmd->client, mutf7_name, + &ctx->status_items, &result); } static bool list_has_empty_prefix_ns(struct mail_user *user) @@ -481,7 +483,7 @@ list_namespace_mailboxes(struct cmd_list_context *ctx) ret = client_send_line(ctx->cmd->client, str_c(str)); if (ctx->used_status) T_BEGIN { - list_send_status(ctx, name, flags); + list_send_status(ctx, name, str_c(mutf7_name), flags); } T_END; if (ret == 0) { /* buffer is full, continue later */ diff --git a/src/imap/cmd-status.c b/src/imap/cmd-status.c index 000d2b51d6..91d8fd7ad7 100644 --- a/src/imap/cmd-status.c +++ b/src/imap/cmd-status.c @@ -13,7 +13,7 @@ bool cmd_status(struct client_command_context *cmd) struct imap_status_items items; struct imap_status_result result; struct mail_namespace *ns; - const char *mailbox, *error; + const char *mailbox, *orig_mailbox, *error; bool selected_mailbox; /* */ @@ -30,6 +30,7 @@ bool cmd_status(struct client_command_context *cmd) if (imap_status_parse_items(cmd, list_args, &items) < 0) return TRUE; + orig_mailbox = mailbox; ns = client_find_namespace(cmd, &mailbox); if (ns == NULL) return TRUE; @@ -42,7 +43,7 @@ bool cmd_status(struct client_command_context *cmd) return TRUE; } - imap_status_send(client, mailbox, &items, &result); + imap_status_send(client, orig_mailbox, &items, &result); if (!selected_mailbox) client_send_tagline(cmd, "OK Status completed."); else { diff --git a/src/imap/imap-status.c b/src/imap/imap-status.c index 79636279b7..2effe425f1 100644 --- a/src/imap/imap-status.c +++ b/src/imap/imap-status.c @@ -96,7 +96,7 @@ int imap_status_get(struct client_command_context *cmd, return ret; } -void imap_status_send(struct client *client, const char *mailbox, +void imap_status_send(struct client *client, const char *mailbox_mutf7, const struct imap_status_items *items, const struct imap_status_result *result) { @@ -106,7 +106,7 @@ void imap_status_send(struct client *client, const char *mailbox, str = t_str_new(128); str_append(str, "* STATUS "); - imap_quote_append_string(str, mailbox, FALSE); + imap_quote_append_string(str, mailbox_mutf7, FALSE); str_append(str, " ("); prefix_len = str_len(str); diff --git a/src/imap/imap-status.h b/src/imap/imap-status.h index 3e038a79c4..c67c05dd41 100644 --- a/src/imap/imap-status.h +++ b/src/imap/imap-status.h @@ -18,7 +18,7 @@ int imap_status_get(struct client_command_context *cmd, struct mail_namespace *ns, const char *mailbox, const struct imap_status_items *items, struct imap_status_result *result_r, const char **error_r); -void imap_status_send(struct client *client, const char *mailbox, +void imap_status_send(struct client *client, const char *mailbox_mutf7, const struct imap_status_items *items, const struct imap_status_result *result);