]> git.ipfire.org Git - thirdparty/systemd.git/commit
basic/unit-file: when loading linked unit files, use link source as "fragment path"
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sun, 14 Feb 2021 13:38:32 +0000 (14:38 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sun, 14 Feb 2021 13:49:00 +0000 (14:49 +0100)
commit3aa57658434e7a95c6000bebb166c31f1c6d051b
tree7d96e54044cd2c85a4800ac591c2007d530a330b
parent8db704b28b4fd4d13e376cf3495005010443937e
basic/unit-file: when loading linked unit files, use link source as "fragment path"

The general idea is that when a unit file is "linked" (i.e. installed by
symlinking from outside of the search paths), the *destination* name is
irrelevant. It doesn't even have to be a valid unit name, or to match the type
or instance value. The obvious collorary is that we shouldn't look at the
symlink destination name to derive the unit name, instance value, or anything
else at all.

When building the name map, when we find a linked unit (possibly at the end
of a series of alias redirects), store the *source* of the final symlink as the
fragment path. This has two effects:
- we stop looking at the *target* file name to derive unit info, i.e. actually
  implement the stuff described in the first paragraph.
- we load the unit fragment through the symlink. If someone were to remove the
  symlink, we'll not load the unit. This seems like the right thing.

Fixes #18058.
Before this change, we were generally quite confused about unit alises for
linked units. Fortunately most poeple use the same symlink source and target,
so in practice we wouldn't hit this too often.

In unit_load_fragment() a comment is added to explain what we're doing there.
src/basic/unit-file.c
src/core/load-fragment.c