summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnita Zhang <the.anitazha@gmail.com>2021-01-14 00:02:09 -0800
committerAnita Zhang <the.anitazha@gmail.com>2021-01-14 15:05:27 -0800
commit98199724cb9fdad910e8f4b222d39d9d1e77f1c4 (patch)
tree1e772205ac943d72ddbdf227d36e4c02f22c8848
parent983cbd91a8b5e87b9e2507d1179d969d784d2b67 (diff)
downloadsystemd-98199724cb9fdad910e8f4b222d39d9d1e77f1c4.tar.gz
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.
-rw-r--r--src/systemctl/systemctl-edit.c6
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) &&