From: Timo Sirainen Date: Wed, 13 Jan 2021 16:47:11 +0000 (+0200) Subject: lib-storage: Rename mailbox_list_settings.escape_char to storage_name_escape_char X-Git-Tag: 2.3.14.rc1~56 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5cfd6cec1d7db175a94dcebf0c17c27d9d9d668c;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Rename mailbox_list_settings.escape_char to storage_name_escape_char This clarifies that it's only used in storage_names. --- diff --git a/src/lib-storage/index/imapc/imapc-list.c b/src/lib-storage/index/imapc/imapc-list.c index 3d0291ef8a..d2409d46b3 100644 --- a/src/lib-storage/index/imapc/imapc-list.c +++ b/src/lib-storage/index/imapc/imapc-list.c @@ -165,7 +165,7 @@ imapc_list_to_vname(struct imapc_mailbox_list *list, const char *imapc_name) so we need to use the remote IMAP separator. */ list_name = mailbox_list_escape_name_params(imapc_name, "", list->root_sep, mailbox_list_get_hierarchy_sep(&list->list), - list->list.set.escape_char, ""); + list->list.set.storage_name_escape_char, ""); /* list_name is now valid, so we can convert it to vname */ return mailbox_list_get_vname(&list->list, list_name); } @@ -174,7 +174,7 @@ const char *imapc_list_to_remote(struct imapc_mailbox_list *list, const char *na { return mailbox_list_unescape_name_params(name, "", list->root_sep, mailbox_list_get_hierarchy_sep(&list->list), - list->list.set.escape_char); + list->list.set.storage_name_escape_char); } static struct mailbox_node * @@ -393,7 +393,8 @@ static struct mailbox_list *imapc_list_get_fs(struct imapc_mailbox_list *list) mailbox_list_settings_init_defaults(&list_set); list_set.layout = MAILBOX_LIST_NAME_MAILDIRPLUSPLUS; list_set.root_dir = dir; - list_set.escape_char = IMAPC_LIST_ESCAPE_CHAR; + list_set.storage_name_escape_char = + IMAPC_LIST_STORAGE_NAME_ESCAPE_CHAR; list_set.broken_char = IMAPC_LIST_BROKEN_CHAR; if (mailbox_list_create(list_set.layout, list->list.ns, diff --git a/src/lib-storage/index/imapc/imapc-storage.c b/src/lib-storage/index/imapc/imapc-storage.c index 0234e7b2d4..4cae3d5d8d 100644 --- a/src/lib-storage/index/imapc/imapc-storage.c +++ b/src/lib-storage/index/imapc/imapc-storage.c @@ -478,7 +478,7 @@ imapc_storage_get_list_settings(const struct mail_namespace *ns ATTR_UNUSED, { if (set->layout == NULL) set->layout = MAILBOX_LIST_NAME_IMAPC; - set->escape_char = IMAPC_LIST_ESCAPE_CHAR; + set->storage_name_escape_char = IMAPC_LIST_STORAGE_NAME_ESCAPE_CHAR; } static struct mailbox * diff --git a/src/lib-storage/index/imapc/imapc-storage.h b/src/lib-storage/index/imapc/imapc-storage.h index 51d15a72e1..c5cf8e2769 100644 --- a/src/lib-storage/index/imapc/imapc-storage.h +++ b/src/lib-storage/index/imapc/imapc-storage.h @@ -6,7 +6,7 @@ #include "imapc-client.h" #define IMAPC_STORAGE_NAME "imapc" -#define IMAPC_LIST_ESCAPE_CHAR '%' +#define IMAPC_LIST_STORAGE_NAME_ESCAPE_CHAR '%' #define IMAPC_LIST_BROKEN_CHAR '~' struct imap_arg; diff --git a/src/lib-storage/mail-storage.c b/src/lib-storage/mail-storage.c index 1fd1c1fdfa..ce42ee038f 100644 --- a/src/lib-storage/mail-storage.c +++ b/src/lib-storage/mail-storage.c @@ -1229,11 +1229,12 @@ int mailbox_verify_name(struct mailbox *box) /* If namespace { separator } differs from the mailbox_list separator, the list separator can't actually be used in the mailbox name - unless it's escaped with escape_char. For example if namespace - separator is '/' and LAYOUT=Maildir++ has '.' as the separator, - there's no way to use '.' in the mailbox name (without escaping) - because it would end up becoming a hierarchy separator. */ - if (ns_sep != list_sep && box->list->set.escape_char == '\0' && + unless it's escaped with storage_name_escape_char. For example if + namespace separator is '/' and LAYOUT=Maildir++ has '.' as the + separator, there's no way to use '.' in the mailbox name (without + escaping) because it would end up becoming a hierarchy separator. */ + if (ns_sep != list_sep && + box->list->set.storage_name_escape_char == '\0' && strchr(vname, list_sep) != NULL) { mail_storage_set_error(box->storage, MAIL_ERROR_PARAMS, t_strdup_printf( "Character not allowed in mailbox name: '%c'", list_sep)); diff --git a/src/lib-storage/mailbox-list.c b/src/lib-storage/mailbox-list.c index 4b833bff10..5cbb27c635 100644 --- a/src/lib-storage/mailbox-list.c +++ b/src/lib-storage/mailbox-list.c @@ -199,7 +199,7 @@ int mailbox_list_create(const char *driver, struct mail_namespace *ns, list->set.mailbox_dir_name = p_strconcat(list->pool, set->mailbox_dir_name, "/", NULL); } - list->set.escape_char = set->escape_char; + list->set.storage_name_escape_char = set->storage_name_escape_char; list->set.broken_char = set->broken_char; list->set.utf8 = set->utf8; @@ -521,7 +521,8 @@ mailbox_list_escape_name(struct mailbox_list *list, const char *vname) return mailbox_list_escape_name_params(vname, list->ns->prefix, mail_namespace_get_sep(list->ns), mailbox_list_get_hierarchy_sep(list), - list->set.escape_char, list->set.maildir_name); + list->set.storage_name_escape_char, + list->set.maildir_name); } static int @@ -583,7 +584,7 @@ const char *mailbox_list_default_get_storage_name(struct mailbox_list *list, if (strcasecmp(storage_name, "INBOX") == 0 && (ns->flags & NAMESPACE_FLAG_INBOX_USER) != 0) storage_name = "INBOX"; - else if (list->set.escape_char != '\0') + else if (list->set.storage_name_escape_char != '\0') storage_name = mailbox_list_escape_name(list, vname); if (prefix_len > 0 && (strcmp(storage_name, "INBOX") != 0 || @@ -620,7 +621,7 @@ const char *mailbox_list_default_get_storage_name(struct mailbox_list *list, storage_name = "INBOX"; } - if (list_sep != ns_sep && list->set.escape_char == '\0') { + if (list_sep != ns_sep && list->set.storage_name_escape_char == '\0') { if (ns->type == MAIL_NAMESPACE_TYPE_SHARED && (ns->flags & NAMESPACE_FLAG_AUTOCREATED) == 0) { /* shared namespace root. the backend storage's @@ -695,7 +696,7 @@ mailbox_list_unescape_name(struct mailbox_list *list, const char *src) return mailbox_list_unescape_name_params(src, list->ns->prefix, mail_namespace_get_sep(list->ns), mailbox_list_get_hierarchy_sep(list), - list->set.escape_char); + list->set.storage_name_escape_char); } static void @@ -777,7 +778,7 @@ const char *mailbox_list_default_get_vname(struct mailbox_list *list, } prefix_len = strlen(list->ns->prefix); - if (list->set.escape_char != '\0') { + if (list->set.storage_name_escape_char != '\0') { vname = mailbox_list_unescape_name(list, vname); return prefix_len == 0 ? vname : t_strconcat(list->ns->prefix, vname, NULL); diff --git a/src/lib-storage/mailbox-list.h b/src/lib-storage/mailbox-list.h index ef476ae00c..7c6db5d536 100644 --- a/src/lib-storage/mailbox-list.h +++ b/src/lib-storage/mailbox-list.h @@ -143,7 +143,7 @@ struct mailbox_list_settings { const char *mailbox_dir_name; /* Encode "bad" characters in mailbox names as */ - char escape_char; + char storage_name_escape_char; /* If mailbox name can't be changed reversibly to UTF-8 and back, encode the problematic parts using in the user-visible UTF-8 name. The broken_char itself also has to be diff --git a/src/plugins/listescape/listescape-plugin.c b/src/plugins/listescape/listescape-plugin.c index fa24ae26b2..89fb1f97d3 100644 --- a/src/plugins/listescape/listescape-plugin.c +++ b/src/plugins/listescape/listescape-plugin.c @@ -13,9 +13,10 @@ static void listescape_mailbox_list_created(struct mailbox_list *list) { const char *env; - if (list->set.escape_char == '\0') { + if (list->set.storage_name_escape_char == '\0') { env = mail_user_plugin_getenv(list->ns->user, "listescape_char"); - list->set.escape_char = env != NULL && *env != '\0' ? + list->set.storage_name_escape_char = + env != NULL && *env != '\0' ? env[0] : DEFAULT_ESCAPE_CHAR; } }