]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
imap: Mailbox names in STATUS replies were sent as UTF-8 instead of mUTF-7.
authorTimo Sirainen <tss@iki.fi>
Mon, 2 Jul 2012 11:54:33 +0000 (14:54 +0300)
committerTimo Sirainen <tss@iki.fi>
Mon, 2 Jul 2012 11:54:33 +0000 (14:54 +0300)
src/imap/cmd-list.c
src/imap/cmd-status.c
src/imap/imap-status.c
src/imap/imap-status.h

index 7606733807ee540e315ffab64d695c182322ba21..6fe7833c9133c286061b508acb0181f73bc44138 100644 (file)
@@ -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 */
index 000d2b51d6d9cee4bfd538c7368b887e1aed1423..91d8fd7ad73665aba940a0e462a4cf11627802d6 100644 (file)
@@ -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;
 
        /* <mailbox> <status items> */
@@ -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 {
index 79636279b72afff877738b5bd57f085a0cb61bfa..2effe425f176a9303870b85dd616f2e6fff9c034 100644 (file)
@@ -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);
index 3e038a79c47996feeb1e5ff09b76416c7e534ec4..c67c05dd412a1e877a33a0607aae16f357910adf 100644 (file)
@@ -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);