NetworkManager/src/systemd
Thomas Haller 8308311264 core: refactor loading machine-id and cache it
Previously, whenever we needed /etc/machine-id we would re-load it
from file. The are 3 downsides of that:

 - the smallest downside is the runtime overhead of repeatedly
   reading the file and parse it.

 - as we read it multiple times, it may change anytime. Most
   code in NetworkManager does not expect or handle a change of
   the machine-id.
   Generally, the admin should make sure that the machine-id is properly
   initialized before NetworkManager starts, and not change it. As such,
   a change of the machine-id should never happen in practice.
   But if it would change, we would get odd behaviors. Note for example
   how generate_duid_from_machine_id() already cached the generated DUID
   and only read it once.
   It's better to pick the machine-id once, and rely to use the same
   one for the remainder of the program.
   If the admin wants to change the machine-id, NetworkManager must be
   restarted as well (in case the admin cares).
   Also, as we now only load it once, it makes sense to log an error
   (once) when we fail to read the machine-id.

 - previously, loading the machine-id could fail each time. And we
   have to somehow handle that error. It seems, the best thing what we
   anyway can do, is to log an error once and continue with a fake
   machine-id. Here we add a fake machine-id based on the secret-key
   or the boot-id. Now obtaining a machine-id can no longer fail
   and error handling is no longer necessary.

Also, ensure that a machine-id of all zeros is not valid.

Technically, a machine-id is not an RFC 4122 UUID. But it's
the same size, so we also use NMUuid data structure for it.

While at it, also refactor caching of the boot-id and the secret
key. In particular, fix the thread-safety of the double-checked
locking implementations.
2018-11-13 19:04:34 +01:00
..
sd-adapt systemd: merge branch systemd into master 2018-10-28 09:31:31 +01:00
src systemd: merge branch systemd into master 2018-10-28 09:31:31 +01:00
meson.build core: add "nm-sd-utils.h" to access system internal helper 2018-10-23 10:32:53 +02:00
nm-sd-utils.c core: refactor loading machine-id and cache it 2018-11-13 19:04:34 +01:00
nm-sd-utils.h core: refactor loading machine-id and cache it 2018-11-13 19:04:34 +01:00
nm-sd.c systemd: merge branch systemd into master 2018-10-28 09:31:31 +01:00
nm-sd.h build: don't add systemd path the include search path 2016-09-27 14:13:21 +02:00