summaryrefslogtreecommitdiffstats
path: root/src/systemctl
diff options
context:
space:
mode:
Diffstat (limited to 'src/systemctl')
-rw-r--r--src/systemctl/systemctl-set-environment.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/systemctl/systemctl-set-environment.c b/src/systemctl/systemctl-set-environment.c
index 462924f5c9..ac1ec7d6fe 100644
--- a/src/systemctl/systemctl-set-environment.c
+++ b/src/systemctl/systemctl-set-environment.c
@@ -61,6 +61,12 @@ int show_environment(int argc, char *argv[], void *userdata) {
return 0;
}
+static void invalid_callback(const char *p, void *userdata) {
+ _cleanup_free_ char *t = cescape(p);
+
+ log_debug("Ignoring invalid environment assignment \"%s\".", strnull(t));
+}
+
int set_environment(int argc, char *argv[], void *userdata) {
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
@@ -112,9 +118,18 @@ int import_environment(int argc, char *argv[], void *userdata) {
if (r < 0)
return bus_log_create_error(r);
- if (argc < 2)
- r = sd_bus_message_append_strv(m, environ);
- else {
+ if (argc < 2) {
+ _cleanup_strv_free_ char **copy = NULL;
+
+ copy = strv_copy(environ);
+ if (!copy)
+ return log_oom();
+
+ strv_env_clean_with_callback(copy, invalid_callback, NULL);
+
+ r = sd_bus_message_append_strv(m, copy);
+
+ } else {
char **a, **b;
r = sd_bus_message_open_container(m, 'a', "s");