dovecot-2.1: Added new mail_location setting "UTF8" to use UTF-8...
dovecot at dovecot.org
dovecot at dovecot.org
Wed Sep 21 17:52:19 EEST 2011
details: http://hg.dovecot.org/dovecot-2.1/rev/fbbf2802e11f
changeset: 13537:fbbf2802e11f
user: Timo Sirainen <tss at iki.fi>
date: Wed Sep 21 17:51:59 2011 +0300
description:
Added new mail_location setting "UTF8" to use UTF-8 instead of mUTF-7 in storage names.
This basically changes mailbox names to be UTF-8 everywhere where they are
mUTF-7 currently (filesystem, subscriptions, etc.)
diffstat:
src/lib-storage/mailbox-list.c | 27 +++++++++++++++++++--------
src/lib-storage/mailbox-list.h | 2 ++
2 files changed, 21 insertions(+), 8 deletions(-)
diffs (87 lines):
diff -r 9a42e3690b1b -r fbbf2802e11f src/lib-storage/mailbox-list.c
--- a/src/lib-storage/mailbox-list.c Wed Sep 21 16:18:19 2011 +0300
+++ b/src/lib-storage/mailbox-list.c Wed Sep 21 17:51:59 2011 +0300
@@ -14,6 +14,7 @@
#include "write-full.h"
#include "safe-mkstemp.h"
#include "unlink-directory.h"
+#include "unichar.h"
#include "settings-parser.h"
#include "imap-match.h"
#include "imap-utf7.h"
@@ -185,6 +186,7 @@
list->set.mailbox_dir_name =
p_strconcat(list->pool, set->mailbox_dir_name, "/", NULL);
}
+ list->set.utf8 = set->utf8;
if (ns->mail_set->mail_debug) {
i_debug("%s: root=%s, index=%s, control=%s, inbox=%s, alt=%s",
@@ -281,6 +283,11 @@
while (*tmp != NULL) {
str = split_next_arg(&tmp);
+ if (strcmp(str, "UTF-8") == 0) {
+ set_r->utf8 = TRUE;
+ continue;
+ }
+
value = strchr(str, '=');
if (value == NULL) {
key = str;
@@ -421,11 +428,13 @@
}
}
- /* UTF-8 -> mUTF-7 conversion */
- str = t_str_new(strlen(storage_name)*2);
- if (imap_utf8_to_utf7(storage_name, str) < 0)
- i_panic("Mailbox name not UTF-8: %s", vname);
- storage_name = str_c(str);
+ if (!list->set.utf8) {
+ /* UTF-8 -> mUTF-7 conversion */
+ str = t_str_new(strlen(storage_name)*2);
+ if (imap_utf8_to_utf7(storage_name, str) < 0)
+ i_panic("Mailbox name not UTF-8: %s", vname);
+ storage_name = str_c(str);
+ }
list_sep = mailbox_list_get_hierarchy_sep(list);
ns_sep = mail_namespace_get_sep(ns);
@@ -505,7 +514,7 @@
return t_strndup(list->ns->prefix,
list->ns->prefix_len - 1);
}
- } else {
+ } else if (!list->set.utf8) {
/* mUTF-7 -> UTF-8 conversion */
string_t *str = t_str_new(strlen(vname));
if (imap_utf7_to_utf8(vname, str) == 0)
@@ -885,11 +894,13 @@
/* safer to just disallow all control characters */
for (p = name; *p != '\0'; p++) {
- if (*p < ' ')
+ if ((unsigned char)*p < ' ')
return FALSE;
}
- T_BEGIN {
+ if (list->set.utf8)
+ ret = uni_utf8_str_is_valid(name) ? 0 : -1;
+ else T_BEGIN {
string_t *str = t_str_new(256);
ret = imap_utf7_to_utf8(name, str);
} T_END;
diff -r 9a42e3690b1b -r fbbf2802e11f src/lib-storage/mailbox-list.h
--- a/src/lib-storage/mailbox-list.h Wed Sep 21 16:18:19 2011 +0300
+++ b/src/lib-storage/mailbox-list.h Wed Sep 21 17:51:59 2011 +0300
@@ -135,6 +135,8 @@
/* Encode "bad" characters in mailbox names as <escape_char><hex> */
char escape_char;
+ /* Use UTF-8 mailbox names on filesystem instead of mUTF-7 */
+ bool utf8;
};
struct mailbox_info {
More information about the dovecot-cvs
mailing list