Browse Source

Version v246.0 Release Candidate 1

This is a pre-release, and explicitly not meant for daily usage!
 * elogind has been synced up to systemd/systemd-stable/v246-stable
   commit 9353607ef3cff4902296268bab0ccc82dc8b04c2
 * cgroup controller detection has been enhanced to be more reliable
 * Prior each sleep command the sleep configuration is re-read, so
   that changes do no longer need to be made known by reloading or
   restarting elogind.

Merge tag 'v246.0-rc1'

Version v246.0 Release Candidate 1

This is a pre-release, and explicitly not meant for daily usage!

* elogind has been synced up to systemd/systemd-stable/v246-stable
  commit 9353607ef3cff4902296268bab0ccc82dc8b04c2
* cgroup controller detection has been enhanced to be more reliable
* Prior each sleep command the sleep configuration is re-read, so
  that changes do no longer need to be made known by reloading or
  restarting elogind.
Mark Hindley 1 year ago
  1. 4
  2. 8
  3. 109
  4. 5
  5. 2
  6. 29
  7. 8
  8. 8
  9. 8
  10. 7
  11. 9
  12. 138
  13. 2
  14. 429
  15. 214
  16. 3
  17. 5
  18. 8
  19. 6
  20. 10
  21. 347
  22. 26
  23. 249
  24. 12
  25. 33
  26. 199
  27. 67
  28. 17
  29. 62
  30. 611
  31. 3
  32. 13
  33. 431
  34. 19
  35. 3
  36. 26
  37. 105
  38. 160
  39. 17
  40. 25
  41. 82
  42. 2
  43. 8
  44. 2
  45. 137
  46. 651
  47. 118
  48. 473
  49. 187
  50. 143
  51. 93
  52. 55
  53. 4
  54. 19
  55. 243
  56. 86
  57. 128
  58. 121
  59. 98
  60. 98
  61. 2
  62. 110
  63. 124
  64. 2
  65. 107
  66. 98
  67. 16
  68. 6
  69. 5
  70. 178
  71. 107
  72. 11
  73. 72
  74. 106
  75. 10
  76. 68
  77. 111
  78. 12
  79. 133
  80. 50
  81. 121
  82. 2
  83. 149
  84. 188
  85. 48
  86. 2
  87. 143
  88. 114
  89. 103
  90. 176
  91. 193
  92. 22
  93. 90
  94. 15
  95. 2
  96. 2
  97. 124
  98. 163
  99. 1
  100. 1


@ -12,6 +12,8 @@
@ -33,8 +35,8 @@
#if 1 /// elogind specific stuff


@ -0,0 +1,8 @@
# Default ignored files
# Datasource local storage ignored files
# Editor-based HTTP Client requests


@ -0,0 +1,109 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<option name="INDENT_NAMESPACE_MEMBERS" value="0" />
<option name="INDENT_PREPROCESSOR_DIRECTIVE" value="2" />
<option name="KEEP_STRUCTURES_IN_ONE_LINE" value="true" />
<option name="KEEP_NESTED_NAMESPACES_IN_ONE_LINE" value="true" />
<option name="FUNCTION_PARAMETERS_NEW_LINE_AFTER_LPAR" value="true" />
<option name="LAMBDA_CAPTURE_LIST_WRAP" value="5" />
<option name="LAMBDA_CAPTURE_LIST_ALIGN_MULTILINE" value="true" />
<option name="FUNCTION_CALL_ARGUMENTS_WRAP" value="5" />
<option name="SHIFT_OPERATION_WRAP" value="5" />
<option name="TEMPLATE_DECLARATION_STRUCT_WRAP" value="5" />
<option name="TEMPLATE_DECLARATION_STRUCT_BODY_INDENT" value="true" />
<option name="TEMPLATE_DECLARATION_FUNCTION_WRAP" value="5" />
<option name="TEMPLATE_PARAMETERS_WRAP" value="5" />
<option name="TEMPLATE_PARAMETERS_ALIGN_MULTILINE" value="true" />
<option name="TEMPLATE_CALL_ARGUMENTS_WRAP" value="5" />
<option name="TEMPLATE_CALL_ARGUMENTS_ALIGN_MULTILINE" value="true" />
<option name="CLASS_CONSTRUCTOR_INIT_LIST_WRAP" value="5" />
<option name="SPACE_WITHIN_TEMPLATE_DECLARATION_LTGT" value="true" />
<option name="SPACE_WITHIN_TEMPLATE_CALL_LTGT" value="true" />
<option name="SPACE_WITHIN_FUNCTION_CALL_PARENTHESES" value="true" />
<option name="SPACE_BEFORE_POINTER_IN_DECLARATION" value="false" />
<option name="SPACE_AFTER_POINTER_IN_DECLARATION" value="true" />
<option name="SPACE_BEFORE_REFERENCE_IN_DECLARATION" value="false" />
<option name="SPACE_AFTER_REFERENCE_IN_DECLARATION" value="true" />
<option name="SPACE_BETWEEN_ADJACENT_BRACKETS" value="true" />
<option name="TAG_PREFIX_OF_LINE_COMMENT" value="AT" />
<option name="TYPE_QUALIFIERS_PLACEMENT" value="AFTER" />
<option name="TAG_PREFIX_OF_LINE_COMMENT" value="AT" />
<option name="TYPE_QUALIFIERS_PLACEMENT" value="AFTER" />
<pair source="cpp" header="hpp" fileNamingConvention="PASCAL_CASE" />
<pair source="c" header="h" fileNamingConvention="LOWERCASE" />
<pair source="cu" header="cuh" fileNamingConvention="UPPER_SNAKE_CASE" />
<pair source="cpp" header="h" fileNamingConvention="LOWERCASE" />
<rule entity="NAMESPACE" visibility="ANY" specifier="ANY" prefix="" style="SNAKE_CASE" suffix="" />
<rule entity="MACRO" visibility="ANY" specifier="ANY" prefix="" style="SCREAMING_SNAKE_CASE" suffix="" />
<rule entity="CLASS" visibility="ANY" specifier="ANY" prefix="C" style="PASCAL_CASE" suffix="" />
<rule entity="STRUCT" visibility="ANY" specifier="ANY" prefix="s" style="CAMEL_CASE" suffix="" />
<rule entity="ENUM" visibility="ANY" specifier="ANY" prefix="e" style="CAMEL_CASE" suffix="" />
<rule entity="ENUMERATOR" visibility="ANY" specifier="ANY" prefix="" style="PASCAL_CASE" suffix="" />
<rule entity="TYPEDEF" visibility="ANY" specifier="ANY" prefix="" style="SNAKE_CASE" suffix="_t" />
<rule entity="UNION" visibility="ANY" specifier="ANY" prefix="u" style="SNAKE_CASE" suffix="" />
<rule entity="CLASS_MEMBER_FUNCTION" visibility="ANY" specifier="ANY" prefix="" style="CAMEL_CASE" suffix="" />
<rule entity="STRUCT_MEMBER_FUNCTION" visibility="ANY" specifier="ANY" prefix="" style="CAMEL_CASE" suffix="" />
<rule entity="CLASS_MEMBER_FIELD" visibility="ANY" specifier="ANY" prefix="m_" style="SNAKE_CASE" suffix="" />
<rule entity="STRUCT_MEMBER_FIELD" visibility="ANY" specifier="ANY" prefix="m_" style="SNAKE_CASE" suffix="" />
<rule entity="GLOBAL_FUNCTION" visibility="ANY" specifier="ANY" prefix="" style="PASCAL_CASE" suffix="" />
<rule entity="GLOBAL_VARIABLE" visibility="ANY" specifier="ANY" prefix="" style="UPPER_SNAKE_CASE" suffix="" />
<rule entity="PARAMETER" visibility="ANY" specifier="ANY" prefix="" style="SNAKE_CASE" suffix="_" />
<rule entity="LOCAL_VARIABLE" visibility="ANY" specifier="ANY" prefix="" style="SNAKE_CASE" suffix="" />
<codeStyleSettings language="ObjectiveC">
<option name="RIGHT_MARGIN" value="150" />
<option name="BLANK_LINES_BEFORE_IMPORTS" value="0" />
<option name="BLANK_LINES_AFTER_IMPORTS" value="0" />
<option name="BLANK_LINES_AROUND_CLASS" value="2" />
<option name="BLANK_LINES_AROUND_METHOD" value="2" />
<option name="BLANK_LINES_AROUND_METHOD_IN_INTERFACE" value="0" />
<option name="ALIGN_MULTILINE_CHAINED_METHODS" value="true" />
<option name="ALIGN_GROUP_FIELD_DECLARATIONS" value="true" />
<option name="SPACE_BEFORE_SEMICOLON" value="true" />
<option name="SPACE_WITHIN_PARENTHESES" value="true" />
<option name="SPACE_WITHIN_IF_PARENTHESES" value="true" />
<option name="SPACE_WITHIN_WHILE_PARENTHESES" value="true" />
<option name="SPACE_WITHIN_FOR_PARENTHESES" value="true" />
<option name="SPACE_WITHIN_CATCH_PARENTHESES" value="true" />
<option name="SPACE_WITHIN_SWITCH_PARENTHESES" value="true" />
<option name="SPACE_WITHIN_ARRAY_INITIALIZER_BRACES" value="true" />
<option name="METHOD_CALL_CHAIN_WRAP" value="5" />
<option name="PARENTHESES_EXPRESSION_RPAREN_WRAP" value="true" />
<option name="BINARY_OPERATION_WRAP" value="5" />
<option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" />
<option name="TERNARY_OPERATION_WRAP" value="5" />
<option name="FOR_STATEMENT_WRAP" value="5" />
<option name="ARRAY_INITIALIZER_WRAP" value="5" />
<option name="ARRAY_INITIALIZER_RBRACE_ON_NEXT_LINE" value="true" />
<option name="ASSIGNMENT_WRAP" value="5" />
<option name="DOWHILE_BRACE_FORCE" value="1" />
<option name="WHILE_BRACE_FORCE" value="1" />
<option name="FOR_BRACE_FORCE" value="3" />
<option name="WRAP_ON_TYPING" value="0" />
<option name="SOFT_MARGINS" value="128" />
<option name="INDENT_SIZE" value="8" />
<option name="CONTINUATION_INDENT_SIZE" value="4" />
<option name="TAB_SIZE" value="8" />


