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.
This commit is contained in:
Frederic Crozat 2013-03-21 15:40:45 +01:00 committed by Lennart Poettering
parent 8cc3f8c0bc
commit ce2c226537

View file

@ -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