From efdbf5fe9c4222725899d0e1093a09c5d649ab68 Mon Sep 17 00:00:00 2001 From: Jeremy Cline Date: Fri, 15 May 2020 16:28:35 -0400 Subject: [PATCH] shared: treat generator units as vendor units Units created with "systemctl edit --full" from generator units aren't removed with "systemctl revert" because units in the generator, generator_early, and generator_late paths aren't considered vendor units. Alter path_is_vendor() to return true if the given path is a generator unit, which in turn causes "systemctl revert" to remove units created with "systemctl edit --full" as they now have vendor versions. Fixes #10053 --- src/shared/install.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/shared/install.c b/src/shared/install.c index 21ad5aab36..60005967e7 100644 --- a/src/shared/install.c +++ b/src/shared/install.c @@ -227,7 +227,7 @@ static int path_is_runtime(const LookupPaths *p, const char *path, bool check_pa path_equal_ptr(path, p->runtime_control); } -static int path_is_vendor(const LookupPaths *p, const char *path) { +static int path_is_vendor_or_generator(const LookupPaths *p, const char *path) { const char *rpath; assert(p); @@ -245,6 +245,9 @@ static int path_is_vendor(const LookupPaths *p, const char *path) { return true; #endif + if (path_is_generator(p, rpath)) + return true; + return path_equal(rpath, SYSTEM_DATA_UNIT_PATH); } @@ -2374,7 +2377,7 @@ int unit_file_revert( return -errno; } else if (S_ISREG(st.st_mode)) { /* Check if there's a vendor version */ - r = path_is_vendor(&paths, path); + r = path_is_vendor_or_generator(&paths, path); if (r < 0) return r; if (r > 0)