@ -0,0 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<option name="USE_PER_PROJECT_SETTINGS" value="true" />


@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<module classpath="External" type="CPP_MODULE" version="4" />


@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CidrRootsConfiguration">
<file path="$PROJECT_DIR$/src" />
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MakefileSettings">
<option name="linkedExternalProjectsSettings">
<option name="analyzerType" value="OUTPUT_PARSING" />
<option name="buildOptions" value="-j 1" />
<option name="buildTarget" value="all" />
<option name="cleanTarget" value="clean" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
<option value="$PROJECT_DIR$" />
<option name="switches" value="JUST_PRINT=YES" />
<component name="MakefileWorkspace" PROJECT_DIR="$PROJECT_DIR$">
<contentRoot DIR="$PROJECT_DIR$/build" />


@ -0,0 +1,8 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="clean" type="MAKEFILE_TARGET_RUN_CONFIGURATION" factoryName="Makefile">
<makefile filename="Makefile" target="clean" workingDirectory="$PROJECT_DIR$" arguments="">
<envs />
<method v="2" />


@ -0,0 +1,8 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="debug" type="MAKEFILE_TARGET_RUN_CONFIGURATION" factoryName="Makefile">
<makefile filename="Makefile" target="all" workingDirectory="$PROJECT_DIR$" arguments="DEBUG=YES">
<envs />
<method v="2" />


@ -0,0 +1,8 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="release" type="MAKEFILE_TARGET_RUN_CONFIGURATION" factoryName="Makefile">
<makefile filename="Makefile" target="all" workingDirectory="$PROJECT_DIR$" arguments="DEBUG=NO">
<envs />
<method v="2" />


@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
<mapping directory="$PROJECT_DIR$/pwx" vcs="Git" />


@ -14,6 +14,7 @@ Arnd Bergmann <>
Atul Sabharwal <>
Bart Rulon <>
Bastien Nocera <> <>
Baybal Ni <>
Beniamino Galvani <> <>
Bill Yodlowsky <> <>
Brian Boylston <>
@ -22,12 +23,14 @@ Chen Qi <> <>
Christophe Varoqui <>
Colin Guthrie <ColinGuthrie@web>
Daniel Elstner <> <>
Daniel Gorbea <>
Daniel J Walsh <>
Daniel Kahn Gillmor <>
Daniel Machon <>
Daniel Rusek <>
Daniel Stekloff <>
Daniel Șerbănescu <>
Dann Frazier <>
Dave Reisner <> <>
David Zeuthen <>
David Zeuthen <> <>
@ -85,6 +88,7 @@ Kay Sievers <> <>
Kay Sievers <> <>
Kay Sievers <> <kay@pim>
Kay Sievers <> <>
Kevin Becker <>
Krzysztof Jackiewicz <> <>
Larry Bernstone <>
Lennart Poettering <> <LennartPoettering@web>
@ -114,6 +118,7 @@ Michael Olbrich <>
Michal Soltys <> <>
Michal Suchanek <>
Michal Suchanek <> <>
Michal Sekletár <>
Michał Szczepański <> <>
Michel Kraus <> <>
Miklos Vajna <> <>
@ -161,6 +166,7 @@ Stefan Schweter <>
Stuart McLaren <>
Susant Sahani <> <>
Susant Sahani <> <>
Sylvain Plantefeve <>
Sébastien Bacher <>
Tanu Kaskinen <TanuKaskinen@web>
Ted Ts'o <>
@ -191,6 +197,7 @@ Yann E. Morin <>
Yin Kangkai <> <>
Zachary Winnerman <>
Zbigniew Jędrzejewski-Szmek <>
Zbigniew Jędrzejewski-Szmek <> <>
Łukasz Stelmach <> <>
Jonathon Kowalski <>
Diego Canuhe <> <>
@ -200,3 +207,5 @@ Roger James <>
Stephan Edel <>
Andrey Yashkin <>
Ronald Tschalär <>
Jay Burger <> <root@new-host-3.home>
Yi Gao <>


