Skip to content

Commit

Permalink
systemctl: ignore invalid variables in import-environment
Browse files Browse the repository at this point in the history
When doing import-environment, we shouldn't fail if some assignment is invalid.
OTOH, if the invalid assignment is specified as a positional argument, we should
keep failing.

This would also fix https://bugzilla.redhat.com/show_bug.cgi?id=1754395, by
ignoring certain variables which are not important in that scenario. It seems
like the right thing to do in general.
  • Loading branch information
keszybz committed Oct 12, 2020
1 parent b45c068 commit a4ccce2
Showing 1 changed file with 18 additions and 3 deletions.
21 changes: 18 additions & 3 deletions src/systemctl/systemctl-set-environment.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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");
Expand Down

0 comments on commit a4ccce2

Please sign in to comment.