[systemd-devel] PATCH: fix LSB Provides handling

Frederic Crozat fcrozat at suse.com
Mon Mar 25 03:14:05 PDT 2013


Le vendredi 22 mars 2013 à 23:53 +0100, Lennart Poettering a écrit :
> On Thu, 21.03.13 17:04, Frederic Crozat (fcrozat at suse.com) wrote:
> 
> > Hi all,
> > 
> > in https://bugzilla.novell.com/show_bug.cgi?id=809646 we noticed LSB
> > Provides can sometime be incorrectly handled (resulting in "Failed to
> > add LSB Provides name XXXX.service, ignoring: File exists" errors),
> > depending on initscript parsing order (if a provides is required by
> > another initscript and this initscript is parsed before the one with the
> > provides).
> 
> Can you explain the problem in more detail? Not following here.

Yes, sorry, I didn't give our test example :

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:
- 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.

> 
> Also, whitespace/coding style issues. 

Will fix.

> Hmm, and also, unit_merge_by_name() looks like the easier way here, as
> it does pretty much what you do here anyway....

Indeed. I overlooked it..

New patch attached.


-- 
Frederic Crozat <fcrozat at suse.com>
SUSE
-------------- next part --------------
A non-text attachment was scrubbed...
Name: fix-lsb-provides.patch
Type: text/x-patch
Size: 1367 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/systemd-devel/attachments/20130325/510c70af/attachment-0001.bin>


More information about the systemd-devel mailing list