diff options
author | Anita Zhang <the.anitazha@gmail.com> | 2021-01-14 09:02:09 +0100 |
---|---|---|
committer | Anita Zhang <the.anitazha@gmail.com> | 2021-01-15 00:05:27 +0100 |
commit | 98199724cb9fdad910e8f4b222d39d9d1e77f1c4 (patch) | |
tree | 1e772205ac943d72ddbdf227d36e4c02f22c8848 /src/systemctl/systemctl-edit.c | |
parent | udev: add missing short option name (diff) | |
download | systemd-98199724cb9fdad910e8f4b222d39d9d1e77f1c4.tar.xz systemd-98199724cb9fdad910e8f4b222d39d9d1e77f1c4.zip |
systemctl-edit: fix abort in find_paths_to_edit()
After 85c5d313b5c92115f5c77663e736bcf21e99f02f, if you, for example,
create a drop-in for -.slice without a corresponding -.slice file, you will
get the following:
# put some valid stuff in /etc/systemd/system/-.slice.d/override.conf
[root@image ~]# systemctl daemon-reload
[root@image ~]# systemctl edit -- -.slice
Assertion 'path' failed at src/systemctl/systemctl-edit.c:425, function
find_paths_to_edit(). Aborting.
Aborted
The aforementioned commit sets the ret_dropin_paths argument for
unit_find_paths(). Thus, unit_find_paths() returns 1 in the example above
because it finds a relevant drop-in. However find_paths_to_edit() was written
to expect 1 only if the unit file itself exists (it does not in this example).
To make this behave more like the version of `systemctl edit` prior to
this commit, add an additional check so the code enters the
"unit file not found" code branch.
Diffstat (limited to '')
-rw-r--r-- | src/systemctl/systemctl-edit.c | 6 |
1 files changed, 1 insertions, 5 deletions
diff --git a/src/systemctl/systemctl-edit.c b/src/systemctl/systemctl-edit.c index f6e8671a38..a67318258e 100644 --- a/src/systemctl/systemctl-edit.c +++ b/src/systemctl/systemctl-edit.c @@ -405,9 +405,7 @@ static int find_paths_to_edit(sd_bus *bus, char **names, char ***paths) { if (r < 0) return r; - if (r == 0) { - assert(!path); - + if (!path) { if (!arg_force) { log_info("Run 'systemctl edit%s --force --full %s' to create a new unit.", arg_scope == UNIT_FILE_GLOBAL ? " --global" : @@ -422,8 +420,6 @@ static int find_paths_to_edit(sd_bus *bus, char **names, char ***paths) { arg_full ? NULL : ".d/override.conf", NULL, &new_path, &tmp_path); } else { - assert(path); - unit_name = basename(path); /* We follow unit aliases, but we need to propagate the instance */ if (unit_name_is_valid(*name, UNIT_NAME_INSTANCE) && |