Lennart Poettering [Fri, 1 Jun 2018 09:23:51 +0000 (11:23 +0200)]
man: document the new PrivateMounts= setting
Also, extend the documentation on MountFlags= substantially, hopefully
addressing all the questions of #4393
Fixes: #4393
Lennart Poettering [Fri, 1 Jun 2018 09:10:49 +0000 (11:10 +0200)]
core: add new PrivateMounts= unit setting
This new setting is supposed to be useful in most cases where
"MountFlags=slave" is currently used, i.e. as an explicit way to run a
service in its own mount namespace and decouple propagation from all
mounts of the new mount namespace towards the host.
The effect of MountFlags=slave and PrivateMounts=yes is mostly the same,
as both cause a CLONE_NEWNS namespace to be opened, and both will result
in all mounts within it to be mounted MS_SLAVE. The difference is mostly
on the conceptual/philosophical level: configuring the propagation mode
is nothing people should have to think about, in particular as the
matter is not precisely easyto grok. Moreover, MountFlags= allows configuration
of "private" and "slave" modes which don't really make much sense to use
in real-life and are quite confusing. In particular PrivateMounts=private means
mounts made on the host stay pinned for good by the service which is
particularly nasty for removable media mount. And PrivateMounts=shared
is in most ways a NOP when used a alone...
The main technical difference between setting only MountFlags=slave or
only PrivateMounts=yes in a unit file is that the former remounts all
mounts to MS_SLAVE and leaves them there, while that latter remounts
them to MS_SHARED again right after. The latter is generally a nicer
approach, since it disables propagation, while MS_SHARED is afterwards
in effect, which is really nice as that means further namespacing down
the tree will get MS_SHARED logic by default and we unify how
applications see our mounts as we always pass them as MS_SHARED
regardless whether any mount namespacing is used or not.
The effect of PrivateMounts=yes was implied already by all the other
mount namespacing options. With this new option we add an explicit knob
for it, to request it without any other option used as well.
See: #4393
Lennart Poettering [Tue, 12 Jun 2018 14:00:37 +0000 (16:00 +0200)]
Merge pull request #9270 from mbiebl/typo-fixes
NEWS: typo fixes
Michael Biebl [Tue, 12 Jun 2018 13:49:37 +0000 (15:49 +0200)]
doc: typo fixes, mostly duplicated words
Michael Biebl [Tue, 12 Jun 2018 13:41:38 +0000 (15:41 +0200)]
NEWS: typo fixes
Lennart Poettering [Tue, 12 Jun 2018 12:58:13 +0000 (14:58 +0200)]
Merge pull request #9268 from keszybz/news
NEWS followup and a small man addition
Zbigniew Jędrzejewski-Szmek [Tue, 12 Jun 2018 12:06:47 +0000 (14:06 +0200)]
NEWS: mention "bad-setting" load state and other small additions
Zbigniew Jędrzejewski-Szmek [Tue, 12 Jun 2018 12:06:13 +0000 (14:06 +0200)]
NEWS, CODE_QUALITY: wording fixes
No additions, just moving stuff around and wording cleanups.
Zbigniew Jędrzejewski-Szmek [Mon, 11 Jun 2018 15:04:08 +0000 (17:04 +0200)]
man: mention that /var/lib/systemd/timesync/clock might have the compilation timestamp
https://bugs.freedesktop.org/show_bug.cgi?id=90085
Lennart Poettering [Tue, 12 Jun 2018 10:03:28 +0000 (12:03 +0200)]
tree-wide: drop trailing whitespace
Lennart Poettering [Tue, 12 Jun 2018 10:03:13 +0000 (12:03 +0200)]
doc: extend CODE_QUALITY.md with two more items
Lennart Poettering [Tue, 12 Jun 2018 10:02:51 +0000 (12:02 +0200)]
prepare an initial NEWS file for v239
Zbigniew Jędrzejewski-Szmek [Tue, 12 Jun 2018 10:53:37 +0000 (12:53 +0200)]
Merge pull request #9255 from poettering/block-dev-fixes
some block device handling fixes
Michal Sekletar [Wed, 30 May 2018 14:27:22 +0000 (16:27 +0200)]
journal: forward messages from /dev/log unmodified to syslog.socket
Zbigniew Jędrzejewski-Szmek [Tue, 29 May 2018 10:19:09 +0000 (12:19 +0200)]
pid1: do not reset subtree_control on already-existing units with delegation
Fixes #8364.
Reproducer:
$ sudo systemd-run -t -p Delegate=yes bash
# mkdir /sys/fs/cgroup/system.slice/run-u6958.service/supervisor
# echo $$ > /sys/fs/cgroup/system.slice/run-u6958.service/supervisor/cgroup.procs
# echo +memory > /sys/fs/cgroup/system.slice/run-u6958.service/cgroup.subtree_control
# cat /sys/fs/cgroup/system.slice/run-u6958.service/cgroup.subtree_control
memory
# systemctl daemon-reload
# cat /sys/fs/cgroup/system.slice/run-u6958.service/cgroup.subtree_control
(empty)
With patch, the last command shows 'memory'.
Lennart Poettering [Mon, 11 Jun 2018 10:32:37 +0000 (12:32 +0200)]
tree-wide: use PATH_STARTSWITH_SET() at two more places
Lennart Poettering [Mon, 11 Jun 2018 10:22:58 +0000 (12:22 +0200)]
core: rework how we validate DeviceAllow= settings
Let's make sure we don't validate "char-*" and "block-*" expressions as
paths.
Lennart Poettering [Mon, 11 Jun 2018 10:19:01 +0000 (12:19 +0200)]
cgroup: relax checks for block device cgroup settings
This drops needless safety checks that ensure we only reference block
devices for blockio/io settings. The backing code was already able to
accept regular file system paths too, in which case the backing device
node of that file system would be used. Hence, let's drop the artificial
restrictions and open up this underlying functionality.
Lennart Poettering [Mon, 11 Jun 2018 10:17:32 +0000 (12:17 +0200)]
cgroup: beef up device lookup logic for block devices
Let's chase block devices through btrfs and LUKS like we do elsewhere.
Lennart Poettering [Mon, 11 Jun 2018 10:06:27 +0000 (12:06 +0200)]
blockdev: split out actual DM sysfs code of get_block_device_harder() into function of its own
That way we can use it in code that already acquired a dev_t from some
source.
Lennart Poettering [Mon, 11 Jun 2018 10:03:35 +0000 (12:03 +0200)]
blockdev-util: let's initialize return parameter on success
We document the rule that return values >= 0 of functions are supposed
to indicate success, and that in case of success all return parameters
should be initialized. Let's actually do so.
Just a tiny coding style fix-up.
Zbigniew Jędrzejewski-Szmek [Mon, 11 Jun 2018 11:17:43 +0000 (13:17 +0200)]
meson: also reject shifts that change the sign bit
../src/test/test-sizeof.c: In function ‘main’:
../src/test/test-sizeof.c:70:24: error: result of ‘1 << 31’ requires 33 bits to represent, but ‘int’ only has 32 bits [-Werror=shift-overflow=]
X = (1 << 31),
^~
cc1: some warnings being treated as errors
Follow-up for
b05ecb8cadd8c32d31b1aabcff4e507bd89b5465.
Zbigniew Jędrzejewski-Szmek [Mon, 11 Jun 2018 12:37:36 +0000 (14:37 +0200)]
basic/path-util: fix ordering in error message
Jun 11 14:29:12 krowka systemd[1]: /etc/systemd/system/workingdir.service:6: = path is not normalizedWorkingDirectory: /../../etc
↓
Jun 11 14:32:12 krowka systemd[1]: /etc/systemd/system/workingdir.service:6: WorkingDirectory= path is not normalized: /../../etc
Zbigniew Jędrzejewski-Szmek [Mon, 11 Jun 2018 12:37:10 +0000 (14:37 +0200)]
Merge pull request #9157 from poettering/unit-config-load-error
introduce a new "bad-setting" unit load state in order to improve "systemctl status" output when bad settings are used
Bruno Vernay [Thu, 7 Jun 2018 15:38:10 +0000 (17:38 +0200)]
Table is easier to grasp
State goes in CONFIG for users
3rd review
Lennart Poettering [Mon, 11 Jun 2018 10:58:55 +0000 (12:58 +0200)]
Merge pull request #9185 from marckleinebudde/can
networkd: add support to configure CAN devices
xginn8 [Mon, 11 Jun 2018 10:56:26 +0000 (06:56 -0400)]
Add counter for socket unit refuse events (#9217)
core: add counter for socket unit rejection events
Lennart Poettering [Fri, 1 Jun 2018 16:06:54 +0000 (18:06 +0200)]
core: add a couple of more error cases that should result in "bad-setting"
This changes a number of EINVAL cases to ENOEXEC, so that we enter
"bad-setting" state if they fail.
Lennart Poettering [Fri, 1 Jun 2018 15:55:50 +0000 (17:55 +0200)]
systemctl: load_error is a string, don't compare it with 0
Using isempty() is nicer anyway.
Lennart Poettering [Fri, 1 Jun 2018 15:46:01 +0000 (17:46 +0200)]
core: introduce a new load state "bad-setting"
Since
bb28e68477a3a39796e4999a6cbc6ac6345a9159 parsing failures of
certain unit file settings will result in load failures of units. This
introduces a new load state "bad-setting" that is entered in precisely
this case.
With this addition error messages on bad settings should be a lot more
explicit, as we don't have to show some generic "errno" error in that
case, but can explicitly say that a bad setting is at fault.
Internally this unit load state is entered as soon as any configuration
loader call returns ENOEXEC. Hence: config parser calls should return
ENOEXEC now for such essential unit file settings. Turns out, they
generally already do.
Fixes: #9107
Lennart Poettering [Fri, 1 Jun 2018 15:43:16 +0000 (17:43 +0200)]
man: don't mention "stub" and "merged" unit load states
These states should never be visible to the outside, as they are used
only internally while loading unit. Hence let's drop them from the
documentation.
Lennart Poettering [Fri, 1 Jun 2018 15:37:20 +0000 (17:37 +0200)]
core: rework manager_load_startable_unit_or_warn() on top of unit_validate_load_state()
These functions do very similar work, let's unify common code.
Lennart Poettering [Fri, 1 Jun 2018 15:32:54 +0000 (17:32 +0200)]
core: use bus_unit_validate_load_state() for generating LoadError unit bus property
The load_error is only valid in some load_state cases, lets generate
prettier messages for other cases too, by reusing the
bus_unit_validate_load_state() call which does jus that.
Clients (such as systemctl) ignored LoadError unles LoadState was
"error" before. With this change they could even show LoadError in other
cases and it would show a useful name.
Lennart Poettering [Fri, 1 Jun 2018 15:30:43 +0000 (17:30 +0200)]
core: rename (and modernize) bus_unit_check_load_state() → bus_unit_validate_load_state()
Let's use a switch() statement, cover more cases with pretty messages.
Also let's rename it to "validate", as that's more specific that
"check", as it implies checking for a "valid"/"good" state, which is
what this function does.
Lennart Poettering [Mon, 11 Jun 2018 10:52:38 +0000 (12:52 +0200)]
Merge pull request #9246 from keszybz/ellipsize-invalid-mem-ref
Fix invalid memory reference in ellipsize_mem()
Lennart Poettering [Fri, 8 Jun 2018 17:29:05 +0000 (19:29 +0200)]
resolved: rework NSEC covering tests
This makes two changes: first of all we will now explicitly check
whether a domain to test against an NSEC record is actually below the
signer's name. This is relevant for NSEC records that chain up the end
and the beginning of a zone: we shouldn't alow that NSEC record to match
against domains outside of the zone.
This also fixes how we handle NSEC checks for domains that are prefixes
of the NSEC RR domain itself, fixing #8164 which triggers this specific
case. The non-wildcard NSEC check is simplified for that, we can
directly make our between check, there's no need to find the "Next
Closer" first, as the between check should not be affected by additional
prefixes. For the wild card NSEC check we'll prepend the asterisk in
this case to the NSEC RR itself to make a correct check.
Fixes: #8164
Zbigniew Jędrzejewski-Szmek [Mon, 11 Jun 2018 07:57:05 +0000 (09:57 +0200)]
basic/format-table: remove parameter with constant value
Zbigniew Jędrzejewski-Szmek [Sat, 9 Jun 2018 11:41:44 +0000 (13:41 +0200)]
basic/ellipsize: do not assume the string is NUL-terminated when length is given
oss-fuzz flags this as:
==1==WARNING: MemorySanitizer: use-of-uninitialized-value
0. 0x7fce77519ca5 in ascii_is_valid systemd/src/basic/utf8.c:252:9
1. 0x7fce774d203c in ellipsize_mem systemd/src/basic/string-util.c:544:13
2. 0x7fce7730a299 in print_multiline systemd/src/shared/logs-show.c:244:37
3. 0x7fce772ffdf3 in output_short systemd/src/shared/logs-show.c:495:25
4. 0x7fce772f5a27 in show_journal_entry systemd/src/shared/logs-show.c:1077:15
5. 0x7fce772f66ad in show_journal systemd/src/shared/logs-show.c:1164:29
6. 0x4a2fa0 in LLVMFuzzerTestOneInput systemd/src/fuzz/fuzz-journal-remote.c:64:21
...
I didn't reproduce the issue, but this looks like an obvious error: the length
is specified, so we shouldn't use the string with any functions for normal
C-strings.
Zbigniew Jędrzejewski-Szmek [Mon, 11 Jun 2018 08:02:49 +0000 (10:02 +0200)]
meson: add fuzz regressions to list
Apparently I haven't been very good at remembering to do this.
Zbigniew Jędrzejewski-Szmek [Mon, 11 Jun 2018 07:12:21 +0000 (09:12 +0200)]
Merge pull request #9253 from yuwata/fix-timezone_is_valid
util-lib: reject too long path for timedate_is_valid()
Yu Watanabe [Mon, 11 Jun 2018 03:39:59 +0000 (12:39 +0900)]
fuzz: add testcase for issue 8827
Yu Watanabe [Mon, 11 Jun 2018 03:31:02 +0000 (12:31 +0900)]
util-lib: reject too long path for timedate_is_valid()
This should fix https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=8827.
Zbigniew Jędrzejewski-Szmek [Sat, 9 Jun 2018 11:12:52 +0000 (13:12 +0200)]
meson: do not allow bit-shift overflows
The primary motivation is to catch enum values created through a shift that is
too big:
../src/test/test-sizeof.c:26:29: error: left shift count >= width of type [-Werror=shift-count-overflow]
enum_with_shift = 1 << 32,
^~
cc1: some warnings being treated as errors
The compiler will now reject those.
This is an alternative to #9224.
Hiram van Paassen [Tue, 10 Apr 2018 15:26:20 +0000 (17:26 +0200)]
networkd-link: add support to configure CAN interfaces
This patch adds support for kind "can". Fixes: #4042.
Marc Kleine-Budde [Wed, 30 May 2018 14:31:59 +0000 (16:31 +0200)]
networkd-link: link_up_can(): move function upwards
This patch is a preparation patch, to avoid forward declarations in the
next patch.
Marc Kleine-Budde [Wed, 30 May 2018 09:47:23 +0000 (11:47 +0200)]
networkd-link: link_configure(); factor out link_configure_can() into separate function
Marc Kleine-Budde [Tue, 5 Jun 2018 14:08:29 +0000 (16:08 +0200)]
conf-parser: add config_parse_permille()
Marc Kleine-Budde [Tue, 5 Jun 2018 13:15:33 +0000 (15:15 +0200)]
parse-util: add permille parser + tests
Zbigniew Jędrzejewski-Szmek [Sat, 9 Jun 2018 11:41:24 +0000 (13:41 +0200)]
basic/utf8: add ascii_is_valid_n()
Lennart Poettering [Fri, 8 Jun 2018 18:44:01 +0000 (20:44 +0200)]
Merge pull request #9240 from poettering/ds-validate
resolved: fix DNSKEY validation by DS RR
Ivan Shapovalov [Fri, 8 Jun 2018 12:09:44 +0000 (15:09 +0300)]
mymachines: fix getgrnam()
getgrnam() was returning input gid instead of the mapped one. Fix that.
Susant Sahani [Fri, 8 Jun 2018 12:32:21 +0000 (18:02 +0530)]
networkd: tunnel ignore wrong conf rather than assert
Closes #9234
Zbigniew Jędrzejewski-Szmek [Fri, 8 Jun 2018 14:05:18 +0000 (16:05 +0200)]
resolved: fix typo in macro name
Filipe Brandenburger [Wed, 6 Jun 2018 16:43:37 +0000 (09:43 -0700)]
analyze: use _cleanup_ for struct unit_times
This introduces a has_data boolean field in struct unit_files which can
be used to detect the end of the array.
Use a _cleanup_ for struct unit_files in acquire_time_data and its
callers. Code for acquire_time_data is also simplified by replacing
goto's with straight returns.
Tested: By running the commands below, also checking them under valgrind.
- build/systemd-analyze blame
- build/systemd-analyze critical-chain
- build/systemd-analyze plot
Fixes: Coverity finding CID 996464.
Lennart Poettering [Fri, 8 Jun 2018 13:41:37 +0000 (15:41 +0200)]
resolved: use Oxford comma at once place
As suggested by @keszybz in https://github.com/systemd/systemd/pull/9235#pullrequestreview-
127150950
Lennart Poettering [Fri, 8 Jun 2018 13:38:56 +0000 (15:38 +0200)]
test: add dnssec-bogus.sg to list of domains to test in DNSSEC complex test
Lennart Poettering [Fri, 8 Jun 2018 13:37:49 +0000 (15:37 +0200)]
resolved: fix DNSKEY validation against DS
Let's use the wireformat name, not the text version.
Fixes: #8901
Zbigniew Jędrzejewski-Szmek [Fri, 8 Jun 2018 13:35:45 +0000 (15:35 +0200)]
Merge pull request #9221 from poettering/bus-track-destroy
add sd_bus_track and sd_event_source destroy callbacks too
Lennart Poettering [Fri, 8 Jun 2018 10:04:49 +0000 (12:04 +0200)]
resolved: whenever a link starts/stops being relevant flush global DNS caches
Let's add some protection for split horizon setups, where different
zones are visible on the same global DNS servers depending on where you
come from.
Fixes: #9196
Filipe Brandenburger [Thu, 7 Jun 2018 21:32:07 +0000 (14:32 -0700)]
scsi_id: use _cleanup_free_ on buffer allocated by get_file_options
This simplifies the code a bit and hopefully fixes Coverity finding
CID 1382966. There was not actually a resource leak here (Coverity
seemed to be confused by thinking log_oom() could actually return 0),
but the fix doesn't hurt and should make this code more resilient to
future refactorings.
Tested: builds fine, manually called scsi_id, seems to work ok.
Lennart Poettering [Fri, 8 Jun 2018 09:36:11 +0000 (11:36 +0200)]
resolved: document .local domain routing a bit more in detail
Inspired by the discussions in #8851, even though the issue appears to
be entirely unrelated to the .local domain in the end.
Lennart Poettering [Fri, 8 Jun 2018 10:09:23 +0000 (12:09 +0200)]
Merge pull request #9213 from poettering/copy-mount
copy() mount detection fixes
Filipe Brandenburger [Thu, 7 Jun 2018 20:46:32 +0000 (13:46 -0700)]
lldp: check that lldp neighbor raw data size is in expected range
This fixes an insecure use of tainted data as argument to functions that
allocate memory and read from files, which could be tricked into getting
networkctl to allocate a large amount of memory and fill it with file
data.
This was uncovered by Coverity. Fixes CID 1393254.
Filipe Brandenburger [Thu, 7 Jun 2018 21:37:30 +0000 (14:37 -0700)]
networkd: add missing _cleanup_ in prefix_new
This should fix a leak of the allocated Prefix if sd_radv_prefix_new
fails for some reason.
The code was already initializing prefix to NULL and using TAKE_PTR to
return it, so only the _cleanup_ was missing.
Fixes Coverity finding CID 1382976.
Filipe Brandenburger [Thu, 7 Jun 2018 21:11:51 +0000 (14:11 -0700)]
udev-builtin-usb_id: Check full range of size returned by read()
This shouldn't be necessary, since read() should never return a size
larger than the size of the buffer passed in, but Coverity doesn't seem
to understand that.
We could possibly fix this with a model file for Coverity, but given
changing the code is not that much of a biggie, let's just do that
instead.
Fixes CID 996458: Overflowed or truncated value (or a value computed
from an overflowed or truncated value) `pos` used as array index.
Tested: `ninja -C build/ test`, builds without warnings, test cases pass.
Filipe Brandenburger [Thu, 7 Jun 2018 20:07:56 +0000 (13:07 -0700)]
udev: fix usage of udev_device_new_from_stat_rdev() in journalctl
The refactor in #9200 inadvertently dropped the variable assignment to
traverse the device and its hierarchy in add_matches_for_device().
This was uncovered by Coverity (CID #1393310).
Fix that by restoring the assignment.
Tested: `journalctl /dev/sda` now filters journalctl output again.
Zbigniew Jędrzejewski-Szmek [Thu, 7 Jun 2018 18:47:45 +0000 (20:47 +0200)]
Merge pull request #9218 from systemd/finalize-coverity
coverity.sh: check that coverity responds with 200
Evegeny Vereshchagin [Thu, 7 Jun 2018 17:53:43 +0000 (17:53 +0000)]
README.md: embed the Travis CI badge
It should make it easier to keep track of the status
of daily cron jobs uploading data to Coverity Scan.
Evegeny Vereshchagin [Thu, 7 Jun 2018 17:51:01 +0000 (17:51 +0000)]
travis: stop sending notifications to the authors of randomly chosen commits
Evegeny Vereshchagin [Tue, 5 Jun 2018 06:31:41 +0000 (06:31 +0000)]
coverity.sh: check that coverity responds with 200
This is mostly inspired by https://github.com/pmem/pmdk/commit/
7b103fd2dd54b2e5974f71fb65c81ab3713c12c5
Closes https://github.com/systemd/systemd/issues/9186.
Lennart Poettering [Thu, 7 Jun 2018 16:20:04 +0000 (18:20 +0200)]
update TODO
Lennart Poettering [Thu, 7 Jun 2018 15:35:58 +0000 (17:35 +0200)]
update TODO
The three ancient entries marked "bugfixes" are already fixed (in two
cases), or are not really bugs (in the other case). Let's clean this up
a bit.
Lennart Poettering [Thu, 7 Jun 2018 15:04:57 +0000 (17:04 +0200)]
Merge pull request #9200 from poettering/device-state-fix
core: rework device state serialization/enumeration
Lennart Poettering [Thu, 7 Jun 2018 14:56:32 +0000 (16:56 +0200)]
Merge pull request #9165 from ssahani/networkd-netdevsim
networkd: introduce netdev "Netdevsim" Driver
Zbigniew Jędrzejewski-Szmek [Thu, 7 Jun 2018 13:08:02 +0000 (15:08 +0200)]
CODING_STYLE: allow c99-style mixed code and declarations
We already allowed variables to be declared in the middle of a function
(whenever a new scope was opened), so this isn't such a big change. Sometimes
we would open a scope just to work around this prohibition.
But sometimes the code can be much clearer if the variable is declared
somewhere in the middle of a scope, in particular if the declaration is
combined with initialization or acquisition of some resources. So let's allow
this, but keep things in the old style, unless there's a good reason to move
the variable declaration to a different place.
Zbigniew Jędrzejewski-Szmek [Thu, 7 Jun 2018 14:30:56 +0000 (16:30 +0200)]
Merge pull request #9222 from poettering/code-quality-docs
let's document the code quality tools we have set up
Lennart Poettering [Thu, 7 Jun 2018 14:26:00 +0000 (16:26 +0200)]
HACKING: link up CODE_QUALITY.md
Lennart Poettering [Thu, 7 Jun 2018 13:07:23 +0000 (15:07 +0200)]
doc: add a list of code quality tools we have set up
Also, as a reminder all of these exist to myself.
Lennart Poettering [Thu, 7 Jun 2018 13:07:14 +0000 (15:07 +0200)]
tools: make various scripts find the top-levle git dir automatically
Lennart Poettering [Mon, 4 Jun 2018 19:00:44 +0000 (21:00 +0200)]
update TODO
Lennart Poettering [Tue, 5 Jun 2018 18:57:08 +0000 (20:57 +0200)]
swap: trivial log message improvements
Lennart Poettering [Tue, 5 Jun 2018 18:47:26 +0000 (20:47 +0200)]
core: be a bit stricter when validating SYSTEMD_ALIAS udev props
Lennart Poettering [Tue, 5 Jun 2018 18:18:47 +0000 (20:18 +0200)]
tree-wide: fix a number of log calls that use %m but have no errno set
This is mostly fall-out from
d1a1f0aaf0d2f08c60d1e0d32e646439d99f58dc,
however some cases are older bugs.
There might be more issues lurking, this was a simple grep for "%m"
across the tree, with all lines removed that mention "errno" at all.
Lennart Poettering [Tue, 5 Jun 2018 16:26:45 +0000 (18:26 +0200)]
core: enumerate perpetual units in a separate per-unit-type method
Previously the enumerate() callback defined for each unit type would do
two things:
1. It would create perpetual units (i.e. -.slice, system.slice, -.mount and
init.scope)
2. It would enumerate units from /proc/self/mountinfo, /proc/swaps and
the udev database
With this change these two parts are split into two seperate methods:
enumerate() now only does #2, while enumerate_perpetual() is responsible
for #1. Why make this change? Well, perpetual units should have a
slightly different effect that those found through enumeration: as
perpetual units should be up unconditionally, perpetually and thus never
change state, they should also not pull in deps by their state changing,
not even when the state is first set to active. Thus, their state is
generally initialized through the per-device coldplug() method in
similar fashion to the deserialized state from a previous run would be
put into place. OTOH units found through regular enumeration should
result in state changes (and thus pull in deps due to state changes),
hence their state should be put in effect in the catchup() method
instead. Hence, given this difference, let's also separate the
functions, so that the rule is:
1. What is created in enumerate_perpetual() should be started in
coldplug()
2. What is created in enumerate() should be started in catchup().
Lennart Poettering [Tue, 5 Jun 2018 16:09:27 +0000 (18:09 +0200)]
core: tighten when we unset the sysfs path of device units
Make sure that whenever we enter "dead" state we unset the sysfs path,
not just when we are changing to it due to "found" mask changes.
Lennart Poettering [Tue, 5 Jun 2018 15:28:32 +0000 (17:28 +0200)]
core: rework how device units get set up
This reworks how device units are "powered on".
This makes sure that any device changes that might have happened while
we were restarting/reloading will be noticed properly. For that we'll
now properly serialize/deserialize both the device unit state and the
device "found" flags, and restore these initially in the "coldplug"
phase of the manager deserialization. While enumerating the udev devices
during startup we'll put together a new "found" flags mask, which we'll
the switch to in the "catchup" phase of the manager deserialization,
which follows the "coldplug" phase.
Note that during the "coldplug" phase no unit state change events are
generated, which is different for the "catchall" phase which will do
that. Thus we correctly make sure that the deserialized state won't pull
in new deps, but any device's change while we were reloading would.
Fixes: #8832
Replaces: #8675
Lennart Poettering [Tue, 5 Jun 2018 15:22:11 +0000 (17:22 +0200)]
device: simplify device_found_to_string_many() a tiny bit
No need to maintain a NULL marker at the end of the table if we know the
size of the array anyway.
Lennart Poettering [Tue, 5 Jun 2018 14:53:22 +0000 (16:53 +0200)]
core: add a new unit method "catchup()"
This is very similar to the existing unit method coldplug() but is
called a bit later. The idea is that that coldplug() restores the unit
state from before any prior reload/restart, i.e. puts the deserialized
state in effect. The catchup() call is then called a bit later, to
catch up with the system state for which we missed notifications while
we were reloading. This is only really useful for mount, swap and device
mount points were we should be careful to generate all missing unit
state change events (i.e. call unit_notify() appropriately) for
everything that happened while we were reloading.
Lennart Poettering [Mon, 4 Jun 2018 21:05:39 +0000 (23:05 +0200)]
core: use safe_fclose() where appropriate
Lennart Poettering [Mon, 4 Jun 2018 21:05:20 +0000 (23:05 +0200)]
core: split out early-boot preset logic into a function of its own
Lennart Poettering [Mon, 4 Jun 2018 20:52:02 +0000 (22:52 +0200)]
udev: add helper udev_device_new_from_stat_rdev()
This is a simple wrapper around udev_device_new_from_devnum(), and uses
the data from a struct stat's .st_rdev field to derive the udev_device
object.
Lennart Poettering [Mon, 4 Jun 2018 19:35:30 +0000 (21:35 +0200)]
core: split out device validation from device_found_node()
Let's separate the validate step out. Also, let's update some comments
which have long ceased to be true.
No change in behaviour.
Lennart Poettering [Mon, 4 Jun 2018 16:06:05 +0000 (18:06 +0200)]
core: rework device_found_node() prototype
let's drop the "now" argument, it's exactly what MANAGER_IS_RUNNING()
returns, hence let's use that instead to simplify things.
Moreover, let's change the add/found argument pair to become found/mask,
which allows us to change multiple flags at the same time into opposing
directions, which will be useful later on.
Also, let's change the return type to void. It's a notifier call where
callers will ignore the return value anyway as it is nothing actionable.
Should not change behaviour.
Lennart Poettering [Mon, 4 Jun 2018 19:16:50 +0000 (21:16 +0200)]
core: split out reload propagation into its own function
Lennart Poettering [Mon, 4 Jun 2018 18:29:04 +0000 (20:29 +0200)]
core: improve error logging a bit
Lennart Poettering [Mon, 4 Jun 2018 18:02:59 +0000 (20:02 +0200)]
core: split out bus initialization from manager_setup()
Lennart Poettering [Mon, 4 Jun 2018 16:05:09 +0000 (18:05 +0200)]
core: log when unit_add_dependency() fails for some reason
Also, proceed, as there's little we can do in this case.
Lennart Poettering [Mon, 4 Jun 2018 16:04:33 +0000 (18:04 +0200)]
core: modernize device_update_description() a bit
Lennart Poettering [Mon, 4 Jun 2018 16:03:57 +0000 (18:03 +0200)]
core: use device_found_to_string_many() result only on success
Lennart Poettering [Mon, 4 Jun 2018 16:03:30 +0000 (18:03 +0200)]
core: use FLAGS_SET() macro at one more place