diff options
author | Frederic Crozat <fcrozat@suse.com> | 2013-03-21 15:40:45 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2013-03-25 17:26:15 +0100 |
commit | ce2c2265376c22c16b4c9bff3ac2d402ddbeda03 (patch) | |
tree | cc943fc8b86650cdbedb2e207308619331f5092b /src | |
parent | 8cc3f8c0bcd23bb68166cb197a4c541d7621b19c (diff) |
core: ensure LSB Provides are handled correctly
Let's say you have two initscripts, A and B:
A contains in its LSB header:
Required-Start: C
and B contains in its LSB header:
Provides: C
When systemd is parsing /etc/rc.d/, depending on the file order, you
can end up with either:
- B is parsed first. An unit "C.service" will be "created" and will be
added as additional name to B.service, with unit_add_name. No bug.
- A is parsed first. An unit "C.service" is created for the
"Required-Start" dependency (it will have no file attached, since
nothing provides this dependency yet). Then B is parsed and when trying
to handle "Provides: C", unit_add_name is called but will fail, because
"C.service" already exists in manager->units. Therefore, a merge should
occur for that case.
Diffstat (limited to 'src')
-rw-r--r-- | src/core/service.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/core/service.c b/src/core/service.c index 4451d38eef..fa8a1cb039 100644 --- a/src/core/service.c +++ b/src/core/service.c @@ -762,7 +762,7 @@ static int service_load_sysv_path(Service *s, const char *path) { continue; if (unit_name_to_type(m) == UNIT_SERVICE) - r = unit_add_name(u, m); + r = unit_merge_by_name(u, m); else /* NB: SysV targets * which are provided |