dovecot-1.2: mail_location: Allow using ":" characters in dir na...
dovecot at dovecot.org
dovecot at dovecot.org
Mon Jun 22 05:14:25 EEST 2009
details: http://hg.dovecot.org/dovecot-1.2/rev/675f0df22f24
changeset: 9143:675f0df22f24
user: Timo Sirainen <tss at iki.fi>
date: Sun Jun 21 22:22:57 2009 -0400
description:
mail_location: Allow using ":" characters in dir names by escaping it as "::".
diffstat:
1 file changed, 28 insertions(+), 8 deletions(-)
src/lib-storage/mailbox-list.c | 36 ++++++++++++++++++++++++++++--------
diffs (67 lines):
diff -r 5ee5def4f0ff -r 675f0df22f24 src/lib-storage/mailbox-list.c
--- a/src/lib-storage/mailbox-list.c Wed Jun 17 13:05:40 2009 -0400
+++ b/src/lib-storage/mailbox-list.c Sun Jun 21 22:22:57 2009 -0400
@@ -118,13 +118,32 @@ static int fix_path(struct mail_namespac
return 0;
}
+static const char *split_next_arg(const char *const **_args)
+{
+ const char *const *args = *_args;
+ const char *str = args[0];
+
+ args++;
+ while (*args != NULL && **args == '\0') {
+ args++;
+ if (*args == NULL) {
+ str = t_strconcat(str, ":", NULL);
+ break;
+ }
+ str = t_strconcat(str, ":", *args, NULL);
+ args++;
+ }
+ *_args = args;
+ return str;
+}
+
int mailbox_list_settings_parse(const char *data,
struct mailbox_list_settings *set,
struct mail_namespace *ns,
const char **layout, const char **alt_dir_r,
const char **error_r)
{
- const char *const *tmp, *key, *value, **dest;
+ const char *const *tmp, *key, *value, **dest, *str;
i_assert(*data != '\0');
@@ -134,21 +153,22 @@ int mailbox_list_settings_parse(const ch
/* <root dir> */
tmp = t_strsplit(data, ":");
- if (fix_path(ns, *tmp, &set->root_dir) < 0) {
+ str = split_next_arg(&tmp);
+ if (fix_path(ns, str, &set->root_dir) < 0) {
*error_r = t_strdup_printf(
"Home directory not set, can't expand ~/ for "
"mail root dir in: %s", data);
return -1;
}
- tmp++;
-
- for (; *tmp != NULL; tmp++) {
- value = strchr(*tmp, '=');
+
+ while (*tmp != NULL) {
+ str = split_next_arg(&tmp);
+ value = strchr(str, '=');
if (value == NULL) {
- key = *tmp;
+ key = str;
value = "";
} else {
- key = t_strdup_until(*tmp, value);
+ key = t_strdup_until(str, value);
value++;
}
More information about the dovecot-cvs
mailing list