]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
shared: treat generator units as vendor units
authorJeremy Cline <jcline@redhat.com>
Fri, 15 May 2020 20:28:35 +0000 (16:28 -0400)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 21 May 2020 08:03:40 +0000 (10:03 +0200)
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

index 21ad5aab36a6bc0485efd26f601bf521c911e13c..60005967e79feb614e2f036671b36889f2e86414 100644 (file)
@@ -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)