]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
shared/install: provide a nicer error message for invalid WantedBy=/Required= values
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 13 Dec 2019 17:36:29 +0000 (18:36 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 13 Dec 2019 18:30:36 +0000 (19:30 +0100)
$ build/systemctl --user cat badinstall
 # /home/zbyszek/.config/systemd/user/badinstall.service
[Service]
ExecStart=true

[Install]
WantedBy=asdf

$ build/systemctl --user enable badinstall
Failed to enable unit: "asdf" is not a valid unit name.

Fixes #4209.

src/core/dbus-manager.c
src/shared/install.c

index 64a612a7f0f110ee8d9b61d5e31071ff986d2acf..c751e84253e0f557c44545ac2752a14262e34559 100644 (file)
@@ -1902,6 +1902,12 @@ static int install_error(
                                               "Unit %s is transient or generated.", changes[i].path);
                         goto found;
 
+                case -EUCLEAN:
+                        r = sd_bus_error_setf(error, BUS_ERROR_BAD_UNIT_SETTING,
+                                              "\"%s\" is not a valid unit name.",
+                                              changes[i].path);
+                        goto found;
+
                 case -ELOOP:
                         r = sd_bus_error_setf(error, BUS_ERROR_UNIT_LINKED,
                                               "Refusing to operate on alias name or linked unit file: %s",
index 53446611be87595134e0f361bb6a7f47d37e45e4..d291eb6f21fe28cae476acd918d552d36a1347cb 100644 (file)
@@ -362,6 +362,12 @@ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *chang
                                         verb, changes[i].path);
                         logged = true;
                         break;
+                case -EUCLEAN:
+                        log_error_errno(changes[i].type,
+                                        "Failed to %s unit, \"%s\" is not a valid unit name.",
+                                        verb, changes[i].path);
+                        logged = true;
+                        break;
                 case -ELOOP:
                         log_error_errno(changes[i].type, "Failed to %s unit, refusing to operate on linked unit file %s",
                                         verb, changes[i].path);
@@ -1794,7 +1800,8 @@ static int install_info_symlink_wants(
                         return q;
 
                 if (!unit_name_is_valid(dst, UNIT_NAME_ANY)) {
-                        r = -EINVAL;
+                        unit_file_changes_add(changes, n_changes, -EUCLEAN, dst, NULL);
+                        r = -EUCLEAN;
                         continue;
                 }