Commit Graph
90486 Commits
Author SHA1 Message Date
Lennart Poettering 65079c0a39 shell-completion: catch up with cryptenroll command line 2026-06-27 17:28:39 +02:00
Lennart Poettering 2d691049ae test: cover the io.systemd.CryptEnroll Varlink interface
Extend the existing systemd-cryptenroll test with varlinkctl invocations
equivalent to the command line ones: enrolling a recovery key and passwords
(unlocking via a key file by path and via a passed file descriptor), listing
slots, combining enrollment with a type-based wipe, and the negative cases
(ListSlots without 'more', and the pkcs11/tpm2 mechanisms that are not part of
the EnrollMechanism allowlist).
2026-06-27 17:28:39 +02:00
Lennart Poettering 47dc8abf8b cryptenroll: refuse reading a key longer than 4 MiB
If we open this up to external processes let's tighten rules and refuse
reading more than 4 MiB as key, after all this is locked memory.
2026-06-27 17:28:39 +02:00
Lennart Poettering 0089a46b6b cryptenroll: add interactive --firstboot enrollment wizard
Add a --firstboot mode that interactively walks the user through enrolling a
passphrase, a recovery key, or a FIDO2 token, with one menu entry per suitable
token currently plugged in (driven by a new fido2_enumerate_devices() helper).
Pressing enter at the top-level menu leaves the volume unchanged; for each
already-enrolled credential type the wizard offers to wipe it as part of the
operation. It populates the same EnrollContext the command line and Varlink
paths use, so the actual enrollment goes through the shared enroll_now() path.

A companion --prompt-suppress= option takes a list of slot types: if a slot of
any listed type already exists, the wizard does nothing and exits successfully.
This lets it be hooked into the boot process while staying quiet once the
system has been set up.

The accompanying systemd-cryptenroll-firstboot.service runs this from the
initrd, after systemd-repart has created the encrypted volume but before we
transition to the host, suppressing itself once a password, recovery key or
FIDO2 token is enrolled. To make that work, determine_default_node() now looks
below /sysroot/ when running in the initrd, since the host file systems aren't
at their final location yet.

While the wizard is active it draws the same installer-style chrome (blue bars
at the top and bottom of the terminal) as systemd-sysinstall, using the shared
prompt_loop_yes_no() helper for its wipe confirmations.

Honours the systemd.firstboot= kernel command line option.

Fixes: #36298
2026-06-27 17:28:39 +02:00
Lennart Poettering e298331876 cryptenroll: add --unlock-headless as a new pseudo-unlock mechanism
THis simply tries TPM2 if available, and falls back to empty password.
2026-06-27 17:28:39 +02:00
Lennart Poettering 5f2d4fb623 cryptenroll: add --unlock-empty to unlock via an empty password 2026-06-27 17:28:39 +02:00
Lennart Poettering 2bbcf6c66f cryptenroll: move load_volume_key_keyfile() to cryptenroll-password.c
Conceptually a keyfile and a password are pretty much the same thing,
hence put them in the same file.
2026-06-27 17:28:39 +02:00
Lennart Poettering 0df41e9329 cryptenroll: expose enrollment as an io.systemd.CryptEnroll Varlink service
Add a Varlink interface for systemd-cryptenroll, building on the EnrollContext
introduced previously. A single Enroll method covers password, recovery-key and
FIDO2 enrollment; PKCS#11 and TPM2 are not exposed for now (they are not
part of the EnrollMechanism allowlist, so the generic InvalidParameter error
applies). A ListSlots method enumerates the currently enrolled keyslots.

The dispatcher populates the same EnrollContext the command line uses and then
runs the shared enroll_now()/prepare_luks()/wipe_slots() paths, so both
front-ends behave identically. FIDO2 enrollment that requires user presence
reports an imminent touch via a non-terminating "state":"touch" reply when the
caller passes 'more'. Credential material (password, FIDO2 PIN, recovery key)
is handled as sensitive, and key files may be passed either by path or as an
fd index.

The server is allocated root-only plus caller's-own-UID, with the listening
socket created in 0644 mode.

Replaces: #31096
2026-06-27 17:28:39 +02:00
Lennart Poettering fd3fb3a85c cryptenroll: add an "unlock_password" field to ExecContext
This is preparation for the Varlinkification, as then we want to pass
the password in via IPC instead of prompting the user.

Note that this only adds the field, and applies it, but never actually
sets it. That's for the varlinkification later.
2026-06-27 17:28:39 +02:00
Lennart Poettering 39d08de81b cryptenroll: collect all enrollment parameters in an EnrollContext
Introduce an EnrollContext structure that carries everything the enrollment
and unlocking helpers need, and route all enroll_*()/load_volume_key_*()/
wipe_slots() calls through it. The command line still populates the existing
arg_* globals as before; once parsing is complete they are copied into a
self-contained EnrollContext (which owns its strings/arrays) and the rest of
the code only ever reads from the context.

