From 5b6d9011345388817880b456d4a87b26fa5805a2 Mon Sep 17 00:00:00 2001 From: Karl Fleischmann Date: Thu, 28 Aug 2025 17:44:03 +0200 Subject: [PATCH] config: import_environment - Allow spaces in values by separating them with tabs --- src/config/config-parser.c | 7 ++++--- src/lib-master/master-service-settings.c | 7 +++++-- src/lib-master/master-service.c | 2 +- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/config/config-parser.c b/src/config/config-parser.c index 0243a4b196..373cd13657 100644 --- a/src/config/config-parser.c +++ b/src/config/config-parser.c @@ -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); } } } diff --git a/src/lib-master/master-service-settings.c b/src/lib-master/master-service-settings.c index 7d10707f3d..87892bc575 100644 --- a/src/lib-master/master-service-settings.c +++ b/src/lib-master/master-service-settings.c @@ -19,6 +19,7 @@ #include "stats-client.h" #include "master-service-private.h" #include "master-service-settings.h" +#include "strescape.h" #include #include @@ -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); } diff --git a/src/lib-master/master-service.c b/src/lib-master/master-service.c index 32faf1b206..abac39c034 100644 --- a/src/lib-master/master-service.c +++ b/src/lib-master/master-service.c @@ -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, '='); -- 2.47.3