]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
systemctl: print a warning when trying to import a nonexistent variable
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sun, 3 Jan 2021 20:53:38 +0000 (21:53 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 19 Jan 2021 13:18:33 +0000 (14:18 +0100)
I was quite confused what is happening:
$ XXX=xxx
$ systemctl --user import-environment XXX
$ systemctl --user show-environment | grep XXX
(nothing)

Obviously, 'export XXX' was missing. Without any indication why the
export is not happening, this can be hard to figure out.

Another option would be to error out. But so far we didn't, and doing
that could break some script which optimistically tries to export some
variables, if present.

src/systemctl/systemctl-set-environment.c

index 3be2c57778eaee183766fc7f87e6603413972af6..437236efb41c274ad0736d0099915130c929af53 100644 (file)
@@ -139,21 +139,26 @@ int import_environment(int argc, char *argv[], void *userdata) {
                 STRV_FOREACH(a, strv_skip(argv, 1)) {
 
                         if (!env_name_is_valid(*a))
-                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Not a valid environment variable name: %s", *a);
+                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+                                                       "Not a valid environment variable name: %s", *a);
 
+                        bool found = false;
                         STRV_FOREACH(b, environ) {
                                 const char *eq;
 
                                 eq = startswith(*b, *a);
                                 if (eq && *eq == '=') {
-
                                         r = sd_bus_message_append(m, "s", *b);
                                         if (r < 0)
                                                 return bus_log_create_error(r);
 
+                                        found = true;
                                         break;
                                 }
                         }
+
+                        if (!found)
+                                log_notice("Environment variable $%s not set, ignoring.", *a);
                 }
 
                 r = sd_bus_message_close_container(m);