]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sysv-generator: detect invalid provided unit names
authorFelipe Sateler <fsateler@debian.org>
Sun, 28 Jun 2015 00:02:53 +0000 (21:02 -0300)
committerFelipe Sateler <fsateler@debian.org>
Mon, 29 Jun 2015 19:07:49 +0000 (16:07 -0300)
Do not assume that a non-service unit type is a target.

src/sysv-generator/sysv-generator.c

index 9ae518ac4a3398c3c762936173e4213d3497d9b3..c9dd3b6302d91ebc11bdb13d6f74fcc7908e18a2 100644 (file)
@@ -340,6 +340,7 @@ static int handle_provides(SysvStub *s, unsigned line, const char *full_text, co
 
         FOREACH_WORD_QUOTED(word, z, text, state_) {
                 _cleanup_free_ char *n = NULL, *m = NULL;
+                UnitType t;
 
                 n = strndup(word, z);
                 if (!n)
@@ -351,12 +352,13 @@ static int handle_provides(SysvStub *s, unsigned line, const char *full_text, co
                 if (r == 0)
                         continue;
 
-                if (unit_name_to_type(m) == UNIT_SERVICE) {
+                t = unit_name_to_type(m);
+                if (t == UNIT_SERVICE) {
                         log_debug("Adding Provides: alias '%s' for '%s'", m, s->name);
                         r = add_alias(s->name, m);
                         if (r < 0)
                                 log_warning_errno(r, "[%s:%u] Failed to add LSB Provides name %s, ignoring: %m", s->path, line, m);
-                } else {
+                } else if (t == UNIT_TARGET) {
                         /* NB: SysV targets which are provided by a
                          * service are pulled in by the services, as
                          * an indication that the generic service is
@@ -374,6 +376,10 @@ static int handle_provides(SysvStub *s, unsigned line, const char *full_text, co
                                         return log_oom();
                         }
                 }
+                else if (t == _UNIT_TYPE_INVALID)
+                        log_warning("Unit name '%s' is invalid", m);
+                else
+                        log_warning("Unknown unit type for unit '%s'", m);
         }
         if (!isempty(state_))
                 log_error("[%s:%u] Trailing garbage in Provides, ignoring.", s->path, line);