@ -5,39 +5,131 @@
# install:
# DESTDIR=$(DESTDIR) ninja -C build install
#else // 0
.PHONY: all clean install loginctl rebuild test test-login
.PHONY: all build clean install loginctl test test-login
VERSION ?= 999
VARIANT ?= debug
# Set this to YES on the command line for a debug build
HERE := $(shell pwd -P)
# Set this to yes to not build, but to show all build commands ninja would issue
BUILD := $(HERE)/build
COMPDB := compile_commands.json
LN := $(shell which ln) -s
RM := $(shell which rm) -f
HERE := $(shell pwd -P)
BUILDDIR ?= $(HERE)/build
CGCONTROL ?= $(shell $(HERE)/tools/
CGDEFAULT ?= $(shell grep "^rc_cgroup_mode" /etc/rc.conf | cut -d '"' -f 2)
CONFIG := $(BUILDDIR)/compile_commands.json
MESON_LST := $(shell find $(HERE)/ -type f -name '') $(HERE)/meson_options.txt
PREFIX ?= /tmp/elogind_test
VERSION ?= 9999
ninja -C build
CC ?= $(shell which cc)
LD ?= $(shell which ld)
LN := $(shell which ln) -s
MESON ?= $(shell which meson)
MKDIR := $(shell which mkdir) -p
RM := $(shell which rm) -f
$(RM) -f $(COMPDB)
# Save users/systems choice
DESTDIR=$(DESTDIR) ninja -C $(BUILD) install
BASIC_OPT := --buildtype release
NINJA_OPT := --verbose
ninja -C $(BUILD) $@
# Make sure "--just-print" gets translated over to ninja
ifneq (,$(findstring n,$(MAKEFLAGS)))
override MAKEFLAGS := $(filter-out $(FILTER_ME),$(MAKEFLAGS))
# Explicitly set JUST_PRINT to "YES"
rebuild: clean
# Simulate --just-print?
ifeq (YES,$(JUST_PRINT))
NINJA_OPT := ${NINJA_OPT} -t commands
ninja -C $(BUILD) $@
# Combine with "sane defaults"
ifeq (YES,$(DEBUG))
BASIC_OPT := -Ddebug-extra=elogind -Dtests=unsafe --buildtype debug
CFLAGS := -O0 -g3 -ggdb -ftrapv ${envCFLAGS} -fPIE
CXXFLAGS := -O0 -g3 -ggdb -ftrapv ${envCXXFLAGS} -fPIE
NINJA_OPT := ${NINJA_OPT} -j 1 -k 1
CFLAGS := -O2 -fwrapv ${envCFLAGS}
CXXFLAGS := -O2 -fwrapv ${envCXXFLAGS}
ninja -C $(BUILD) $@
# Finalize CFLAGS
CFLAGS := -march=native -pipe ${CFLAGS} -Wall -Wextra -Wunused -Wno-unused-parameter -Wno-unused-result -ftree-vectorize
# Finalize ninja options
all: build
build: $(CONFIG)
+ninja $(NINJA_OPT)
clean: $(CONFIG)
ninja $(NINJA_OPT) -t cleandead
ninja $(NINJA_OPT) -t clean
install: build
DESTDIR=$(DESTDIR) ninja $(NINJA_OPT) install
loginctl: $(CONFIG)
ninja $(NINJA_OPT) $@
test: $(CONFIG)
ninja $(NINJA_OPT) $@
test-login: $(CONFIG)
ninja $(NINJA_OPT) $@
+$(MKDIR) $@
+test -f $@ && ( \
CC=$(CC) \
LD=$(LD) \
meson configure $(BUILDDIR) $(BASIC_OPT) \
) || ( \
CC=$(CC) \
LD=$(LD) \
meson setup $(BUILDDIR) $(BASIC_OPT) \
--libdir $(PREFIX)/usr/lib64 \
--localstatedir $(PREFIX)/var/lib \
--prefix $(PREFIX) \
--sysconfdir $(PREFIX)/etc \
--wrap-mode nodownload \
-Dacl=true \
-Dbashcompletiondir=$(PREFIX)/usr/share/bash-completion/completions \
-Dcgroup-controller=$(CGCONTROL) \
-Ddefault-hierarchy=$(CGDEFAULT) \
-Ddocdir=$(PREFIX)/usr/share/doc/elogind-$(VERSION) \
-Defi=true \
-Dhtml=auto \
-Dhtmldir=$(PREFIX)/usr/share/doc/elogind-$(VERSION)/html \
-Dman=auto \
-Dpam=true \
-Dpamlibdir=$(PREFIX)/lib64/security \
-Drootlibdir=$(PREFIX)/lib64 \
-Drootlibexecdir=$(PREFIX)/lib64/elogind \
-Drootprefix=$(PREFIX) \
-Dselinux=false \
-Dsmack=true \
-Dudevrulesdir=$(PREFIX)/lib/udev/rules.d \
-Dzshcompletiondir=$(PREFIX)/usr/share/zsh/site-functions \
#endif // 0


@ -24,7 +24,7 @@ Build Status
Listed are the master branch and the last stable branch
* master : [![Build Status](](
* v243-stable: [![Build Status](](
* v246-stable: [![Build Status](](


@ -8,8 +8,6 @@ External:
* Fedora: add an rpmlint check that verifies that all unit files in the RPM are listed in %systemd_post macros.
* wiki: update journal format documentation for lz4 additions
Janitorial Clean-ups:
* Rearrange tests so that the various test-xyz.c match a specific src/basic/xyz.c again
@ -19,10 +17,294 @@ Janitorial Clean-ups:
* nspawn: move "incoming mount" directory to /run/host, move "inaccessible"
nodes to /run/host, move notify socket (for sd_notify() between payload and
container manager)
* cryptsetup: if keyfile specified in crypttab is AF_UNIX socket, connect to it
and read from it (like we do elsewhere with READ_FULL_FILE_CONNECT_SOCKET)
* repart: support setting up dm-integrity with HMAC
* add /etc/integritytab, to support dm-integrity setups. In particular those
with HMAC as hash function, so that we can have a protected /home without
encryption (leaving encryption to the individual dirs/homed).
* complement root=, rootflags=, rootfstype= with rootsubdir= which allows
mounting a subdir of the root fs as actual root. This can be used as
fstype-agnostic version of btrfs' rootflags=subvol=foobar.
* add --copy-from and --copy-to command to elogind-dissect which copies stuff
in and out of a disk image
* Support ProtectProc= or so, using:
* if /usr/bin/swapoff fails due to OOM, log a friendly explanatory message about it
* build short web pages out of each catalog entry, build them along with man
pages, and include hyperlinks to them in the journal output
* machined: add API to acquire UID range. add API to mount/dissect loopback
file. Both protected by PK. Then make nspawn use these APIs to run
unprivileged containers. i.e. push the truly privileged bits into machined,
so that the client side can remain entirely unprivileged, with SUID or
anything like that.
* journald: do journal file writing out-of-process, with one writer process per
client UID, so that synthetic hash table collisions can slow down a specific
user's journal stream down but not the others.
* add "throttling" to sd-event event sources: optionally, when we wake up too
often for one, let's turn it off entirely for a while. Use that for the
/proc/self/mountinfo logic.
* move our elogind-user PAM snippet to /usr/, which PAM appears to support
these days
* nspawn: support time namespaces
* elogind-firstboot: make sure to always use chase_symlinks() before
reading/writing files
* add ConditionSecurity=tpm2
* Remove any support for booting without /usr pre-mounted in the initrd entirely.
Update accordingly.
* pid1: Move to tracking of main pid/control pid of units per pidfd
* pid1: support new clone3() fork-into-cgroup feature
* pid1: also remove PID files of a service when the service starts, not just
when it exits
* make us use dynamically fewer deps for containers in general purpose distros:
o turn into dlopen() deps:
- pcre2 (always) — irrelevant on Fedora, since dep by
libselinux, but should benefit Debian
- libpwquality (always) - only relevant for homed, and maybe soon
- elfutils (always)
- p11-kit-trust (always)
- kmod-libs (only when called from PID 1)
- cryptsetup-libs (only in RootImage= handling in PID 1, but not in elogind-cryptsetup)
- similar: libblkid
- libpam (only when called from PID 1)
- bzip2, xz, lz4 (always — gzip and zstd should probably stay static deps the way they are,
since they are so basic and our defaults)
o move into separate .so
- iptables-libs (only used by nspawn + networkd)
* seccomp: when SystemCallArchitectures=native is set then don't install any
other seccomp filters for any of the other archs, in order to reduce the
number of seccomp filters we install needlessly.
* seccomp: maybe use seccomp_merge() to merge our filters per-arch if we can.
Apparently kernel performance is much better with fewer larger seccomp
filters than with more smaller seccomp filters.
* elogind-path: add ESP and XBOOTLDR path. Add "private" runtime/state/cache dir enum,
* make "elogind-dissect" an official supported tool, i.e. move to /usr/bin/ and
provide man page. Given that we now have a tool that can generate images like
this, it's useful to have one that can dump contents of them, too.
* All tools that support --root= should also learn --image= so that they can
operate on disk images directly. Specifically: bootctl, tmpfiles, sysusers,
systemctl, repart, journalctl, coredumpctl. (Already done: elogind-nspawn,
* seccomp: by default mask x32 ABI system wide on x86-64. it's on its way out
* seccomp: don't install filters for ABIs that are masked anyway for the
specific service
* seccomp: maybe merge all filters we install into one with that libseccomp API that allows merging.
* per-service credential system. Specifically: add LoadCredential= (for loading
cred from file), AcquireCredential= (for asking user for cred, via
ask-password), PassCredential= (for passing on credential elogind itself
got). Then, place credentials in a per-service, immutable ramfs instance (so
that it cannot be swapped out), destroy after use. Also pass via keyring
(with graceful fallback to cover for containers). Define CredentialPath= for
defining subdir of /run/credentials/ where to place it. Set $CREDENTIAL_PATH
env var for services to the result. Also pass via fd passing (optionally).
* homed: add native recovery key support. use 48 lowercase modhex characters
(192bit), show qr code of it, include pattern expression in user record.
* homed: introduce "degraded" state for home directories that weren't cleanly
unmounted (use xattr we add and remove on the loop back file)
* homed: during login resize fs automatically towards size goal. Specifically,
resize to diskSize if possible, but leave a certain amount (configured by a
new value diskLeaveFreeSize) of space free on the backing fs.
* homed: permit multiple user record signing keys to be used locally, and pick
the right one for signing records automatically depending on a pre-existing
* homed: add a way to "adopt" a home directory, i.e. strip foreign signatures
and insert a local signature instead.
* homed: as an extension to the directory+subvolume backend: if located on
especially marked fs, then sync down password into LUKS header of that fs,
and always verify passwords against it too. Bootstrapping is a problem
though: if no one is logged in (or no other user even exists yet), how do you
unlock the volume in order to create the first user and add the first pw.
* homed: support new FS_IOC_ADD_ENCRYPTION_KEY ioctl for setting up fscrypt
* homed: maybe pre-create ~/.cache as subvol so that it can have separate quota
* busctl: maybe expose a verb "ping" for pinging a dbus service to see if it
exists and responds.
* when elogind-nspawn and suchlike dissect an OS image, and there are multiple
root partitions, do an strverscmp() on the partition label and boot
first. That is inspired how sd-boot figures out which kernel to boot, and
thus allows defining OS images which can be A/B updated and we default to the
newest version automatically, both in nspawn and in sd-boot
* cryptsetup: support FIDO2 tokens for deriving keys (i.e. do what homed can do
also in plain cryptsetup)
* elogind-gpt-auto should probably set x-elogind.growfs on the mounts it
* homed/userdb: distinguish passwords and recovery keys in the records, since
we probably want to use different PBKDF algorithms/settings for them:
passwords have low entropy but recovery keys should have good entropy key
hence we can make them quicker to work.
* bootctl:
- teach it to prepare an ESP wholesale, i.e. with mkfs.vfat invocation
- teach it to copy in unified kernel images and maybe type #1 boot loader spec entries from host
- make it operate on loopback files, dissecting enough to find ESP to operate on
* Maybe add a separate GPT partition type to the discoverable partition spec
for "hibernate" partitions, that are exactly like swap partitions but only
activated right before hibernation and thus never used for regular swapping.
* by default, in elogind --user service bump the OOMAdjust to 100, as privs
allow so that elogind survives
* cryptsetup: allow encoding key directly in /etc/crypttab, maybe with a
"base64:" prefix. Useful in particular for pkcs11 mode.
* cryptsetup: reimplement the mkswap/mke2fs in cryptsetup-generator to use
elogind-makefs.service instead.
* socket units: allow creating a udev monitor socket with ListenDevices= or so,
with matches, then activate app through that passing socket over
* unify on openssl (as soon as OpenSSL 3.0 is out, and the Debian license
confusion is gone)
- port sd_id128_get_machine_app_specific() over from khash
- port resolved over from libgcrypt (DNSSEC code)
- port journald + fsprg over from libgcrypt
- port importd over from libgcrypt
- when that's done: kill khash.c
- when that's done: kill gnutls support in resolved
* kill zenata, all hail weblate?
* when we resize disks (homed?) always round up to 4K sectors, not 512K
* add growvol and makevol options for /etc/crypttab, similar to
x-elogind.growfs and x-elogind-makefs.
* hook up the TPM to /etc/crypttab, with a new option that is similar to the
new PKCS#11 option in crypttab, and allows unlocking a LUKS volume via a key
unsealed from the TPM. Optionally, if TPM is not available fall back to
TPM-less mode, and set up linear DM mapping instead (inspired by kpartx), so
that the device paths stay the same, regardless if crypto is used or not.
* elogind-repart: by default generate minimized partition tables (i.e. tables
that only cover the space actually used, excluding any free space at the
end), in order to maximize dd'ability. Requires libfdisk work, see
* elogind-repart: MBR partition table support. Care needs to be taken regarding
Type=, so that partition definitions can sanely apply to both the GPT and the
MBR case. Idea: accept syntax "Type=gpt:home mbr:0x83" for setting the types
for the two partition types explicitly. And provide an internal mapping so
that "Type=linux-generic" maps to the right types for both partition tables
* elogind-repart: allow sizing partitions as factor of available RAM, so that
we can reasonably size swap partitions for hibernation.
* elogind-repart: allow running mkfs before making partitions pop up +
encryption via LUKS to allow booting into an empty root with only /usr mounted in
* elogind-repart: allow managing the gpt read-only partition flag + auto-mount flag
* elogind-repart: allow boolean option that ensures that if existing partition
doesn't exist within the configured size bounds the whole command fails. This
is useful to implement ESP vs. XBOOTLDR schemes in installers: have one set
of repart files for the case where ESP is large enough and one where it isn't
and XBOOTLDR is added in instead. Then apply the former first, and if it
fails to apply use the latter.
* elogind-repart: add per-partition option to never reuse existing partition
and always create anew even if matching partition already exists.
* elogind-repart: add per-partition option to fail if partition already exist,
i.e. is not added new. Similar, add option to fail if partition does not exist yet.
* elogind-repart: add --size=auto for generating/resizing images of minimal
size, i.e. where the image file is sized exactly as large as necessary taking
SizeMin= into account, but not a single byte larger.
* elogind-repart: allow disabling growing of specific partitions, or making
them (think ESP: we don't ever want to grow it, since we cannot resize vfat)
* elogind-repart: make it a static checker during early boot for existence and
absence of other partitions for trusted boot environments
* userdb: allow username prefix searches in varlink API, allow realname and
realname substr searches in varlink API
* userdb: allow uid/gid range checks
* userdb: allow existence checks
* pid1: activation by journal search expression
* when switching root from initrd to host, set the machine_id env var so that
if the host has no machine ID set yet we continue to use the random one the
initrd had set.
* sd-event: add native support for P_ALL waitid() watching, then move PID 1 to
it fo reaping assigned but unknown children. This needs to some special care
to operate somewhat sensibly in light of priorities: P_ALL will return
arbitrary processes, regardless of the priority we want to watch them with,
hence on each event loop iteration check all processes which we shall watch
with higher prio explicitly, and then watch the entire rest with P_ALL.
* tweak sd-event's child watching: keep a prioq of children to watch and use
waitid() only on the children with the highest priority until one is waitable
and ignore all lower-prio ones from that point on
* maybe introduce xattrs that can be set on the root dir of the root fs
partition that declare the volatility mode to use the image in. Previously I
thought marking this via GPT partition flags but that's not ideal since
that's outside of the LUKS encryption/verity verification, and we probably
shouldn't operate in a volatile mode unless we got told so from a trusted
* figure out automatic partition discovery when combining writable root dir
with immutable /usr
* coredump: maybe when coredumping read a new xattr from /proc/$PID/exe that
may be used to mark a whole binary as non-coredumpable. Would fix:
* teach parse_timestamp() timezones like the calendar spec already knows it
* beef up hibernation to optionally do swapon/swapoff immediately before/after
the hibernation
@ -46,21 +328,14 @@ Features:
right) become genuine first class citizens, and we gain automatic, sane JSON
output for them.
* dissector: invoke fsck on the file systems we encounter, after all ext4 is
still pretty popular (and we mount the ESP too with it after all, which is
* elogind-firstboot: teach it dissector magic, so that you can point it to some
disk image and it will just set everything in it all behind the scenes.
* elogind-firstboot: add --force mode that replaces existing configuration.
* We should probably replace /var/log/README, /etc/rc.d/README with symlinks
that are linked to these places instead of copied. After all they are
constant vendor data.
* maybe add kernel cmdline params: 1) to force first-boot mode + 2) to force
random seed crediting
* maybe add kernel cmdline params: to force random seed crediting
* nspawn: on cgroupsv1 issue cgroup empty handler process based on host events,
so that we make cgroup agent logic safe
@ -72,6 +347,40 @@ Features:
user@.service, which returns the XDG_RUNTIME_DIR value, and make this
behaviour selectable via pam module option.
* homed:
- when user tries to log into record signed by unrecognized key, automatically add key to our chain after polkit auth
- rollback when resize fails mid-operation
- GNOME's side for forget key on suspend (requires rework so that lock screen runs outside of uid)
- resize on login?
- shrink fs on logout?
- update LUKS password on login if we find there's a password that unlocks the JSON record but not the LUKS device.
- create on activate?
- properties: icon url?, preferred session type?, administrator bool (which translates to 'wheel' membership)?, address?, telephone?, vcard?, samba stuff?, parental controls?
- communicate clearly when usb stick is safe to remove. probably involves
beefing up logind to make pam session close hook synchronous and wait until
elogind --user is shut down.
- logind: maybe keep a "busy fd" as long as there's a non-released session around or the user@.service
- maybe make automatic, read-only, time-based reflink-copies of LUKS disk
images (and btrfs snapshots of subvolumes) (think: time machine)
- distinguish destroy / remove (i.e. currently we can unregister a user, unregister+remove their home directory, but not just remove their home directory)
- in elogind's PAMName= logic: query passwords with ssh-askpassword, so that we can make "loginctl set-linger" mode work
- fingerprint authentication, pattern authentication, …
- make sure "classic" user records can also be managed by homed
- description field for groups
- make size of $XDG_RUNTIME_DIR configurable in user record
- reuse pwquality magic in firstboot
- query password from kernel keyring first
- update even if record is "absent"
- add a "access mode" + "fstype" field to the "status" section of json identity records reflecting the actually used access mode and fstype, even on non-luks backends
- move acct mgmt stuff from pam_elogind_home to pam_elogind?
- when "homectl --pkcs11-token-uri=" is used, synthesize ssh-authorized-keys records for all keys we have private keys on the stick for
- make slice for users configurable (requires logind rework)
- logind: populate auto-login list bus property from PKCS#11 token
- when determining state of a LUKS home directory, check DM suspended sysfs file
- introduce API for "making room", that grows/shrinks home directory
according to elastic parameters, discards blocks, and removes additional snapshots. Call it
either from UI when disk space gets low
* introduce a new per-process uuid, similar to the boot id, the machine id, the
invocation id, that is derived from process creds, specifically a hashed
combination of AT_RANDOM + getpid() + the starttime from
@ -142,23 +451,12 @@ Features:
* introduce per-unit (i.e. per-slice, per-service) journal log size limits.
* optionally, if a per-partition GPT flag is set for the root/home/… partitions
format the partition on next boot and unset the flag, in order to implement
factory reset. also, add a second flag that simply indicates whether such a
scheme is supported. then, add a tool (or maybe beef up elogind-dissect) to
show state of these flags, and optionally trigger such a factory reset on
next boot by setting the flag.
* sd-boot: automatically load EFI modules from some drop-in dir, so that people
can add in file system drivers and such
* sd-boot: optionally, show boot menu when previous default boot item has
non-zero "tries done" count
* maybe set a special xattr on cgroups that have delegate=yes set, to make it
easy to mark cut points, then use this information in "elogind-cgls" to show
them (e.g. color delegated subtrees in a different color)
* introduce an option (or replacement) for "systemctl show" that outputs all
properties as JSON, similar to busctl's new JSON output. In contrast to that
it should skip the variant type string though.
@ -204,7 +502,7 @@ Features:
1. add resume_offset support to the resume code (i.e. support swap files
2. check if swap is on weird storage and refuse if so
3. add autodetection of hibernation images
3. add auto-detection of hibernation images
* cgroups: use inotify to get notified when somebody else modifies cgroups
owned by us, then log a friendly warning.
@ -257,9 +555,6 @@ Features:
* bypass SIGTERM state in unit files if KillSignal is SIGKILL
* tree-wide: ensure we always block the signals we hook into with
sd_event_add_signal() first
* add proper dbus APIs for the various sd_notify() commands, such as MAINPID=1
and so on, which would mean we could report errors and such.
@ -286,6 +581,9 @@ Features:
* sd-bus: add vtable flag, that may be used to request client creds implicitly
and asynchronously before dispatching the operation
* sd-bus: parse addresses given in sd_bus_set_addresses immediately and not
only when used. Add unit tests.
* make use of ethtool veth peer info in machined, for automatically finding out
host-side interface pointing to the container.
@ -305,9 +603,6 @@ Features:
* support projid-based quota in machinectl for containers
* maybe use SOURCE_DATE_EPOCH (i.e. the env var the reproducible builds folks
introduced) as the RTC epoch, instead of the mtime of NEWS.
* add a way to lock down cgroup migration: a boolean, which when set for a unit
makes sure the processes in it can never migrate out of it
@ -351,8 +646,6 @@ Features:
* show whether a service has out-of-date configuration in "systemctl status" by
using mtime data of ConfigurationDirectory=.
* replace all remaining uses of fgets() + LINE_MAX by read_line()
* Add AddUser= setting to unit files, similar to DynamicUser=1 which however
creates a static, persistent user rather than a dynamic, transient user. We
can leverage code from sysusers.d for this.
@ -371,10 +664,6 @@ Features:
yogas can be recognized as "convertible" too, even if they predate the DMI
"convertible" form factor
* Maybe add a small tool invoked early at boot, that adds in or resizes
partitions automatically, to be used when the media used is actually larger
than the image written onto it is.
* Maybe add PrivatePIDs= as new unit setting, and do minimal PID namespacing
after all. Be strict however, only support the equivalent of nspawn's
--as-pid2 switch, and sanely proxy sd_notify() messages dropping stuff such
@ -393,24 +682,6 @@ Features:
"systemd-gdb" for attaching to the start-up of any system service in its
natural habitat.
* maybe introduce gpt auto discovery for /var/tmp?
* maybe add gpt-partition-based user management: each user gets his own
LUKS-encrypted GPT partition with a new GPT type. A small nss module
enumerates users via udev partition enumeration. UIDs are assigned in a fixed
way: the partition index is added as offset to some fixed base uid. User name
is stored in GPT partition name. A PAM module authenticates the user via the
LUKS partition password. Benefits: strong per-user security, compatibility
with stateless/read-only/verity-enabled root. (other idea: do this based on
loopback files in /home, without GPT involvement)
* gpt-auto logic: introduce support for discovering /var matching an image. For
that, use a partition type UUID that is hashed from the OS name (as encoded
in /etc/os-release), the architecture, and 4 new bits from the gpt flags
field of the root partition. This way can easily support multiple OS
installations on the same GPT partition table, without problems with
unmatched /var partitions.
* gpt-auto logic: related to the above, maybe support a "secondary" root
partition, that is mounted to / and is writable, and where the actual root's
/usr is mounted into.
@ -433,8 +704,6 @@ Features:
* define gpt header bits to select volatility mode
* ProtectKernelLogs= (drops CAP_SYSLOG, add seccomp for syslog() syscall, and DeviceAllow to /dev/kmsg) in service files
* ProtectClock= (drops CAP_SYS_TIMES, adds seecomp filters for settimeofday, adjtimex), sets DeviceAllow o /dev/rtc
* ProtectTracing= (drops CAP_SYS_PTRACE, blocks ptrace syscall, makes /sys/kernel/tracing go away)
@ -483,8 +752,6 @@ Features:
* cache sd_event_now() result from before the first iteration...
* add systemctl stop --job-mode=triggering that follows TRIGGERED_BY deps and adds them to the same transaction
* PID1: find a way how we can reload unit file configuration for
specific units only, without reloading the whole of systemd
@ -494,7 +761,7 @@ Features:
* when we detect that there are waiting jobs but no running jobs, do something
* push CPUAffinity= also into the "cpuset" cgroup controller (only after the cpuset controller got ported to the unified hierarchy)
* push CPUAffinity= also into the "cpuset" cgroup controller
* PID 1 should send out sd_notify("WATCHDOG=1") messages (for usage in the --user mode, and when run via nspawn)
@ -537,8 +804,6 @@ Features:
* as soon as we have sender timestamps, revisit coalescing multiple parallel daemon reloads:
* in systemctl list-unit-files: show the install value the presets would suggest for a service in a third column
* figure out when we can use the coarse timers
* add "systemctl start -v foobar.service" that shows logs of a service
@ -555,8 +820,6 @@ Features:
* what to do about udev db binary stability for apps? (raw access is not an option)
* man: maybe use the word "inspect" rather than "introspect"?
* systemctl: if some operation fails, show log output?
* systemctl edit: use equivalent of cat() to insert existing config as a comment, prepended with #.
@ -568,9 +831,6 @@ Features:
* merge ~/.local/share and ~/.local/lib into one similar /usr/lib and /usr/share....
* systemd.show_status= should probably have a mode where only failed
units are shown.
* add systemd.abort_on_kill or some other such flag to send SIGABRT instead of SIGKILL
(throughout the codebase, not only PID1)
@ -676,7 +936,6 @@ Features:
- allow multiple signal handlers per signal?
- document chaining of signal handler for SIGCHLD and child handlers
- define more intervals where we will shift wakeup intervals around in, 1h, 6h, 24h, ...
- generate a failure of a default event loop is executed out-of-thread
* investigate endianness issues of UUID vs. GUID
@ -700,6 +959,10 @@ Features:
* teach ConditionKernelCommandLine= globs or regexes (in order to match foobar={no,0,off})
* Add ConditionDirectoryNotEmpty= handle non-absoute paths as a search path or add
ConditionConfigSearchPathNotEmpty= or different syntax? See the discussion starting at
* BootLoaderSpec: Clarify that the kernel has to be in $BOOT. Clarify
that the boot loader should be installed to the ESP. Define a way
how an installer can figure out whether a BLS compliant boot loader
@ -755,6 +1018,7 @@ Features:
make assumptions about their slice anymore.
- follow PropertiesChanged state more closely, to deal with quick logouts and
- (optionally?) spawn seat-manager@$SEAT.service whenever a seat shows up that as CanGraphical set
* journal:
- consider introducing implicit _TTY= + _PPID= + _EUID= + _EGID= + _FSUID= + _FSGID= fields
@ -772,7 +1036,7 @@ Features:
- journal: add a setgid "systemd-journal" utility to invoke from libsystemd-journal, which passes fds via STDOUT and does PK access
- journactl: support negative filtering, i.e. FOOBAR!="waldo",
and !FOOBAR for events without FOOBAR.
- journal: store timestamp of journal_file_set_offline() int he header,
- journal: store timestamp of journal_file_set_offline() in the header,
so it is possible to display when the file was last synced.
- journal-send.c, log.c: when the log socket is clogged, and we drop, count this and write a message about this when it gets unclogged again.
- journal: find a way to allow dropping history early, based on priority, other rules
@ -789,11 +1053,6 @@ Features:
- journald: when we drop syslog messages because the syslog socket is
full, make sure to write how many messages are lost as first thing
to syslog when it works again.
- change systemd-journal-flush into a service that stays around during
boot, and causes the journal to be moved back to /run on shutdown,
so that we do not keep /var busy. This needs to happen synchronously,
hence doing this via signals is not going to work.
- optionally support running journald from the command line for testing purposes in external projects
- journald: allow per-priority and per-service retention times when rotating/vacuuming
- journald: make use of uid-range.h to managed uid ranges to split
journals in.
@ -819,6 +1078,7 @@ Features:
them via machined, and also watch containers coming and going.
Benefit: nspawn --ephemeral would start working nicely with the journal.
- assign MESSAGE_ID to log messages about failed services
- check if loop in decompress_blob_xz() is necessary
* add a test if all entries in the catalog are properly formatted.
(Adding dashes in a catalog entry currently results in the catalog entry
@ -834,7 +1094,8 @@ Features:
- document systemd-journal-flush.service properly
- documentation: recommend to connect the timer units of a service to the service via Also= in [Install]
- man: document the very specific env the shutdown drop-in tools live in
- man: add more examples to man pages
- man: add more examples to man pages,
- in particular an example how to do the equivalent of switching runlevels
- man: maybe sort directives in man pages, and take sections from --help and apply them to man too
- document root=gpt-auto properly
@ -943,7 +1204,6 @@ Features:
* tmpfiles:
- apply "x" on "D" too (see patch from William Douglas)
- replace F with f+.
- instead of ignoring unknown fields, reject them.
- creating new directories/subvolumes/fifos/device nodes
should not follow symlinks. None of the other adjustment or creation
@ -1016,8 +1276,6 @@ Features:
- allow Type=simple with PIDFile=
- allow writing multiple conditions in unit files on one line
- load-fragment: when loading a unit file via a chain of symlinks
verify that it is not masked via any of the names traversed.
- introduce Type=pid-file
- introduce mix of BindTo and Requisite
- add a concept of RemainAfterExit= to scope units
@ -1036,18 +1294,15 @@ Features:
* networkd:
- add more keys to [Route] and [Address] sections
- add support for more DHCPv4 options (and, longer term, other kinds of dynamic config)
- add proper initrd support (in particular generate .network/.link files based on /proc/cmdline)
- add reduced [Link] support to .network files
- add Scope= parsing option for [Network]
- properly handle routerless dhcp leases
- work with non-Ethernet devices
- add support for more bond options
- dhcp: do we allow configuring dhcp routes on interfaces that are not the one we got the dhcp info from?
- the DHCP lease data (such as NTP/DNS) is still made available when
a carrier is lost on a link. It should be removed instantly.
- expose in the API the following bits:
- option 15, domain name and/or option 119, search list
- option 12, host name and/or option 81, fqdn
- option 15, domain name
- option 12, hostname and/or option 81, fqdn
- option 123, 144, geolocation
- option 252, configure http proxy (PAC/wpad)
- provide a way to define a per-network interface default metric value
@ -1055,11 +1310,9 @@ Features:
- allow Name= to be specified repeatedly in the [Match] section. Maybe also
support Name=foo*|bar*|baz ?
- duplicate address check for static IPs (like ARPCHECK in network-scripts)
- allow DUID/IAID to be customized, see issue #394.
- whenever uplink info changes, make DHCP server send out FORCERENEW
* networkd-wait-online:
- make operstates to wait for configurable?
* Figure out how to do unittests of networkd's state serialization
* dhcp:
- figure out how much we can increase Maximum Message Size
@ -1084,20 +1337,14 @@ External:
- natively watch for dbus-*.service symlinks (PENDING)
- teach dbus to activate all services it finds in /etc/systemd/services/org-*.service
* fix alsa mixer restore to not print error when no config is stored
* make cryptsetup lower --iter-time
* patch kernel for xattr support in /dev, /proc/, /sys?
* kernel: add device_type = "fb", "fbcon" to class "graphics"
* /usr/bin/service should actually show the new command line
* fedora: suggest auto-restart on failure, but not on success and not on coredump. also, ask people to think about changing the start limit logic. Also point people to RestartPreventExitStatus=, SuccessExitStatus=
* fedora: F20: go timer units all the way, leave cron.daily for cron
* neither pkexec nor sudo initialize environ[] from the PAM environment?
* fedora: update policy to declare access mode and ownership of unit files to root:root 0644, and add an rpmlint check for it
@ -1108,6 +1355,9 @@ External:
- <command> <verb> -<TAB> should complete options, but currently does not
- systemctl add-wants,add-requires
* systemctl status should know about 'elogind-analyze calendar ... --iterations='
* If timer has just OnInactiveSec=..., it should fire after a specified time
after being started.
@ -1123,4 +1373,3 @@ Regularly:
* link up selected blog stories from man pages and unit files Documentation= fields
String is not UTF-8 clean, ignoring assignment
timedatex.service: Consumed 26ms CPU time.


@ -56,135 +56,12 @@
<Unit filename="../Makefile" />
<Unit filename="../build/config.h" />
<Unit filename="../man/busctl.xml" />
<Unit filename="../man/" />
<Unit filename="../man/custom-html.xsl" />
<Unit filename="../man/custom-man.xsl" />
<Unit filename="../man/elogind-inhibit.xml" />
<Unit filename="../man/elogind.journal-fields.xml" />
<Unit filename="../man/elogind.syntax.xml" />
<Unit filename="../man/elogind.time.xml" />
<Unit filename="../man/elogind.xml" />
<Unit filename="../man/glib-event-glue.c">
<Option compilerVar="CC" />
<Unit filename="../man/less-variables.xml" />
<Unit filename="../man/libelogind-pkgconfig.xml" />
<Unit filename="../man/loginctl.xml" />
<Unit filename="../man/logind.conf.xml" />
<Unit filename="../man/" />
<Unit filename="../man/pam_elogind.xml" />
<Unit filename="../man/sd-bus.xml" />
<Unit filename="../man/sd-event.xml" />
<Unit filename="../man/sd-login.xml" />
<Unit filename="../man/sd_booted.xml" />
<Unit filename="../man/sd_bus_add_match.xml" />
<Unit filename="../man/sd_bus_attach_event.xml" />
<Unit filename="../man/sd_bus_close.xml" />
<Unit filename="../man/sd_bus_creds_get_pid.xml" />
<Unit filename="../man/sd_bus_creds_get_pid.xml.bak" />
<Unit filename="../man/sd_bus_creds_new_from_pid.xml" />
<Unit filename="../man/sd_bus_default.xml" />
<Unit filename="../man/sd_bus_error.xml" />
<Unit filename="../man/sd_bus_error_add_map.xml" />
<Unit filename="../man/sd_bus_get_fd.xml" />
<Unit filename="../man/sd_bus_get_n_queued_read.xml" />
<Unit filename="../man/sd_bus_is_open.xml" />
<Unit filename="../man/sd_bus_message_append.xml" />
<Unit filename="../man/sd_bus_message_append_array.xml" />
<Unit filename="../man/sd_bus_message_append_basic.xml" />
<Unit filename="../man/sd_bus_message_append_string_memfd.xml" />
<Unit filename="../man/sd_bus_message_append_strv.xml" />
<Unit filename="../man/sd_bus_message_copy.xml" />
<Unit filename="../man/sd_bus_message_get_cookie.xml" />
<Unit filename="../man/sd_bus_message_get_monotonic_usec.xml" />
<Unit filename="../man/sd_bus_message_get_signature.xml" />
<Unit filename="../man/sd_bus_message_get_type.xml" />
<Unit filename="../man/sd_bus_message_new.xml" />
<Unit filename="../man/sd_bus_message_new_method_call.xml" />
<Unit filename="../man/sd_bus_message_new_method_error.xml" />
<Unit filename="../man/sd_bus_message_new_signal.xml" />
<Unit filename="../man/sd_bus_message_read.xml" />
<Unit filename="../man/sd_bus_message_read_array.xml" />
<Unit filename="../man/sd_bus_message_read_basic.xml" />
<Unit filename="../man/sd_bus_message_rewind.xml" />
<Unit filename="../man/sd_bus_message_set_destination.xml" />
<Unit filename="../man/sd_bus_message_set_expect_reply.xml" />
<Unit filename="../man/sd_bus_message_skip.xml" />
<Unit filename="../man/sd_bus_message_verify_type.xml" />
<Unit filename="../man/sd_bus_negotiate_fds.xml" />
<Unit filename="../man/sd_bus_new.xml" />
<Unit filename="../man/sd_bus_path_encode.xml" />
<Unit filename="../man/sd_bus_process.xml" />
<Unit filename="../man/sd_bus_reply_method_error.xml" />
<Unit filename="../man/sd_bus_request_name.xml" />
<Unit filename="../man/sd_bus_set_close_on_exit.xml" />
<Unit filename="../man/sd_bus_set_connected_signal.xml" />
<Unit filename="../man/sd_bus_set_description.xml" />
<Unit filename="../man/sd_bus_set_sender.xml" />
<Unit filename="../man/sd_bus_set_watch_bind.xml" />
<Unit filename="../man/sd_bus_slot_ref.xml" />
<Unit filename="../man/sd_bus_slot_set_description.xml" />
<Unit filename="../man/sd_bus_slot_set_destroy_callback.xml" />
<Unit filename="../man/sd_bus_slot_set_floating.xml" />
<Unit filename="../man/sd_bus_slot_set_userdata.xml" />
<Unit filename="../man/sd_bus_track_add_name.xml" />
<Unit filename="../man/sd_bus_track_new.xml" />
<Unit filename="../man/sd_bus_wait.xml" />
<Unit filename="../man/sd_event_add_child.xml" />
<Unit filename="../man/sd_event_add_defer.xml" />
<Unit filename="../man/sd_event_add_inotify.xml" />
<Unit filename="../man/sd_event_add_io.xml" />
<Unit filename="../man/sd_event_add_signal.xml" />
<Unit filename="../man/sd_event_add_time.xml" />
<Unit filename="../man/sd_event_exit.xml" />
<Unit filename="../man/sd_event_get_fd.xml" />
<Unit filename="../man/sd_event_new.xml" />
<Unit filename="../man/sd_event_now.xml" />
<Unit filename="../man/sd_event_run.xml" />
<Unit filename="../man/sd_event_set_watchdog.xml" />
<Unit filename="../man/sd_event_source_get_event.xml" />
<Unit filename="../man/sd_event_source_get_pending.xml" />
<Unit filename="../man/sd_event_source_set_description.xml" />
<Unit filename="../man/sd_event_source_set_destroy_callback.xml" />
<Unit filename="../man/sd_event_source_set_enabled.xml" />
<Unit filename="../man/sd_event_source_set_prepare.xml" />
<Unit filename="../man/sd_event_source_set_priority.xml" />
<Unit filename="../man/sd_event_source_set_userdata.xml" />
<Unit filename="../man/sd_event_source_unref.xml" />
<Unit filename="../man/sd_event_wait.xml" />
<Unit filename="../man/sd_get_seats.xml" />
<Unit filename="../man/sd_id128_get_machine.xml" />
<Unit filename="../man/sd_id128_randomize.xml" />
<Unit filename="../man/sd_id128_to_string.xml" />
<Unit filename="../man/sd_is_fifo.xml" />
<Unit filename="../man/sd_journal_add_match.xml" />
<Unit filename="../man/sd_journal_enumerate_fields.xml" />
<Unit filename="../man/sd_journal_get_catalog.xml" />
<Unit filename="../man/sd_journal_get_cursor.xml" />
<Unit filename="../man/sd_journal_get_cutoff_realtime_usec.xml" />
<Unit filename="../man/sd_journal_get_data.xml" />
<Unit filename="../man/sd_journal_get_fd.xml" />
<Unit filename="../man/sd_journal_get_realtime_usec.xml" />
<Unit filename="../man/sd_journal_get_usage.xml" />
<Unit filename="../man/sd_journal_has_runtime_files.xml" />
<Unit filename="../man/sd_journal_next.xml" />
<Unit filename="../man/sd_journal_open.xml" />
<Unit filename="../man/sd_journal_print.xml" />
<Unit filename="../man/sd_journal_query_unique.xml" />
<Unit filename="../man/sd_journal_seek_head.xml" />
<Unit filename="../man/sd_journal_stream_fd.xml" />
<Unit filename="../man/sd_listen_fds.xml" />
<Unit filename="../man/sd_login_monitor_new.xml" />
<Unit filename="../man/sd_machine_get_class.xml" />
<Unit filename="../man/sd_notify.xml" />
<Unit filename="../man/sd_pid_get_owner_uid.xml" />
<Unit filename="../man/sd_seat_get_active.xml" />
<Unit filename="../man/sd_session_is_active.xml" />
<Unit filename="../man/sd_uid_get_state.xml" />
<Unit filename="../man/sd_watchdog_enabled.xml" />
<Unit filename="../man/standard-options.xml" />
<Unit filename="../man/user-system-options.xml" />
<Unit filename="../man/vtable-example.c">
<Option compilerVar="CC" />
<Unit filename="../">
<Option target="all" />
<Option target="clean" />
@ -205,6 +82,10 @@
<Option compilerVar="CC" />
<Unit filename="../src/basic/audit-util.h" />
<Unit filename="../src/basic/blockdev-util.c">
<Option compilerVar="CC" />
<Unit filename="../src/basic/blockdev-util.h" />
<Unit filename="../src/basic/build.h" />
<Unit filename="../src/basic/bus-label.c">
<Option compilerVar="CC" />
@ -240,6 +121,10 @@
<Option compilerVar="CC" />
<Unit filename="../src/basic/dirent-util.h" />
<Unit filename="../src/basic/efivars.c">
<Option compilerVar="CC" />
<Unit filename="../src/basic/efivars.h" />
<Unit filename="../src/basic/env-file.c">
<Option compilerVar="CC" />
@ -304,9 +189,6 @@
<Option compilerVar="CC" />
<Unit filename="../src/basic/io-util.h" />
<Unit filename="../src/basic/kbd-util.c">
<Option compilerVar="CC" />
<Unit filename="../src/basic/khash.c">
<Option compilerVar="CC" />
@ -373,6 +255,7 @@
<Unit filename="../src/basic/missing_syscall.h" />
<Unit filename="../src/basic/missing_timerfd.h" />
<Unit filename="../src/basic/missing_type.h" />
<Unit filename="../src/basic/missing_xfs.h" />
<Unit filename="../src/basic/mkdir-label.c">
<Option compilerVar="CC" />
@ -424,6 +307,10 @@
<Option compilerVar="CC" />
<Unit filename="../src/basic/random-util.h" />
<Unit filename="../src/basic/ratelimit.c">
<Option compilerVar="CC" />
<Unit filename="../src/basic/ratelimit.h" />
<Unit filename="../src/basic/raw-clone.h" />
<Unit filename="../src/basic/refcnt.h" />
<Unit filename="../src/basic/rlimit-util.c">
@ -860,6 +747,10 @@
<Option compilerVar="CC" />
<Unit filename="../src/shared/bus-util.h" />
<Unit filename="../src/shared/cgroup-setup.c">
<Option compilerVar="CC" />
<Unit filename="../src/shared/cgroup-setup.h" />
<Unit filename="../src/shared/clean-ipc.c">
<Option compilerVar="CC" />
@ -872,10 +763,14 @@
<Option compilerVar="CC" />
<Unit filename="../src/shared/dev-setup.h" />
<Unit filename="../src/shared/efivars.c">
<Unit filename="../src/shared/dns-domain.c">
<Option compilerVar="CC" />
<Unit filename="../src/shared/dns-domain.h" />
<Unit filename="../src/shared/efi-loader.c">
<Option compilerVar="CC" />
<Unit filename="../src/shared/efivars.h" />
<Unit filename="../src/shared/efi-loader.h" />
<Unit filename="../src/shared/enable-mempool.c">
<Option compilerVar="CC" />
@ -896,11 +791,19 @@
<Unit filename="../src/shared/format-table.h" />
<Unit filename="../src/shared/fsck-util.h" />
<Unit filename="../src/shared/group-record.c">
<Option compilerVar="CC" />
<Unit filename="../src/shared/group-record.h" />
<Unit filename="../src/shared/json-internal.h" />
<Unit filename="../src/shared/json.c">
<Option compilerVar="CC" />
<Unit filename="../src/shared/json.h" />
<Unit filename="../src/shared/libcrypt-util.c">
<Option compilerVar="CC" />
<Unit filename="../src/shared/libcrypt-util.h" />
<Unit filename="../src/shared/libshared.sym" />
<Unit filename="../src/shared/log-link.h" />
<Unit filename="../src/shared/main-func.h" />
@ -913,6 +816,7 @@
<Option compilerVar="CC" />
<Unit filename="../src/shared/nsflags.h" />
<Unit filename="../src/shared/openssl-util.h" />
<Unit filename="../src/shared/output-mode.c">
<Option compilerVar="CC" />
@ -921,7 +825,15 @@
<Option compilerVar="CC" />
<Unit filename="../src/shared/pager.h" />
<Unit filename="../src/shared/pam-util.c">
<Option compilerVar="CC" />
<Unit filename="../src/shared/pam-util.h" />
<Unit filename="../src/shared/pe-header.h" />
<Unit filename="../src/shared/pkcs11-util.c">
<Option compilerVar="CC" />
<Unit filename="../src/shared/pkcs11-util.h" />
<Unit filename="../src/shared/pretty-print.c">
<Option compilerVar="CC" />
@ -955,14 +867,26 @@
<Option compilerVar="CC" />
<Unit filename="../src/shared/udev-util.h" />
<Unit filename="../src/shared/unit-file.c">
<Unit filename="../src/shared/user-record-nss.c">
<Option compilerVar="CC" />
<Unit filename="../src/shared/user-record-nss.h" />
<Unit filename="../src/shared/user-record.c">
<Option compilerVar="CC" />
<Unit filename="../src/shared/unit-file.h" />
<Unit filename="../src/shared/user-record.h" />
<Unit filename="../src/shared/userdb.c">
<Option compilerVar="CC" />
<Unit filename="../src/shared/userdb.h" />
<Unit filename="../src/shared/utmp-wtmp.c">
<Option compilerVar="CC" />
<Unit filename="../src/shared/utmp-wtmp.h" />
<Unit filename="../src/shared/varlink.c">
<Option compilerVar="CC" />
<Unit filename="../src/shared/varlink.h" />
<Unit filename="../src/shared/verbs.c">
<Option compilerVar="CC" />
@ -998,12 +922,6 @@
<Unit filename="../src/test/test-bus-util.c">
<Option compilerVar="CC" />
<Unit filename="../src/test/test-cgroup-cpu.c">
<Option compilerVar="CC" />
<Unit filename="../src/test/test-cgroup-unit-default.c">
<Option compilerVar="CC" />
<Unit filename="../src/test/test-cgroup.c">
<Option compilerVar="CC" />
@ -1028,18 +946,12 @@
<Unit filename="../src/test/test-ellipsize.c">
<Option compilerVar="CC" />
<Unit filename="../src/test/test-env-file.c">
<Option compilerVar="CC" />
<Unit filename="../src/test/test-escape.c">
<Option compilerVar="CC" />
<Unit filename="../src/test/test-exec-util.c">
<Option compilerVar="CC" />
<Unit filename="../src/test/test-exit-status.c">
<Option compilerVar="CC" />
<Unit filename="../src/test/test-extract-word.c">
<Option compilerVar="CC" />
@ -1065,7 +977,6 @@
<Unit filename="../src/test/test-hashmap.c">
<Option compilerVar="CC" />
<Unit filename="../src/test/test-helper.h" />
<Unit filename="../src/test/test-hexdecoct.c">
<Option compilerVar="CC" />
@ -1093,9 +1004,6 @@
<Unit filename="../src/test/test-mountpoint-util.c">
<Option compilerVar="CC" />
<Unit filename="../src/test/test-ordered-set.c">
<Option compilerVar="CC" />
<Unit filename="../src/test/test-parse-util.c">
<Option compilerVar="CC" />
@ -1159,9 +1067,6 @@
<Unit filename="../src/test/test-unaligned.c">
<Option compilerVar="CC" />
<Unit filename="../src/test/test-unit-file.c">
<Option compilerVar="CC" />
<Unit filename="../src/test/test-user-util.c">
<Option compilerVar="CC" />
@ -1171,9 +1076,6 @@
<Unit filename="../src/test/test-util.c">
<Option compilerVar="CC" />
<Unit filename="../src/test/test-varlink.c">
<Option compilerVar="CC" />
<Unit filename="../src/test/test-verbs.c">
<Option compilerVar="CC" />
@ -1185,9 +1087,11 @@
<Option compilerVar="CC" />
<Unit filename="../src/update-utmp/update-utmp.h" />
<Unit filename="../src/version/" />
<Unit filename="../tools/" />
<Unit filename="../tools/" />
<Unit filename="../tools/" />
<Unit filename="../tools/" />
<Unit filename="../tools/" />
<Unit filename="../tools/" />
<Unit filename="../tools/" />


@ -1,4 +1,5 @@
#!/bin/bash -e
#!/usr/bin/env bash
set -e


@ -1,5 +1,7 @@
title: Code Quality Tools
category: Contributing
layout: default
# Code Quality Tools
@ -69,5 +71,8 @@ available functionality:
See [Testing elogind using sanitizers](
for more information.
16. Fossies provides [source code misspelling reports](
The elogind report can be found [here](
Access to Coverity and oss-fuzz reports is limited. Please reach out to the
maintainers if you need access.


@ -1,5 +1,7 @@