This is preparation for the upcoming varlinkification of systemd-cryptenroll:
a Varlink dispatcher (and later an interactive first-boot wizard) can populate
the very same EnrollContext without going through the arg_* parsing layer.

To support non-interactive (e.g. Varlink) callers, the context carries an
'interactive' flag: when false, every credential prompt is disabled and the
helpers fail with -ENOPKG (the established "querying disabled via headless"
code) instead of blocking on a tty. Passwords, FIDO2 PINs and PKCS#11 PINs are
all covered, and an optional FIDO2 PIN can be supplied directly via the
context. enroll_recovery() additionally grows a quiet mode that returns the
recovery key instead of printing it.

This also adds one new field to EnrollContext which didn't exist before:
the unlock_password is useful for the Varlink hookup later.

No change in command line behaviour.
2026-06-27 17:28:39 +02:00
Lennart Poettering 846b0efb04 mute-console: allow NULL being passed 2026-06-27 17:28:39 +02:00
Lennart Poettering 77ee077dfe shared: add a generic prompt_loop_yes_no() helper
Factor a yes/no variant of prompt_loop() out into prompt-util.[ch], so the
various interactive tools can share a single implementation, and convert
systemd-sysinstall's installation confirmation question over to it.
2026-06-27 17:28:39 +02:00
Yu Watanabe ca5100dbad gcrypt-util: drop several unused definitions 2026-06-28 00:26:56 +09:00
Yu Watanabe 6461c1b017 tree-wide: drop gcrypt dependency from all binaries except for unit tests
With this change, gcrypt dependency is not mandatory. Hence, allow to build
systemd even when -D gcrypt=enabled but gcrypt devel package is not installed.
2026-06-28 00:26:56 +09:00
Yu Watanabe 005e94da17 journal: replace gcrypt with openssl 2026-06-28 00:26:56 +09:00
Yu Watanabe 7fae5c5bcc fsprg-openssl: rewrite fsprg with OpenSSL
This introduce OpenSSL port of fsprg, which is implemented by using libgcrypt.
2026-06-28 00:26:56 +09:00
Yu Watanabe 2b2ca3d7cb crypto-util: load several more functions from libcrypto.so
They will be used in later commits.
2026-06-28 00:26:56 +09:00
Yu Watanabe 73568eb5b5 crypto-util: sort symbols 2026-06-28 00:26:29 +09:00
Yu Watanabe d956568160 test-fsprg: add unit test for FSPRG 2026-06-28 00:20:38 +09:00
Yu Watanabe e8d21b76f0 test-journal-verify: replace HAVE_GCRYPT ifdef with journal_auth_supported() 2026-06-28 00:00:11 +09:00
Yu Watanabe a09feb7958 sd-journal: allow to verify sealed journals even when sealing support is disabled
Of course, if disabled, seal tags cannot be verified, hence the check is skipped.
2026-06-28 00:00:11 +09:00
Yu Watanabe 2e077b57a7 sd-journal: allow to read sealed journal files when sealing is not supported 2026-06-28 00:00:11 +09:00
Yu Watanabe 24c4729198 sd-journal: drop libgcrypt dependency from libsystemd
This introduce a vtable for journal tagging feature in sd-journal,
and makes libgcrypt dependent features loaded by users (journald,
journalctl, journal-remote, and unit tests) when necessary.
2026-06-28 00:00:11 +09:00
Yu Watanabe 14236c019b journal-authenticate: save mmaped size rather than file size field in the file 2026-06-28 00:00:11 +09:00
Yu Watanabe 917763586f sd-journal: introduce JournalAuthContext
Then, move several components for journal tagging in JournalFile
to JournalAuthContext.
This also introduces wrapper functions that checks gcrypt support.
2026-06-28 00:00:09 +09:00
Yu Watanabe 4b97dc5606 journal-authenticate: initialize hmac when necessary 2026-06-27 23:58:00 +09:00
Yu Watanabe 254cc90c5c journal-authenticate: several trivial cleanups
- adds several overflow check,
- adds missing assertion,
- drop unnecessary conditions,
- declare variables when necessary.
2026-06-27 23:58:00 +09:00
Yu Watanabe 0a12d5a60e journal-authenticate: check overflow 2026-06-27 23:57:55 +09:00
Yu Watanabe 7061e6f3cb journal-authenticate: merge several functions into journal_file_maybe_append_tag() 2026-06-27 23:54:46 +09:00
Yu Watanabe 2647d82a68 journal-authenticate: move several more functions 2026-06-27 23:54:46 +09:00
Yu Watanabe ede9ff4c8b journal-authenticate: move one more function 2026-06-27 23:54:46 +09:00
Yu Watanabe 130eca9323 journal-authenticate: move functions 2026-06-27 23:54:46 +09:00
Luca Boccassi 91631d899b mkosi: update debian commit ref and install new split-out packages (#42769) 2026-06-27 15:33:38 +01:00
Yu Watanabe e7f81e4ea9 journal: several cleanups for journal sealing feature (#42770) 2026-06-27 23:01:09 +09:00
Yu Watanabe 0609bb1894 journal: drop journal_file_tag_seqnum() and embed into journal_file_append_tag() 2026-06-27 20:36:36 +09:00
Yu Watanabe a97de75de7 journal: use FSS_HEADER_SIGNATURE at one more place 2026-06-27 20:36:36 +09:00
Yu Watanabe 1828327e75 journalctl-misc: several cleanups
- honor -ENOKEY from journal_file_verify(),
- use RET_GATHER(),
- use usec_sub_unsigned(),
- reduce indentation,
- tighten variable scope.
2026-06-27 20:35:35 +09:00
Yu Watanabe 4826f760bf journal-verify: coding style fixlets 2026-06-27 20:09:12 +09:00
Yu Watanabe 79acf8894b journal-authenticate: refuse invalid start and interval parameters
We have already checked that in journal_file_fss_load().
Let's also check the same in loading user provided key.
2026-06-27 20:08:53 +09:00
Luca Boccassi 0b57cfd797 mkosi: pull new split-out packages for deb/ubuntu 2026-06-27 10:20:47 +01:00
Luca Boccassi cb317e90d8 mkosi: update debian commit reference to 0b390d268323a49191a9a3bcc07a46b573c1e464
* 0b390d2683 One more fixup for d/copyright
* 91d3dadcb5 Update changelog for 261.1-1 release
* 3c287e1f86 d/copyright: update to add new licenses
* a82117f9a3 Install new files for upstream build
* 020caeb149 Override new Lintian false positive
* d55b67b66e d/control: demote libnss-{myhostname,resolve} to Suggests for systemd-resolved
* 1c537705ec Update changelog for 261-2 release
* 6235897bbc Note new package split in NEWS
* a440cb2c4a Install new files for upstream build
* 7eaa21ad05 Split tpm tools into new systemd-tpm package
* 52b28b74f3 Split metrics reporting tools into new systemd-report package
* de2f367f22 Split imds tools into new systemd-imds package
* 2d0a07f5ae d/t/control: do not install xserver-xorg-video-dummy on loong64
* c886c3efc8 Install new files for upstream build
* 0efa66b4af Update changelog for 261-1 release
* e36cf82a1d lintian-overrides: override error about derivative.ubuntu build profile
* fbd38c36ea d/control: do not build systemd-boot-efi-*-signed-template on ubuntu
2026-06-27 10:12:58 +01:00
Yu Watanabe c286c0daaf journal: use recognizable error code
EINVAL is too generic and widely used. Let's use more specific error code.
2026-06-27 14:04:49 +09:00
Yu Watanabe 20e0244bdf sd-journal: use iovec for fsprg state and friends
This also makes them erased before freed.
2026-06-27 14:04:49 +09:00
Yu Watanabe fff2c0beaf journalctl: use iovec for fsprg state and friends
This also makes them erased on exit.
2026-06-27 14:04:48 +09:00
Yu Watanabe 82ff3f71f5 iovec-util: introduce several helper functions 2026-06-27 14:04:48 +09:00
Yu Watanabe ee6522d036 journal-importer: avoid false maybe-uninitialized warning
Observerd on Ubuntu 24.04 with GCC 13 on arm64 architecture.
```
../src/shared/journal-importer.c: In function ‘journal_importer_process_data’:
../src/shared/journal-importer.c:344:30: error: ‘line’ may be used uninitialized [-Werror=maybe-uninitialized]
  344 |                         if (!journal_field_valid(line, n - 1, true)) {
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../src/shared/journal-importer.c:295:23: note: ‘line’ was declared here
  295 |                 char *line, *sep;
      |                       ^~~~
cc1: all warnings being treated as errors
```
2026-06-27 14:04:48 +09:00
Yu Watanabe d983d231eb resolvectl: use more varlink (#41840)
There are already varlink methods for `ResolveHostname`,
`ResolveAddress`, and `ResolveRecord`. Use those in `resolvectl` instead
of the dbus equivalents.
2026-06-27 12:21:19 +09:00
Lennart Poettering 2358f400b6 sysupdate: Address review feedback on CheckNew varlink scaffolding
Follow-up to #42422:

 - Rename process_image() to context_process_image(), since it now
   operates on a Context object.
 - Use IN_SET() in image_type_can_sysupdate() instead of a switch.
 - Name the return parameters of context_list_components() ret_xyz, per
   our coding style.
 - Drop a redundant "else" after a return in vl_method_check_new().
2026-06-26 22:38:57 +02:00
Nick Rosbrook fa6fe468f4 resolvectl: use varlink instead of dbus for ResolveService 2026-06-26 16:03:18 -04:00
Nick Rosbrook 4e1943a209 nss-resolve: use resolve-varlink-util.h helpers
Re-factor using the shared code introduced for resolvectl.
2026-06-26 16:03:18 -04:00