service: don't hit an assert if information in LSB headers is incorrectly formatted

https://bugzilla.redhat.com/show_bug.cgi?id=667665
This commit is contained in:
Lennart Poettering 2011-01-06 23:52:58 +01:00
parent 86a3475bc5
commit e83c7c0ba4

View File

@ -328,10 +328,13 @@ static int sysv_translate_facility(const char *name, const char *filename, char
/* If we don't know this name, fallback heuristics to figure /* If we don't know this name, fallback heuristics to figure
* out whether something is a target or a service alias. */ * out whether something is a target or a service alias. */
if (*name == '$') if (*name == '$') {
if (!unit_prefix_is_valid(n))
return -EINVAL;
/* Facilities starting with $ are most likely targets */ /* Facilities starting with $ are most likely targets */
r = unit_name_build(n, NULL, ".target"); r = unit_name_build(n, NULL, ".target");
else if (filename && streq(name, filename)) } else if (filename && streq(name, filename))
/* Names equalling the file name of the services are redundant */ /* Names equalling the file name of the services are redundant */
return 0; return 0;
else else
@ -684,10 +687,14 @@ static int service_load_sysv_path(Service *s, const char *path) {
} }
r = sysv_translate_facility(n, file_name_from_path(path), &m); r = sysv_translate_facility(n, file_name_from_path(path), &m);
free(n);
if (r < 0) if (r < 0) {
goto finish; log_error("[%s:%u] Failed to translate LSB dependency %s, ignoring: %s", path, line, n, strerror(-r));
free(n);
continue;
}
free(n);
if (r == 0) if (r == 0)
continue; continue;