From: Timo Sirainen Date: Tue, 4 Aug 2009 18:35:21 +0000 (-0400) Subject: imap: Fixed tb-extra-mailbox-sep workeround. X-Git-Tag: 2.0.alpha1~330 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5f50f9c00ebda9dc00a0fbbcfd875e0e68480c77;p=thirdparty%2Fdovecot%2Fcore.git imap: Fixed tb-extra-mailbox-sep workeround. --HG-- branch : HEAD --- diff --git a/src/imap/cmd-delete.c b/src/imap/cmd-delete.c index 8db06484a1..ba50480611 100644 --- a/src/imap/cmd-delete.c +++ b/src/imap/cmd-delete.c @@ -34,13 +34,6 @@ bool cmd_delete(struct client_command_context *cmd) } mailbox_close(&mailbox); - if ((client->workarounds & WORKAROUND_TB_EXTRA_MAILBOX_SEP) != 0 && - *name != '\0' && - name[strlen(name)-1] == mailbox_list_get_hierarchy_sep(ns->list)) { - /* drop the extra trailing hierarchy separator */ - name = t_strndup(name, strlen(name)-1); - } - if (mailbox_list_delete_mailbox(ns->list, name) < 0) client_send_list_error(cmd, ns->list); else { diff --git a/src/imap/imap-commands-util.c b/src/imap/imap-commands-util.c index 5a16ae1853..3b890ddd6b 100644 --- a/src/imap/imap-commands-util.c +++ b/src/imap/imap-commands-util.c @@ -26,6 +26,7 @@ client_find_namespace(struct client_command_context *cmd, const char **mailboxp, struct mail_namespace *ns; enum mailbox_name_status mailbox_status; const char *orig_mailbox, *mailbox, *p, *resp_code = NULL; + unsigned int mailbox_len; orig_mailbox = *mailboxp; ns = mail_namespace_find(cmd->client->user->namespaces, mailboxp); @@ -44,6 +45,14 @@ client_find_namespace(struct client_command_context *cmd, const char **mailboxp, return NULL; } + mailbox_len = strlen(mailbox); + if ((cmd->client->workarounds & WORKAROUND_TB_EXTRA_MAILBOX_SEP) != 0 && + mailbox[mailbox_len-1] == mailbox_list_get_hierarchy_sep(ns->list)) { + /* drop the extra trailing hierarchy separator */ + mailbox = t_strndup(mailbox, mailbox_len-1); + *mailboxp = mailbox; + } + if (ns->real_sep != ns->sep && ns->prefix_len < strlen(orig_mailbox)) { /* make sure there are no real separators used in the mailbox name. */ @@ -67,7 +76,7 @@ client_find_namespace(struct client_command_context *cmd, const char **mailboxp, } } - if (strlen(mailbox) > MAILBOX_MAX_NAME_LEN) { + if (mailbox_len > MAILBOX_MAX_NAME_LEN) { client_send_tagline(cmd, "NO Mailbox name too long."); return NULL; }