]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
config: import_environment - Allow spaces in values by separating them with tabs
authorKarl Fleischmann <karl.fleischmann@open-xchange.com>
Thu, 28 Aug 2025 15:44:03 +0000 (17:44 +0200)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Fri, 29 Aug 2025 12:45:28 +0000 (12:45 +0000)
src/config/config-parser.c
src/lib-master/master-service-settings.c
src/lib-master/master-service.c

index 0243a4b196f7e21c13a2ead11bfbc59e1f73dd9d..373cd13657c1700d9096382c85957b125db6d20f 100644 (file)
@@ -3601,14 +3601,15 @@ config_parsed_strlist_append(string_t *keyvals,
                i_assert(strlist[i + 1][0] == CONFIG_VALUE_PREFIX_EXPANDED);
 
                if (str_len(keyvals) > 0)
-                       str_append_c(keyvals, ' ');
+                       str_append_c(keyvals, '\t');
                for (j = 0; j < drop_len; j += 2) {
                        if (strcmp(strlist[i] + 1, drop_strlist[j]) == 0)
                                break;
                }
                if (j == drop_len) {
-                       str_printfa(keyvals, "%s=%s", strlist[i] + 1,
-                                   strlist[i + 1] + 1);
+                       str_append_tabescaped(keyvals, strlist[i] + 1);
+                       str_append_c(keyvals, '=');
+                       str_append_tabescaped(keyvals, strlist[i + 1] + 1);
                }
        }
 }
index 7d10707f3da54f6c26db55fe9819e7df135392fa..87892bc575c79346c1a1efdb68bcff49d9f7a64c 100644 (file)
@@ -19,6 +19,7 @@
 #include "stats-client.h"
 #include "master-service-private.h"
 #include "master-service-settings.h"
+#include "strescape.h"
 
 #include <unistd.h>
 #include <fcntl.h>
@@ -656,10 +657,12 @@ master_service_get_import_environment_keyvals(struct master_service *service)
        for (unsigned int i = 0; i < len; i += 2) {
                const char *const *key = array_idx(&arr, i);
                const char *const *val = array_idx(&arr, i + 1);
-               str_append(keyvals, t_strdup_printf("%s=%s", *key, *val));
+               str_append_tabescaped(keyvals, *key);
+               str_append_c(keyvals, '=');
+               str_append_tabescaped(keyvals, *val);
 
                if (i + 2 < len)
-                       str_append_c(keyvals, ' ');
+                       str_append_c(keyvals, '\t');
        }
        return str_c(keyvals);
 }
index 32faf1b2065d3902caeba8d773f7816de2731230..abac39c034ebd6cb04555fd5b4edabc95eb205ac 100644 (file)
@@ -1029,7 +1029,7 @@ static void master_service_import_environment_real(const char *import_environmen
        array_push_back(&keys, &value);
 #endif
        /* add new environments */
-       envs = t_strsplit_spaces(import_environment, " ");
+       envs = t_strsplit_tabescaped(import_environment);
        expanded = t_str_new(64);
        for (; *envs != NULL; envs++) {
                value = strchr(*envs, '=');