summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2010-04-01 21:30:40 +0200
committerLennart Poettering <lennart@poettering.net>2010-04-01 21:30:40 +0200
commitbd77d0fccccb7c94d1dd52d2e535feb7156e3220 (patch)
tree03b1adf7be6bcdc6db5be89bc5170a430092987c
parentdbd4655d8937fb870a6ec42889081ecd4b83ca98 (diff)
sysv: properly handle Provides LSB header
-rw-r--r--service.c10
-rw-r--r--unit.c13
-rw-r--r--unit.h1
3 files changed, 22 insertions, 2 deletions
diff --git a/service.c b/service.c
index 149a791b05..1aeb5fbf2b 100644
--- a/service.c
+++ b/service.c
@@ -370,7 +370,13 @@ static int service_load_sysv_path(Service *s, const char *path) {
if (r == 0)
continue;
- r = unit_add_name(u, m);
+ if (unit_name_to_type(m) == UNIT_SERVICE)
+ r = unit_add_name(u, m);
+ else {
+ if ((r = unit_add_dependency_by_name_inverse(u, UNIT_REQUIRES, m)) >= 0)
+ r = unit_add_dependency_by_name(u, UNIT_BEFORE, m);
+ }
+
free(m);
if (r < 0)
@@ -568,7 +574,7 @@ static int service_init(Unit *u) {
return r;
}
- /* Load a classic init script as a fallback, if we couldn*t find anything */
+ /* Load a classic init script as a fallback, if we couldn't find anything */
if (r == 0)
if ((r = service_load_sysv(s)) <= 0) {
service_done(u);
diff --git a/unit.c b/unit.c
index 673aac184f..036c01648c 100644
--- a/unit.c
+++ b/unit.c
@@ -978,6 +978,19 @@ int unit_add_dependency_by_name(Unit *u, UnitDependency d, const char *name) {
return 0;
}
+int unit_add_dependency_by_name_inverse(Unit *u, UnitDependency d, const char *name) {
+ Unit *other;
+ int r;
+
+ if ((r = manager_load_unit(u->meta.manager, name, &other)) < 0)
+ return r;
+
+ if ((r = unit_add_dependency(other, d, u)) < 0)
+ return r;
+
+ return 0;
+}
+
int set_unit_path(const char *p) {
char *cwd, *c;
int r;
diff --git a/unit.h b/unit.h
index 4b3b6fb644..df8f2a208a 100644
--- a/unit.h
+++ b/unit.h
@@ -249,6 +249,7 @@ void unit_free(Unit *u);
int unit_add_name(Unit *u, const char *name);
int unit_add_dependency(Unit *u, UnitDependency d, Unit *other);
int unit_add_dependency_by_name(Unit *u, UnitDependency d, const char *name);
+int unit_add_dependency_by_name_inverse(Unit *u, UnitDependency d, const char *name);
int unit_add_cgroup(Unit *u, CGroupBonding *b);
int unit_add_cgroup_from_text(Unit *u, const char *name);