Am 10.08.2015 um 15:28 schrieb Ivan Shapovalov:
On 2015-08-10 at 15:14 +0200, Reindl Harald wrote:

Am 10.08.2015 um 15:05 schrieb Ivan Shapovalov:
On 2015-08-10 at 11:16 +0200, Reindl Harald wrote:
Moreover,


* "RuntimeDirectory" is a service configuration
* the daemon is started as unprivileged user
* "RuntimeDirectory" should be created long before
     ExecStart / ExecStartPost

This is wrong. The runtime directory "will be created <...> when
the unit is started, and removed when the unit is stopped".

what is wrong?

The runtime directory should be created right before the unit is
started, not "long before ExecStart / ExecStartPost".

so why trying to create it before "ExecStart" *and* "ExecStartPost"

"unit is started" is for me pretty clear the whole systemd-unit

As can be seen from the code, the runtime directory creation is
attempted on execution of each configured process, be it ExecStart=
or
ExecStartPost= (or whatever else)

and why in the world is the code written that way?

This is pointless rhetoric.

no it is not pointless rhetoric
it's a serious question

there is no logical reason that "RuntimeDirectory" created once would
disappear while starting the other processes as well as tempfiles.d
which get replaced by "RuntimeDirectory" isn't fired all the time

Why do you think that it would disappear between starting two processes
belonging to the same unit?

why do the developers think that?

if they don't think so why attempt creation for *each configured process* of the same systemd-unit?

The runtime directory is destroyed when a
unit enters inactive state. systemd always attempts to create it when
it forks off a control process, just (I guess) because it's more robust
to do it that way rather than to implement a separate state machine
just for that purpose. Now, there was a TOCTOU-style race condition,
and it got fixed indeed as far as I can see

yes, the race condition seems now to be fixed

but it would have been impossible to happen if *really* "The runtime directory should be created right before the unit is started" would be the implementation because there would be no second (needless) attemt to create it but a single point of early code which creates it with the correct permissions and any following ExecStart* could rely that it exists

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to