From: Jeremy Cline Date: Fri, 15 May 2020 20:28:35 +0000 (-0400) Subject: shared: treat generator units as vendor units X-Git-Tag: v246-rc1~310 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=efdbf5fe9c4222725899d0e1093a09c5d649ab68;p=thirdparty%2Fsystemd.git 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 --- diff --git a/src/shared/install.c b/src/shared/install.c index 21ad5aab36a..60005967e79 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)