]> git.ipfire.org Git - thirdparty/systemd.git/log
thirdparty/systemd.git
14 hours agosd-dhcp-server-lease: rename dhcp_server_lease_append_json() -> dhcp_server_lease_bui... 42061/head
Yu Watanabe [Sun, 10 May 2026 13:28:03 +0000 (22:28 +0900)] 
sd-dhcp-server-lease: rename dhcp_server_lease_append_json() -> dhcp_server_lease_build_json()

It does not append, but build a new JSON variant.

14 hours agosd-dhcp-server: coding style fix
Yu Watanabe [Thu, 7 May 2026 02:18:05 +0000 (11:18 +0900)] 
sd-dhcp-server: coding style fix

14 hours agofuzz: modernize fuzz-dhcp-server
Yu Watanabe [Mon, 4 May 2026 05:16:00 +0000 (14:16 +0900)] 
fuzz: modernize fuzz-dhcp-server

- Do not include .c file.
- Use ASSERT_OK() and friends.

14 hours agodhcp-protocol: introduce more sub-options for DHCP Relay Agent Information option
Yu Watanabe [Sat, 2 May 2026 13:40:22 +0000 (22:40 +0900)] 
dhcp-protocol: introduce more sub-options for DHCP Relay Agent Information option

These new values will be used later.

14 hours agosd-dhcp-lease: drop sd_dhcp_lease.have_subnet_mask and have_broadcast
Yu Watanabe [Wed, 15 Apr 2026 18:02:27 +0000 (03:02 +0900)] 
sd-dhcp-lease: drop sd_dhcp_lease.have_subnet_mask and have_broadcast

NULL address is invalid in both cases. Let's refuse to use them when NULL.

14 hours agocore: when skipping state deserializing units, also skip job subsections (#41957)
Zbigniew Jędrzejewski-Szmek [Tue, 12 May 2026 15:12:59 +0000 (17:12 +0200)] 
core: when skipping state deserializing units, also skip job subsections (#41957)

If a unit has active jobs, when it gets serialized there are job
subsections, each with their own empty line marker. The skipping
function ignores this and skips until the marker, but then leaves
the job in place, breaking deserialization.
Consume jobs subsections too.

This shows up now that there's TEST-07-PID1.alias-corruption,
which occasionally fails when the aliased unit happens to
still have a job when the reexec happens.

```
[  967.551630] TEST-07-PID1.sh[179]: + echo 'Testing with: systemctl daemon-reexec'
[  967.551630] TEST-07-PID1.sh[179]: Testing with: systemctl daemon-reexec
[  968.405274] TEST-07-PID1.sh[179]: + echo '--- Attempt 1/3 ---'
[  968.405274] TEST-07-PID1.sh[179]: --- Attempt 1/3 ---
[  968.698641] TEST-07-PID1.sh[179]: + echo 'Running daemon-reexec...'
[  968.698641] TEST-07-PID1.sh[179]: Running daemon-reexec...
[  969.130261] TEST-07-PID1.sh[179]: + echo 'legit.service PID remains 1282. Attempt 1 passed.'
[  969.130261] TEST-07-PID1.sh[179]: legit.service PID remains 1282. Attempt 1 passed.
[  970.870456] TEST-07-PID1.sh[179]: + echo '--- Attempt 2/3 ---'
[  970.870456] TEST-07-PID1.sh[179]: --- Attempt 2/3 ---
[  971.267205] TEST-07-PID1.sh[179]: + echo 'Running daemon-reexec...'
[  971.267205] TEST-07-PID1.sh[179]: Running daemon-reexec...
[  971.715743] TEST-07-PID1.sh[179]: + echo 'legit.service PID changed from 1282 to 1643!'
[  971.715743] TEST-07-PID1.sh[179]: legit.service PID changed from 1282 to 1643!
```

https://github.com/systemd/systemd/actions/runs/25376867873/job/74414201255

15 hours agonetwork: use TLV and iovec to manage several DHCP options (#42045)
Yu Watanabe [Tue, 12 May 2026 15:02:10 +0000 (00:02 +0900)] 
network: use TLV and iovec to manage several DHCP options (#42045)

15 hours agoImplement Path/Scope/Swap/Timer Context/Runtime for `io.systemd.Unit.List` (#41980)
Lennart Poettering [Tue, 12 May 2026 14:12:36 +0000 (16:12 +0200)] 
Implement Path/Scope/Swap/Timer Context/Runtime for `io.systemd.Unit.List` (#41980)

The PR implements the following objects + tests for
io.systemd.Unit.List:
* PathContext
* PathRuntime
* ScopeContext
* ScopeRuntime
* SwapContext
* SwapRuntime
* TimerContext
* TimerRuntime

It's a continuation of the following PRs:
* https://github.com/systemd/systemd/pull/37432
* https://github.com/systemd/systemd/pull/37646
* https://github.com/systemd/systemd/pull/38032
* https://github.com/systemd/systemd/pull/38212
* https://github.com/systemd/systemd/pull/39391

16 hours agobtrfs-util: clear RDONLY flag on subvolume before destroy ioctl
Daan De Meyer [Tue, 12 May 2026 11:19:18 +0000 (13:19 +0200)] 
btrfs-util: clear RDONLY flag on subvolume before destroy ioctl

Without CAP_SYS_ADMIN, btrfs_ioctl_snap_destroy() runs an
inode_permission(MAY_WRITE) check against the target subvolume root, which
btrfs_permission() rejects with EROFS for a read-only subvolume. As a
result, unprivileged removal of a read-only subvolume fails — both via
btrfs_subvol_remove_at() directly and via the recursive cleanup path used
by rm_rf_subvolume_and_freep(), which propagates the EROFS up.

Detect EROFS after the destroy ioctl, clear the RDONLY flag (only inode
ownership is required for BTRFS_IOC_SUBVOL_SETFLAGS), and retry once.

While at it, fix the surrounding comments: BTRFS_IOC_SNAP_DESTROY drops the
entire subvolume tree, so regular files inside are irrelevant; ENOTEMPTY
from the ioctl indicates nested subvolumes (BTRFS_ROOT_REF_KEY entries) via
may_destroy_subvol(), not non-empty contents.

16 hours ago60-sensor.hwdb iio/accel fix for Advan Evo-X 13 (#42037)
drhydroxide [Tue, 12 May 2026 13:27:02 +0000 (20:27 +0700)] 
60-sensor.hwdb iio/accel fix for Advan Evo-X 13 (#42037)

Added fix for Advan Evo-X 13 2-in-1 laptop

Relevant output of `udevadm info --export-db`
```
P: /devices/pci0000:00/0000:00:15.2/i2c_designware.3/i2c-2/i2c-NSA2513:00/iio:device0
M: iio:device0
R: 0
J: +iio:iio:device0
U: iio
T: iio_device
E: DEVPATH=/devices/pci0000:00/0000:00:15.2/i2c_designware.3/i2c-2/i2c-NSA2513:00/iio:device0
E: DEVTYPE=iio_device
E: SUBSYSTEM=iio
E: USEC_INITIALIZED=5462149
E: ACCEL_MOUNT_MATRIX=-1,0,0;0,-1,0;0,0,1
E: IIO_SENSOR_PROXY_TYPE=iio-poll-accel
E: SYSTEMD_WANTS=iio-sensor-proxy.service
E: TAGS=:systemd:
E: CURRENT_TAGS=:systemd:
```

17 hours agochase: Use openat2() if available
Daan De Meyer [Mon, 11 May 2026 17:42:45 +0000 (19:42 +0200)] 
chase: Use openat2() if available

Let's make use of openat2() if we can in chaseat().

17 hours agochase: Use ELOOP for CHASE_PROHIBIT_SYMLINKS error
Daan De Meyer [Mon, 11 May 2026 17:34:01 +0000 (19:34 +0200)] 
chase: Use ELOOP for CHASE_PROHIBIT_SYMLINKS error

Matches the behavior of openat2() with RESOLVE_NO_SYMLINKS
which makes introducing support for openat2() easier.

17 hours agope-binary: fix "systemd-sbsign calculates wrong PE checksum"
hschloss [Wed, 6 May 2026 15:07:40 +0000 (17:07 +0200)] 
pe-binary: fix "systemd-sbsign calculates wrong PE checksum"

18 hours agoIntroduce helper functions to parse and build length-prefixed data and TLV data ...
Yu Watanabe [Tue, 12 May 2026 11:08:40 +0000 (20:08 +0900)] 
Introduce helper functions to parse and build length-prefixed data and TLV data (#41802)

These are currently not used yet, but will be used later in
parsing/building network packets like DHCP message.

19 hours agodhcp: use struct iovec_wrapper to manage user class 42045/head
Yu Watanabe [Mon, 23 Mar 2026 18:53:51 +0000 (03:53 +0900)] 
dhcp: use struct iovec_wrapper to manage user class

19 hours agosd-dhcp-option: drop unused sd_dhcp_option
Yu Watanabe [Sun, 26 Apr 2026 04:22:07 +0000 (13:22 +0900)] 
sd-dhcp-option: drop unused sd_dhcp_option

19 hours agodhcp: use TLV object to manage extra and vendor options
Yu Watanabe [Sun, 22 Mar 2026 08:00:33 +0000 (17:00 +0900)] 
dhcp: use TLV object to manage extra and vendor options

Note, previously we replaced the previous option with the same option code with
new one. But, DHCP message can have multiple options with same option code.
Hence, this make the conf parser not replace, but append new one.

19 hours agosd-dhcp-protocol: rename DHCP option 43, 124, and 125
Yu Watanabe [Mon, 27 Apr 2026 02:38:25 +0000 (11:38 +0900)] 
sd-dhcp-protocol: rename DHCP option 43, 124, and 125

There are four DHCP options with confusing names:
Option 43: Vendor-Specific Information
Option 60: Vendor Class Identifier
Option 124: Vendor-Identifying Vendor Class
Option 125: Vendor-Identifying Vendor-Specific Information

Let's use their full names for their corresponding enums.

19 hours agobtrfs-util: Make nested subvolume operations work unpriv
Daan De Meyer [Mon, 11 May 2026 19:58:24 +0000 (21:58 +0200)] 
btrfs-util: Make nested subvolume operations work unpriv

BTRFS_IOC_SEARCH is only available to root in the
initial userns. This means we fail to recursively
snapshot even if a subvolume has no nested subvolumes
at the moment.

Let's fix this by using the newer btrfs ioctls which
do work even if we don't have CAP_SYS_ADMIN in the initial
userns.

19 hours agohwdb/keyboard: Map f21 key on Wareus B15
Artem Proskurnev [Tue, 12 May 2026 08:07:39 +0000 (11:07 +0300)] 
hwdb/keyboard: Map f21 key on Wareus B15

Addition to PR https://github.com/systemd/systemd/pull/41181
Plasma-workspace OSD notifications about turning the touchpad on
and off are guided by f21. When this match is specified,
KDE notifies on this laptop that the on/off switch of the atchpad
state is pressed.
Fix dmesg:
atkbd serio0: Unknown key pressed (translated set 2, code 0xc1 on isa0060/serio0).

19 hours agotest: start systemd-report-basic.socket again
Luca Boccassi [Mon, 11 May 2026 21:36:29 +0000 (22:36 +0100)] 
test: start systemd-report-basic.socket again

SUSE uses a different preset, so don't just assert in the test,
instead just start the socket in case it is not enabled

TEST-74-AUX-UTILS.sh[1594]: ++ systemctl is-enabled systemd-report-basic.socket
TEST-74-AUX-UTILS.sh[1540]: + [[ disabled == enabled ]]
TEST-74-AUX-UTILS.sh[120]: + echo 'Subtest /usr/lib/systemd/tests/testdata/units/TEST-74-AUX-UTILS.report.sh failed'

Follow-up for 4409e52494d803426a365b6636a66fd2dfc70b62

23 hours agotlv-util: introduce tlv-util that handles Tag-Length-Value data format 41802/head
Yu Watanabe [Mon, 20 Apr 2026 20:05:32 +0000 (05:05 +0900)] 
tlv-util: introduce tlv-util that handles Tag-Length-Value data format

In many network protocols e.g. DHCP, the TLV format is used.
Let's introduce a simple parser and builder of the data format.

23 hours agoiovec-wrapper: reintroduce iovw_free() and iovw_free_free()
Yu Watanabe [Thu, 23 Apr 2026 18:10:16 +0000 (03:10 +0900)] 
iovec-wrapper: reintroduce iovw_free() and iovw_free_free()

They were dropped by the commit 267b16f33c5636617927f15d7ae6b945c862a587,
but will be used later. Hence, let's reintroduce them.

23 hours agoiovec-wrapper: introduce iovec_split() and iovw_merge()
Yu Watanabe [Thu, 23 Apr 2026 18:33:36 +0000 (03:33 +0900)] 
iovec-wrapper: introduce iovec_split() and iovw_merge()

In many network protocols, the length-prefixed data format is often
used. Let's add a simple parser and builder for the format.

23 hours agoiovec-wrapper: introduce iovw_put_full() and friends to make them accept zero length...
Yu Watanabe [Sat, 25 Apr 2026 00:57:41 +0000 (09:57 +0900)] 
iovec-wrapper: introduce iovw_put_full() and friends to make them accept zero length entry

These will be used later. Preparation for later commits.

23 hours agoiovec-wrapper: make iovw_size() take NULL again
Yu Watanabe [Thu, 23 Apr 2026 18:27:36 +0000 (03:27 +0900)] 
iovec-wrapper: make iovw_size() take NULL again

This partially reverts 267b16f33c5636617927f15d7ae6b945c862a587.

We usually make xyz_size() take NULL, e.g. hashmap_size().

23 hours agovmspawn: Add missing error logging
Daan De Meyer [Mon, 11 May 2026 19:58:24 +0000 (21:58 +0200)] 
vmspawn: Add missing error logging

30 hours agofirstboot,sysinstall,hostnamed: always show FANCY_NAME=
Lennart Poettering [Wed, 6 May 2026 14:13:12 +0000 (16:13 +0200)] 
firstboot,sysinstall,hostnamed: always show FANCY_NAME=

This makes sure that whenever we want to show the OS name we can show
the fancy name. Thus this moves the escaping/validation of the fancy
name out of hostnamed into generic code, and then makes use of it in
sysinstall,firstboot,prompt-util.

31 hours agomkosi: Drop CPUs= limit
Daan De Meyer [Mon, 11 May 2026 19:58:24 +0000 (21:58 +0200)] 
mkosi: Drop CPUs= limit

Limiting VMs to 2 cpus was cargo culting without any
actual data that this benefits performance. The host OS
has a scheduler, let's make use of it and give the VM access
to all the CPUs. This doesn't mean they become inaccessible to
the host, it just means the VM gets as many virtual CPUs as the
host has CPU cores (threads). How they get scheduled is still up
to the host OS.

32 hours agounits: pull in basic.target rather than sysinit.target from system-install.target
Lennart Poettering [Mon, 11 May 2026 15:17:35 +0000 (17:17 +0200)] 
units: pull in basic.target rather than sysinit.target from system-install.target

Many of our services are nowadays implemented via socket activation, and
hence require sockets.target to be active to be accessible. One of them
is mute-console.socket, which we typically want to use from
systemd-firstboot.service, systemd-sysinstall.service and other related
services. Hence let's pull in basic.target rather than sysinit.target
from system-install.target since it pulls sockets.target in too.

Effectively, this doesn't change much except for pulling in a bunch more
sockets, and frankly going for sysinit.target was really a bug to begin
width.

34 hours agoAdd liburing to build image packages
Daan De Meyer [Mon, 11 May 2026 12:59:39 +0000 (14:59 +0200)] 
Add liburing to build image packages

34 hours agovmspawn: Use builtin vdagent instead of spicevmc
Daan De Meyer [Mon, 11 May 2026 11:42:53 +0000 (13:42 +0200)] 
vmspawn: Use builtin vdagent instead of spicevmc

The builtin one also makes the clipboard and such work. spicevmc
is only required for remote desktop use cases, so let's use the
builtin one instead.

34 hours agoboot,vconsole: Propagate UEFI HII keyboard layout to the OS
Daan De Meyer [Mon, 11 May 2026 13:03:49 +0000 (13:03 +0000)] 
boot,vconsole: Propagate UEFI HII keyboard layout to the OS

UEFI firmware can report the currently-active keyboard layout via
EFI_HII_DATABASE_PROTOCOL.GetKeyboardLayout(). The layout descriptor
includes an RFC 4646 / BCP 47 language tag (e.g. "en-US"). Query this
from sd-boot/sd-stub and write it to a new LoaderKeyboardLayout EFI
variable, advertised through a new EFI_LOADER_FEATURE_KEYBOARD_LAYOUT
feature bit.

On the OS side, systemd-vconsole-setup reads the variable as a
lowest-priority fallback for the console keymap. To map the BCP 47
tag to a vconsole keymap we extend /usr/share/systemd/kbd-model-map
with an optional sixth column listing the comma-separated BCP 47 tags
each row covers; a new find_vconsole_keymap_for_bcp47() helper walks
the file, preferring an exact tag match and otherwise falling back to
the row whose tag matches the input's primary subtag. Credentials,
/etc/vconsole.conf, and vconsole.keymap= on the kernel command line
continue to take precedence.

bootctl status surfaces the new variable, printing the language tag
or "n/a (not reported by firmware)" when sd-boot advertises the
feature but the firmware HII database didn't expose a layout (common
on QEMU without a USB keyboard, since EDK2's PS/2 driver does not
register an HII keyboard layout).

35 hours agohwdb/keyboard: fix match for X+ Piccolo & revert workaround (#42018)
Luca Boccassi [Mon, 11 May 2026 18:17:42 +0000 (19:17 +0100)] 
hwdb/keyboard: fix match for X+ Piccolo & revert workaround (#42018)

The controller is used in other devices, and some of these do have a
separate keypad with enter key.

This also reverts a workaround made for *Clevo PA70ES (Avell C73)* in
b7be9ccc8f4299269f72bde49e426a7a9d484da9.

Fixes: 7ae0a588154ad279deaa98f82c15470684189856
36 hours agocurl-util: Fix clang-tidy warnings (#42030)
Daan De Meyer [Mon, 11 May 2026 17:17:53 +0000 (19:17 +0200)] 
curl-util: Fix clang-tidy warnings (#42030)

Use the ref/unref macros to make sure the parameter names match

Follow-up for 87cec65cae656f6ac2e702bd60dad6dd4fdae636

37 hours agoRevert "hwdb/keyboard: fix KP_Enter on Clevo PA70ES" 42018/head
Christian Hesse [Mon, 11 May 2026 08:10:06 +0000 (10:10 +0200)] 
Revert "hwdb/keyboard: fix KP_Enter on Clevo PA70ES"

Fixed in previous commit.

This reverts commit b7be9ccc8f4299269f72bde49e426a7a9d484da9.

37 hours agohwdb/keyboard: use vendor/product specific match for X+ Piccolo
Christian Hesse [Mon, 11 May 2026 08:12:47 +0000 (10:12 +0200)] 
hwdb/keyboard: use vendor/product specific match for X+ Piccolo

The controller is used in other devices, and some of these do have a
separate keypad with enter key.

Fixes: 7ae0a588154ad279deaa98f82c15470684189856
38 hours agosysupdate: Allow vacuuming partially downloaded updates and improve error reporting...
Lennart Poettering [Mon, 11 May 2026 15:27:05 +0000 (17:27 +0200)] 
sysupdate: Allow vacuuming partially downloaded updates and improve error reporting in that case (#41775)

See the commit messages for details.

Fixes: https://github.com/systemd/systemd/issues/41502
38 hours agovmspawn: Attach a USB keyboard in GUI mode
Daan De Meyer [Mon, 11 May 2026 13:00:19 +0000 (15:00 +0200)] 
vmspawn: Attach a USB keyboard in GUI mode

EDK2's UsbKbDxe is the only driver that registers a default HII
keyboard layout via the HII database protocol; the PS/2 driver does
not. Adding a USB xHCI controller and usb-kbd in CONSOLE_GUI mode
gives us a layout to query, which systemd-boot exports through the
LoaderKeyboardLayout EFI variable — useful for exercising that
codepath end-to-end.

38 hours agounits: enable systemd-report-basic.socket by default
Michael Vogt [Fri, 8 May 2026 14:37:52 +0000 (16:37 +0200)] 
units: enable systemd-report-basic.socket by default

In https://github.com/systemd/systemd/pull/41688 we merged metrics
and facts for systemd-report. However while some metric sources
are enabled by default (like `io.systemd.{Manager,Network}`) the
`io.systemd.Basic` service is not enabled by default.

This commit changes this and enables it by default.

We could also enable the systemd-report-cgroup.socket but that sends
a lot more data not sure that is a good default.

39 hours agorepart: make definitions varlink parameter actually optional
Lennart Poettering [Mon, 11 May 2026 13:54:12 +0000 (15:54 +0200)] 
repart: make definitions varlink parameter actually optional

The Varlink iterface said the definitions directory was mandatory, and
so did the dispatch table. But that's nonsense, the code is completely
fine to operate without (same as cmdline repart invocations): it will
just use the standard definitions dir.

Fix that.

39 hours agoSome curl improvements (#41905)
Lennart Poettering [Mon, 11 May 2026 14:56:03 +0000 (16:56 +0200)] 
Some curl improvements (#41905)

40 hours agoTEST-67-INTEGRITY: pre-load crypto modules and skip unsupported algorithms
Luca Boccassi [Mon, 11 May 2026 11:58:13 +0000 (12:58 +0100)] 
TEST-67-INTEGRITY: pre-load crypto modules and skip unsupported algorithms

The test occasionally fails on GHA CI when formatting with xxhash64
because dm-integrity's crypto_alloc_shash() -> request_module() path
flakily fails to load the algorithm:

[   29.172664] TEST-67-INTEGRITY.sh[447]: + for a in crc32c crc32 xxhash64 sha1 sha256
[   29.172664] TEST-67-INTEGRITY.sh[447]: + [[ xxhash64 == crc32 ]]
[   29.172664] TEST-67-INTEGRITY.sh[447]: + test_one xxhash64 0
[   29.172664] TEST-67-INTEGRITY.sh[447]: + integritysetup format /dev/loop0 --batch-mode -I xxhash64 ''
[   29.223383] TEST-67-INTEGRITY.sh[1220]: device-mapper: reload ioctl on temporary-cryptsetup-fa8bebe3-1d87-4796-91e8-abc02c487bb5 (254:0) failed: No such file or directory
[   29.226916] kernel: device-mapper: table: 254:0: integrity: Invalid internal hash (-ENOENT)
[   29.227415] kernel: device-mapper: ioctl: error adding target to table
[   29.231586] TEST-67-INTEGRITY.sh[1220]: Cannot format integrity for device /dev/loop0.

Preload each algorithm's crypto module before use, and skip algorithms
that are not registered in /proc/crypto.

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
41 hours agoclang-tidy: Drop unknown gcc compiler args
Daan De Meyer [Sun, 10 May 2026 19:24:26 +0000 (21:24 +0200)] 
clang-tidy: Drop unknown gcc compiler args

clang-tidy recently gained support to allow dropping
compiler args from the entries parsed from the compilation
database. Let's make use of this to drop the two compiler
args we use with gcc that clang doesn't support so we can
run clang-tidy on meson build trees configured to use gcc
without getting tons of false positives.

41 hours agofileio: add new read_boolean_file() helper (#41963)
Lennart Poettering [Mon, 11 May 2026 12:16:05 +0000 (14:16 +0200)] 
fileio: add new read_boolean_file() helper (#41963)

This adds a new read_boolean_file() helper that combines
read_one_line_file() and parse_boolean() into one. 3 call sites are
converted to us it.

42 hours agotest: use jq // empty instead of grep -v null in Unit.List tests 41980/head
Ivan Kruglov [Thu, 7 May 2026 17:55:32 +0000 (10:55 -0700)] 
test: use jq // empty instead of grep -v null in Unit.List tests

Replace `grep -v null` with jq's `// empty` alternative operator when filtering unit IDs. With `set -o pipefail`, `grep` returns 1 when no lines match, which aborts the script before conditional guards can run. The `// empty` operator suppresses null output directly in jq without risking a pipeline failure.

42 hours agocore: implement TimerContext/Runtime for io.systemd.Unit.List + tests
Ivan Kruglov [Thu, 7 May 2026 12:12:48 +0000 (05:12 -0700)] 
core: implement TimerContext/Runtime for io.systemd.Unit.List + tests

Add varlink context and runtime builders for .timer units:

TimerContext: MonotonicTimers (with MonotonicTimerBase enum), CalendarTimers, Unit, OnClockChange, OnTimezoneChange, AccuracyUSec, RandomizedDelayUSec, RandomizedOffsetUSec, FixedRandomDelay, Persistent, WakeSystem, RemainAfterElapse, DeferReactivation
TimerRuntime: Result (TimerResult enum), NextElapseUSecRealtime, NextElapseUSecMonotonic, LastTriggerUSec

MonotonicTimerSpec and CalendarTimerSpec are separate types since they have different value types (int vs string). MonotonicTimerBase and TimerResult are proper varlink enum types.

Compared to the old io-systemd-Unit-List branch, this adds RandomizedOffsetUSec and DeferReactivation (both present in D-Bus but previously missing), and adds full runtime fields.

Co-developed-by: Claude Opus 4.6 <noreply@anthropic.com>
42 hours agocore: implement SwapContext/Runtime for io.systemd.Unit.List + tests
Ivan Kruglov [Thu, 7 May 2026 12:05:24 +0000 (05:05 -0700)] 
core: implement SwapContext/Runtime for io.systemd.Unit.List + tests

Add varlink context and runtime builders for .swap units:

SwapContext: What, Priority, Options, TimeoutUSec, ExecActivate, ExecDeactivate
SwapRuntime: ControlPID, Result, CleanResult, UID, GID (SwapResult enum)

SwapResult is exposed as a proper varlink enum type. Runtime follows the same pattern as MountRuntime (ControlPID, Result, CleanResult, ref UID/GID).

The integration test is conditional since swap units may not be present on all systems.

Co-developed-by: Claude Opus 4.6 <noreply@anthropic.com>
42 hours agocore: implement ScopeContext/Runtime for io.systemd.Unit.List + tests
Ivan Kruglov [Thu, 7 May 2026 12:02:01 +0000 (05:02 -0700)] 
core: implement ScopeContext/Runtime for io.systemd.Unit.List + tests

Add varlink context and runtime builders for .scope units:

ScopeContext: OOMPolicy (enum), RuntimeMaxUSec, RuntimeRandomizedExtraUSec, TimeoutStopUSec
ScopeRuntime: Result (ScopeResult enum)

Both OOMPolicy and ScopeResult are exposed as proper varlink enum types.

Co-developed-by: Claude Opus 4.6 <noreply@anthropic.com>
44 hours agotree-wide: port various places to read_boolean_file() 41963/head
Lennart Poettering [Mon, 11 May 2026 09:48:11 +0000 (11:48 +0200)] 
tree-wide: port various places to read_boolean_file()

44 hours agofileio: add new read_boolean_file() helper
Lennart Poettering [Wed, 6 May 2026 13:17:36 +0000 (15:17 +0200)] 
fileio: add new read_boolean_file() helper

44 hours agofileio: teach read_one_line_file_at() XAT_FDROOT support
Lennart Poettering [Mon, 11 May 2026 09:34:22 +0000 (11:34 +0200)] 
fileio: teach read_one_line_file_at() XAT_FDROOT support

44 hours agoshared: move OOMPolicy varlink enum to varlink-idl-common
Ivan Kruglov [Thu, 7 May 2026 12:47:59 +0000 (05:47 -0700)] 
shared: move OOMPolicy varlink enum to varlink-idl-common

OOMPolicy is used by both io.systemd.Manager (DefaultOOMPolicy) and io.systemd.Unit (ScopeContext.OOMPolicy), so it belongs in the shared common types alongside ManagedOOMMode and EmergencyAction.

44 hours agocore: implement PathContext/Runtime for io.systemd.Unit.List + tests
Ivan Kruglov [Thu, 7 May 2026 10:15:15 +0000 (03:15 -0700)] 
core: implement PathContext/Runtime for io.systemd.Unit.List + tests

Add varlink context and runtime builders for .path units:

PathContext: Paths (array of PathType enum + path specs), Unit, MakeDirectory, DirectoryMode, TriggerLimit
PathRuntime: Result (PathResult enum)

Both PathType and PathResult are exposed as proper varlink enum types.

Co-developed-by: Claude Opus 4.6 <noreply@anthropic.com>
44 hours agoelf-util: pass exectable path to dwfl_core_file_report
Ambareesh Balaji [Sun, 10 May 2026 23:25:13 +0000 (23:25 +0000)] 
elf-util: pass exectable path to dwfl_core_file_report

Without it, stack trace symbols fail to resolve with .gnu_debuglink
split debug info.

44 hours agotest-path-util: add coverage for path edge cases
favilances [Sat, 9 May 2026 18:52:04 +0000 (21:52 +0300)] 
test-path-util: add coverage for path edge cases

Path utility helpers are used throughout systemd for validation, comparison and manipulation of filesystem paths. Add coverage for additional corner cases around absolute path detection, normalization and prefix matching so regressions in these common helpers are easier to catch.

Co-developed-by: OpenAI Codex <noreply@openai.com>
Signed-off-by: favilances <favilances@proton.me>
44 hours agotest: bump TEST-58-REPART timeouts with sanitizers
Luca Boccassi [Fri, 8 May 2026 19:25:56 +0000 (20:25 +0100)] 
test: bump TEST-58-REPART timeouts with sanitizers

The test is flaky under sanitizers as the timeouts seem to be too short,
bump them like we do in other tests to try and make it more robust when
running with sanitizers

45 hours agotest: fix flaky TEST-07-PID1.socket-defer.sh
Luca Boccassi [Fri, 8 May 2026 15:16:04 +0000 (16:16 +0100)] 
test: fix flaky TEST-07-PID1.socket-defer.sh

The socket's SubState transitions from 'running' to 'listening' shortly
after the triggered service becomes inactive, so the assert can race and
observe the stale 'running' state:

[ 1882.425335] systemd[1]: TEST-07-PID1-socket-defer-23279.service: Changed dead -> running
[ 1882.495150] TEST-07-PID1.sh[20535]: ++ systemctl show TEST-07-PID1-socket-defer-23279.socket -P SubState
[ 1882.514239] TEST-07-PID1.sh[20509]: + assert_eq running listening
[ 1882.510529] systemd[1]: TEST-07-PID1-socket-defer-23279.socket: Flushing socket before listening.
[ 1882.510559] systemd[1]: TEST-07-PID1-socket-defer-23279.socket: Changed running -> listening

Poll for 30s instead of directly asserting to try and make it more robust

45 hours agotest: workaroud flaky TEST-53-TIMER.restart-trigger against journald cgroup attributi...
Luca Boccassi [Fri, 8 May 2026 14:09:25 +0000 (15:09 +0100)] 
test: workaroud flaky TEST-53-TIMER.restart-trigger against journald cgroup attribution race

The restart-trigger subtest occasionally fails on CI with:

    + assert_eq 0 1
    FAIL: expected: '1' actual: '0'

even though the timer fires correctly and the echo message is in fact
written to the journal. The failure happens because the test relies on
`journalctl --unit=$UNIT_NAME` to find the message, and that filter is
based on the cgroup journald looks up for the writer PID at the time
the stdout message is received.

For very short-lived processes spawned via systemd-executor (like
`echo`), that lookup is racy: the writer's `/proc/$PID/cgroup` can
still resolve to `/init.scope` (systemd-executor's own cgroup) rather
than the service's cgroup, so the message ends up attributed to
`init.scope` and `--unit=` filtering misses it.

    __CURSOR=s=6f90ff5b6a0e47c3a527a9b4892af965;i=f8ed;b=3dad0cc689a04781879e4dd846d24432;m=17703dc;t=6513be1be2506;x=8d3009a687724b5e
    __REALTIME_TIMESTAMP=1778167492519174
    __MONOTONIC_TIMESTAMP=24576988
    __SEQNUM=63725
    __SEQNUM_ID=6f90ff5b6a0e47c3a527a9b4892af965
    _BOOT_ID=3dad0cc689a04781879e4dd846d24432
    _HOSTNAME=H
    PRIORITY=6
    SYSLOG_FACILITY=3
    _UID=0
    _GID=0
    _CAP_EFFECTIVE=1ffffffffff
    _SYSTEMD_CGROUP=/init.scope
    _SYSTEMD_UNIT=init.scope
    _SYSTEMD_SLICE=-.slice
    _EXE=/usr/lib/systemd/systemd-executor
    _TRANSPORT=stdout
    _COMM=18
    _MACHINE_ID=89ef83adc0bc4a33a83a227201b57203
    _RUNTIME_SCOPE=system
    _PID=816
    _CMDLINE=/usr/lib/systemd/systemd-executor --deserialize 50 --log-level debug,console:info --log-target journal-or-kmsg
    _STREAM_ID=8e8e4166c99e40afaa58bcd04a50a7f4
    SYSLOG_IDENTIFIER=echo
    MESSAGE=Hello from timer 29581

Note _SYSTEMD_UNIT=init.scope / _SYSTEMD_CGROUP=/init.scope on the
echo output: this is what causes `--unit=timer-restart-14362` to
return 0 hits. The test failure logs from the same run confirm this:

    + JOURNAL_TS=1778160292
    + journalctl -p info --since=@1778160292 --unit=timer-restart-14362 '--grep=Hello from timer 29581'
    -- No entries --
    + systemctl restart timer-restart-14362.timer
    ...
    + date '--set=+2 hours'
    Thu May  7 15:24:52 UTC 2026
    + sleep 1
    ...
    echo[816]: Hello from timer 29581
    ...
    ++ journalctl -q -p info --since=@1778160292 --unit=timer-restart-14362 '--grep=Hello from timer 29581'
    ++ wc -l
    + assert_eq 0 1
    FAIL: expected: '1' actual: '0'

For comparison, in a passing local run the same message is attributed
correctly to the service unit (_SYSTEMD_UNIT=timer-restart-24147.service),
so `--unit=` matches.

Work around the underlying journald race in the test by setting an
explicit `SyslogIdentifier=` on the service and matching with `-t` plus
the unique grep pattern: `SyslogIdentifier` is carried over the stdout
stream protocol and is not affected by the cgroup lookup race.

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
45 hours agotest: make TEST-07-PID1.user-namespace-path more robust (#42001)
Christian Brauner [Mon, 11 May 2026 08:16:12 +0000 (10:16 +0200)] 
test: make TEST-07-PID1.user-namespace-path more robust (#42001)

The test occasionally fails because lsns returns empty output for the
transient unit, even though the process is running. e.g.:

```
    [ 1843.556046] TEST-07-PID1.sh[8560]: + systemd-run --unit=newservice --property=Type=exec --property=UserNamespacePath=/proc/8608/ns/user --property=NetworkNamespacePath=/proc/8608/ns/net sleep 3600
    [ 1844.205927] TEST-07-PID1.sh[8616]: ++ systemctl show newservice -p MainPID
    [ 1844.221425] TEST-07-PID1.sh[8618]: ++ lsns -p 8608 -o NS -t net -n
    [ 1844.229653] TEST-07-PID1.sh[8619]: ++ lsns -p 8614 -o NS -t net -n
    [ 1844.235563] TEST-07-PID1.sh[8620]: FAIL: expected: '' actual: '4026532522'
```

This could be a race, so switch to Type=notify to try and make it more
robust.

eg:
https://github.com/systemd/systemd/actions/runs/25485775345/job/74780837128?pr=41974

3 days agohwdb/keyboard: fix KP_Enter on Clevo PA70ES
Matheus Afonso Martins Moreira [Sat, 9 May 2026 11:53:01 +0000 (08:53 -0300)] 
hwdb/keyboard: fix KP_Enter on Clevo PA70ES

The ITE keyboard controller firmware (version 0xAB83) is shared
between the Clevo PA70ES and the X+ piccolo series.

The piccolo's hwdb rule matches by input device ID
(evdev:input:b0011v0001p0001eAB83*) and remaps scan code 0x9c
(KP_Enter) to Enter, since the piccolo has no numpad and its
main Enter key sends the wrong scan code.

The Clevo PA70ES has a real numpad. The piccolo rule matches it
because both laptops use the same ITE controller firmware, which
breaks KP_Enter on the PA70ES.

Add a DMI-specific override that restores KEY_KPENTER for 0x9c
on the PA70ES.

The piccolo rule should ideally be narrowed to use DMI matching
instead of input device ID to avoid catching other laptops with
the same ITE controller firmware.

3 days agopo: Translated using Weblate (Romanian)
Petru Rebeja [Sat, 9 May 2026 05:59:10 +0000 (05:59 +0000)] 
po: Translated using Weblate (Romanian)

Currently translated at 68.7% (183 of 266 strings)

Co-authored-by: Petru Rebeja <petru@rebeja.eu>
Translate-URL: https://translate.fedoraproject.org/projects/systemd/main/ro/
Translation: systemd/main

3 days agotmpfiles: Add commands for file capabilites
Valentin David [Sat, 28 Mar 2026 18:48:36 +0000 (19:48 +0100)] 
tmpfiles: Add commands for file capabilites

4 days agoman/tmpfiles: fix missing 'as' in %t details column
Todd Zullinger [Fri, 8 May 2026 23:12:43 +0000 (19:12 -0400)] 
man/tmpfiles: fix missing 'as' in %t details column

This was missing when the details were added in 5a8575ef013 (tmpfiles:
also add %t/%S/%C/%L specifiers, 2017-11-23).

4 days agomkosi: drop libucontext again
Daan De Meyer [Fri, 8 May 2026 19:28:36 +0000 (21:28 +0200)] 
mkosi: drop libucontext again

Turns out it's possible to implement fibers without unnecessary
system calls and without ucontext.h so there's no need for libucontext
anymore, so drop it from the package list.

4 days agoman: update Fedora image name in vmspawn example
albertescanes [Fri, 8 May 2026 13:43:34 +0000 (15:43 +0200)] 
man: update Fedora image name in vmspawn example

Update the Fedora Cloud image name to the current one and use
importctl instead of machinectl.

4 days agoConvert userdbctl to option macros (#41991)
Zbigniew Jędrzejewski-Szmek [Fri, 8 May 2026 21:34:24 +0000 (23:34 +0200)] 
Convert userdbctl to option macros (#41991)

4 days agotest: make TEST-07-PID1.user-namespace-path more robust 42001/head
Luca Boccassi [Fri, 8 May 2026 17:02:40 +0000 (18:02 +0100)] 
test: make TEST-07-PID1.user-namespace-path more robust

The test occasionally fails because lsns returns empty output for
the transient unit, even though the process is running. e.g.:

    [ 1843.556046] TEST-07-PID1.sh[8560]: + systemd-run --unit=newservice --property=Type=exec --property=UserNamespacePath=/proc/8608/ns/user --property=NetworkNamespacePath=/proc/8608/ns/net sleep 3600
    [ 1844.205927] TEST-07-PID1.sh[8616]: ++ systemctl show newservice -p MainPID
    [ 1844.221425] TEST-07-PID1.sh[8618]: ++ lsns -p 8608 -o NS -t net -n
    [ 1844.229653] TEST-07-PID1.sh[8619]: ++ lsns -p 8614 -o NS -t net -n
    [ 1844.235563] TEST-07-PID1.sh[8620]: FAIL: expected: '' actual: '4026532522'

This could be a race, so switch to Type=notify to try and make it more robust.

4 days agouserdbctl: fix erroneous errno 41991/head
Zbigniew Jędrzejewski-Szmek [Fri, 8 May 2026 15:25:41 +0000 (17:25 +0200)] 
userdbctl: fix erroneous errno

Fixes 1604937f83d3154fb1c3b5ef053f7fccd0825ce6.

4 days agotest: add missing varlink IDL enum tests for Job and ServiceType
Ivan Kruglov [Thu, 7 May 2026 09:16:51 +0000 (02:16 -0700)] 
test: add missing varlink IDL enum tests for Job and ServiceType

PR #41583 (io.systemd.Unit.StartTransient) introduced several new varlink IDL enum types without corresponding enum consistency tests:

- JobType, JobState, JobResult in the new io.systemd.Job interface
- ServiceType in the Unit interface's ServiceContext

Add a new test-varlink-idl-job test file covering all three Job enums, and add ServiceType coverage to the existing test-varlink-idl-unit test. Export vl_type_ServiceType (was static) so it can be referenced from the test.

Co-developed-by: Claude Opus 4.6 <noreply@anthropic.com>
4 days agomachine: require normalized paths in Copy* D-Bus/Varlink methods
Frantisek Sumsal [Thu, 7 May 2026 10:59:18 +0000 (12:59 +0200)] 
machine: require normalized paths in Copy* D-Bus/Varlink methods

Also, do the same for the Varlink BindMount method, since its D-Bus
counterpart already does it.

4 days agouserdbctl: actually implement option parsing stop after --chain
Zbigniew Jędrzejewski-Szmek [Fri, 8 May 2026 13:47:18 +0000 (15:47 +0200)] 
userdbctl: actually implement option parsing stop after --chain

The basic idea is that --chain should stop option parsing. But
previously this didn't work, so --chain could be specified anywhere
in the command line. To maintain with compatibility with that,
allow --chain to be specified anywhere until the first positional
arg or option in the command string. This allows options to be passed
in the expected fashion:
  userdbctl --chain ssh-authorized-keys user cmd --opt1 --opt2
  userdbctl --chain ssh-authorized-keys user -- cmd --opt1 --opt2
but also allows the invocations which worked previously:
  userdbctl ssh-authorized-keys user --chain cmd
  userdbctl ssh-authorized-keys user cmd --chain

Fixes 8072a7e6a9eaf2de120797dd16c5e0baea606219.

The error messages are extended a bit. "binary path" is misleading:
we support all kinds of executables, not only compiled programs.

4 days agocurl-util: bring CurlGlue/CurlSlot in line with sd-bus and qmp-client 41905/head
Daan De Meyer [Fri, 1 May 2026 09:08:35 +0000 (09:08 +0000)] 
curl-util: bring CurlGlue/CurlSlot in line with sd-bus and qmp-client

Refactor curl-util to use the same per-request, refcounted, cancellable
slot model as sd-bus, sd-varlink and qmp-client.

CurlGlue becomes opaque and refcounted, and dispatches per-slot
completion callbacks through CURLOPT_PRIVATE instead of a single
g->on_finished demux that every caller had to switch on. The new
curl_glue_perform_async(g, easy, cb, userdata, &slot) replaces
curl_glue_add + the on_finished/userdata wiring.

CurlSlot is the per-request handle: it owns the easy handle,
curl_slot_unref does curl_multi_remove_handle + curl_easy_cleanup
(which doubles as cancel since remove aborts in-flight transfers
without queuing CURLMSG_DONE), and floating slots (ret_slot=NULL) are
kept alive in the glue's slot set until the callback fires. Drop the
userdata parameter from curl_glue_make: CURLOPT_PRIVATE is now used
internally to route completions to the slot.

Migrate pull-job and the pull-{oci,raw,tar} drivers, and imdsd, to the
new shape. PullJob.curl becomes PullJob.slot; pull_job_curl_on_finished
becomes a per-slot callback. imdsd routes its token-vs-data branch off
slot identity rather than easy-handle pointer comparison. Both daemons
drop the global on_finished/userdata wiring on the glue. pull_job_finish
and context_fail{,_full} now return int (always 0) so the callbacks
stay in the `return finish(...);` style.

Add test-curl-util covering glue lifecycle, easy-handle defaults,
floating and non-floating perform paths, cancel-via-slot-unref (verified
by a sentinel request that drives the loop to completion), and three
concurrent requests on a single glue. Tests fetch local files via
file:// URLs so no network is needed; libcurl availability is probed
once via dlopen_curl in intro().

4 days agocurl-util: Make some curl symbols private
Daan De Meyer [Thu, 30 Apr 2026 19:18:19 +0000 (21:18 +0200)] 
curl-util: Make some curl symbols private

4 days agouserdbctl: convert to OPTION and VERB macros
Zbigniew Jędrzejewski-Szmek [Fri, 8 May 2026 06:25:10 +0000 (08:25 +0200)] 
userdbctl: convert to OPTION and VERB macros

The situation with --chain is complicated. The old code tried to use "+…"
in getopt_long() to stop option parsing. But it didn't actually work.
This logic was originally added in 8072a7e6a9eaf2de120797dd16c5e0baea606219.
ef9c12b157a50d63e8a8eb710c013d16c2cea319 added an comment about 'optind=0'
which explains why the code doesn't work, but the code wasn't changed.

To wit:
$ userdbctl.old --no-pager --chain ssh-authorized-keys zbyszek -- /bin/echo --asdf
--asdf
$ userdbctl.old --no-pager --chain ssh-authorized-keys zbyszek /bin/echo -- --asdf
--asdf
$ userdbctl.old --no-pager --chain ssh-authorized-keys zbyszek /bin/echo --asdf
userdbctl.old: unrecognized option '--asdf'
(Basically, if "--" is used, it can be anywhere, since getopt_long() doesn't do
anything special after --chain and looks for the next option. There were some
tests of --chain, but they all used the username as the positional argument, so
it wasn't misinterpreted as an option.)

This behaviour is preserved in the conversion.

--help is generally the same except for expected formatting changes.
--json= is moved above between --output= and -j. For some reason it was
further down.

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
4 days agotest: try to make TEST-04-JOURNAL.journalctl-varlink less flaky
Luca Boccassi [Wed, 6 May 2026 18:57:19 +0000 (19:57 +0100)] 
test: try to make TEST-04-JOURNAL.journalctl-varlink less flaky

The io.systemd.JournalAccess server occasionally returns NoEntries for a
unit-filter query right after the unit logged its message, e.g. from a
failing CI run:

 [ 1204.967910] TEST-04-JOURNAL.sh[15025]: ++ varlinkctl call --more /run/systemd/io.systemd.JournalAccess io.systemd.JournalAccess.GetEntries '{"units": ["test-journalctl-varlink-1-13583.service", "test-journalctl-varlink-2-25039.service"]}'
 [ 1205.017361] journalctl[15026]: varlink-3-3: Received message: {"method":"io.systemd.JournalAccess.GetEntries","parameters":{"units":["test-journalctl-varlink-1-13583.service","test-journalctl-varlink-2-25039.service"]},"more":true}
 [ 1205.017498] journalctl[15026]: Failed to open journal file /var/log/journal/ce54feb228124e639f3b7779beeaff60/system.journal: No data available
 [ 1205.017823] journalctl[15026]: varlink-3-3: Sending message: {"error":"io.systemd.JournalAccess.NoEntries"}
 [ 1205.017936] TEST-04-JOURNAL.sh[15025]: Method call failed: io.systemd.JournalAccess.NoEntries
 [ 1205.499083] TEST-04-JOURNAL.sh[146]: Subtest /usr/lib/systemd/tests/testdata/units/TEST-04-JOURNAL.journalctl-varlink.sh failed

Wrap the calls that expect data in a helper that retries up to 3 times on
NoEntries, syncing the journal between attempts.

Follow-up for a109189fabe6a4c307528459f891c2d545361622

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
4 days agouserdbctl: split out parse_from_file()
Zbigniew Jędrzejewski-Szmek [Thu, 7 May 2026 20:55:00 +0000 (22:55 +0200)] 
userdbctl: split out parse_from_file()

parse_from_file doesn't set arg_from_file itself, but returns a
sd_json_variant ref to the caller. I think the change of arg_from_file
is more readable with this structure.

4 days agoAdd json_variant_unref_and_replace and use it where appropriate
Zbigniew Jędrzejewski-Szmek [Thu, 7 May 2026 20:53:27 +0000 (22:53 +0200)] 
Add json_variant_unref_and_replace and use it where appropriate

JSON_VARIANT_REPLACE is similar, but doesn't try to nullify the second
arg, so it can be used with an inline expression.

4 days agohwdb: add force-release to Nitro AN515-58 backlight keys
Dirga Yuza [Fri, 8 May 2026 00:10:40 +0000 (07:10 +0700)] 
hwdb: add force-release to Nitro AN515-58 backlight keys

This fixes an incomplete mapping introduced in PR #39769 for the Acer
Nitro 5 AN515-58.

The previous PR mapped the physical keyboard backlight keys (scancodes
`0xef` and `0xf0`) to `kbdillumup` and `kbdillumdown` to prevent them
from dropping screen brightness.

However, the embedded controller on this Acer model only emits "make"
(press) scancodes and fails to emit "break" (release) scancodes for
these specific keys. Without a release event, the input subsystem
registers the keys as continously held down (auto-repeat). In desktop
environments like KDE Plasma, pressing the key once causes the
brightness UI slider to get stuck in an infinite adjustment loop.

This issue is previously unnoticed as this model did not expose any
keyboard backlight control.

The fix is done by prepending the `!` (force-release) flag to the
keycodes. This instructs `evdev` to synthesize a key
release event.

The fix is verified locally on an Acer Nitro AN515-58. `evtest` now
correctly reports `value 1` immediately followed by `value` 0, and KDE
Plasma brightness OSD no longer gets stuck.

Signed-off-by: Dirga Yuza <dirgayuza123@gmail.com>
4 days agosd-dhcp-client: avoid taking and dropping a reference
Zbigniew Jędrzejewski-Szmek [Thu, 7 May 2026 20:34:11 +0000 (22:34 +0200)] 
sd-dhcp-client: avoid taking and dropping a reference

The helper would create a new ref, even though we had one handy
and didn't need to create a new ref. So change the helper to
take an existing reference.

4 days agotree-wide: rename unref_and_replace_full to unref_and_replace_new_ref
Zbigniew Jędrzejewski-Szmek [Thu, 7 May 2026 19:43:32 +0000 (21:43 +0200)] 
tree-wide: rename unref_and_replace_full to unref_and_replace_new_ref

We have a number of *_unref_and_replace macros. One could think that
they are like the various free_and_replace variants, but they actually
create a new ref to the passed object. The free_and_replace variants
take ownership of the argument. This inconsistency is surprising. Rename
all those functions to have "_new_ref" at the end to make the difference
clear.

5 days agoConvert resolvectl to option and verb macros (#41978)
Daan De Meyer [Thu, 7 May 2026 19:03:38 +0000 (21:03 +0200)] 
Convert resolvectl to option and verb macros (#41978)

This was one quite involved because some preparatory work was needed and
there are three parsers in the same binary.

5 days agoresolvconf-compat: convert to OPTION macros 41978/head
Zbigniew Jędrzejewski-Szmek [Thu, 7 May 2026 11:54:12 +0000 (13:54 +0200)] 
resolvconf-compat: convert to OPTION macros

Use the "resolvconf" namespace to keep these options separate from the
resolvectl/systemd-resolve sets.

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
5 days agoresolvectl: convert to OPTION and VERB macros
Zbigniew Jędrzejewski-Szmek [Thu, 7 May 2026 07:57:43 +0000 (09:57 +0200)] 
resolvectl: convert to OPTION and VERB macros

Use OPTION_NAMESPACE() to keep the resolvectl and systemd-resolve
option sets separate. The resolvconf-compat path (resolvconf
invocation) keeps its own getopt-based parsing.

--help output has the expected changes to formatting. Synopis
for [status] is now shows that the verb is optional.

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
5 days agoshared/verbs: when showing default verb, put [] around the args too
Zbigniew Jędrzejewski-Szmek [Thu, 7 May 2026 11:38:04 +0000 (13:38 +0200)] 
shared/verbs: when showing default verb, put [] around the args too

The verb cannot be omitted but the args kept, so:
  resolvectl [status] [link]
is wrong, we need:
  resolvectl [status [link]]

Fixes f94da4b4c564f8cff4b5b739456c985e036a4201.

5 days agoresolvectl: move verb implementations to match order in --help
Zbigniew Jędrzejewski-Szmek [Thu, 7 May 2026 07:31:28 +0000 (09:31 +0200)] 
resolvectl: move verb implementations to match order in --help

5 days agoresolvectl: move things around in --help
Zbigniew Jędrzejewski-Szmek [Thu, 7 May 2026 07:30:37 +0000 (09:30 +0200)] 
resolvectl: move things around in --help

Move the "display options" to the end of both --help strings and then
reorder the implementation to match.

5 days agoresolvectl: split out parse_protocol
Zbigniew Jędrzejewski-Szmek [Wed, 6 May 2026 12:41:08 +0000 (14:41 +0200)] 
resolvectl: split out parse_protocol

5 days agoConvert more programs to option+verb macros (#41974)
Daan De Meyer [Thu, 7 May 2026 16:02:09 +0000 (18:02 +0200)] 
Convert more programs to option+verb macros (#41974)

Just a handful are left! This is one of the final batches.

5 days agotest: fix flaky testcase_15_wait_online_dns in TEST-75-RESOLVED
Luca Boccassi [Wed, 6 May 2026 17:04:51 +0000 (18:04 +0100)] 
test: fix flaky testcase_15_wait_online_dns in TEST-75-RESOLVED

The test used `timeout 30 bash -c "journalctl -b -u $unit -f | grep -m1 ..."`
to wait for systemd-networkd-wait-online to log that no DNS server is
accessible. The expected message is actually emitted ~1s after the unit
starts, but `grep -m1` exiting doesn't tear down `journalctl -f`: journalctl
only notices the closed pipe on its next write, which may never happen for
an otherwise idle unit. The pipeline therefore hangs until the 30s timeout
fires, eventually causing the test to fail.

Replace the follow+pipe with a polling `journalctl --grep` loop, which
exits cleanly as soon as the message lands in the journal.

Logs from the failing run:

  [ 2650.871441] systemd-networkd-wait-online[2190]: dns0: No DNS configuration yet
  [ 2651.723180] systemd-networkd-wait-online[2190]: dns0: No DNS server is accessible.
  [ 2680.909048] systemd-networkd-wait-online[2190]: json-stream: Got POLLHUP from socket.
  [ 2680.909092] systemd-networkd-wait-online[2190]: DNS configuration monitor disconnected, reconnecting...
  [ 2680.914368] systemd-networkd-wait-online[2190]: Failed to connect to io.systemd.Resolve.Monitor: Connection refused
  [ 2681.966674] systemd-networkd-wait-online[2190]: dns0: No DNS server is accessible.
  [ 2681.969527] systemd-networkd-wait-online[2190]: Failed to connect to io.systemd.Resolve.Monitor: Connection refused
  [ 2682.077032] systemd[1]: Stopping wait-online-dns-0f9e4f6d-8b34-4cff-b2da-03612ca731e8.service - [systemd-run] /usr/lib/systemd/systemd-networkd-wait-online --timeout=0 --dns --interface=dns0...

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
5 days agomount: stop showing mount options for systemd-unmount 41974/head
Zbigniew Jędrzejewski-Szmek [Wed, 6 May 2026 12:24:37 +0000 (14:24 +0200)] 
mount: stop showing mount options for systemd-unmount

This only serves to confuse the user.

5 days agomount: convert to OPTION macros
Zbigniew Jędrzejewski-Szmek [Wed, 6 May 2026 11:59:44 +0000 (13:59 +0200)] 
mount: convert to OPTION macros

Previously, we'd show a partial synopsis for systemd-mount
in --help for systemd-umount. I don't think it makes sense to do that.
So now the --help for systemd-umount is separate, with just its syntax
and a new blurb.

"transiently" is dropped from the description. Mount points generally
are transient, so no need to say that. (E.g. the man page for mount just
says "attach" and "detach".)

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
5 days agocoredumpctl: convert to OPTION and VERB macros
Zbigniew Jędrzejewski-Szmek [Wed, 6 May 2026 11:39:25 +0000 (13:39 +0200)] 
coredumpctl: convert to OPTION and VERB macros

The order of options is changed (to what was present in parse_argv).
I don't the order in --help was mostly random, as is the new one,
so I didn't try to preserve the old order. Some help strings are
reworded/adjusted.

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
5 days agoreport-cgroup-server: convert to OPTION macros
Zbigniew Jędrzejewski-Szmek [Tue, 5 May 2026 16:23:55 +0000 (18:23 +0200)] 
report-cgroup-server: convert to OPTION macros

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
5 days agoportablectl: actually allow set-limit with one arg
Zbigniew Jędrzejewski-Szmek [Thu, 7 May 2026 11:07:52 +0000 (13:07 +0200)] 
portablectl: actually allow set-limit with one arg

In the man page and in the actual code, the first arg is
optional. But the arg limit in the verbs table did not allow
only one arg to be specified.

Fixes: 61d0578b07b97cbffebfd350bac481274e310d39
5 days agovmspawn: search XDG_DATA_DIRS for QEMU firmware
Paul Meyer [Wed, 6 May 2026 15:35:48 +0000 (17:35 +0200)] 
vmspawn: search XDG_DATA_DIRS for QEMU firmware

get_firmware_search_dirs() previously hardcoded /usr/share/qemu/firmware
as the only system-wide search path. That assumption breaks on
distributions that deliberately do not populate /usr/share, making
vmspawn fail: "Failed to find OVMF config: No such file or directory".
NixOS exposes those firmware locations through XDG_DATA_DIRS.

Extend the search list with XDG_DATA_HOME/XDG_DATA_DIRS. This is the
standard XDG mechanism and is already what QEMU itself uses for the same
descriptors, so behavior matches user expectations across tooling.

To avoid regressing setups where user has set XDG_DATA_DIRS to a custom
value that omits /usr/share, keep /usr/share/qemu/firmware as an
unconditional fallback.

Precedence is unchanged: XDG_CONFIG_HOME/qemu/firmware still wins
over /etc/qemu/firmware, which still wins over any shared-data dir.

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
Signed-off-by: Paul Meyer <katexochen0@gmail.com>
6 days agohwdb: add Fn-key mappings for MSI GE76 Raider 10UG
Nita Vesa [Wed, 6 May 2026 16:37:14 +0000 (19:37 +0300)] 
hwdb: add Fn-key mappings for MSI GE76 Raider 10UG

6 days agodbus: limit the number of env variables to something reasonable, vol. 3
Frantisek Sumsal [Wed, 6 May 2026 12:03:29 +0000 (14:03 +0200)] 
dbus: limit the number of env variables to something reasonable, vol. 3

Let's limit the number of environment variables when creating a
transient unit via StartTransientUnit as well, since validating the
environment variable names/assignments is expensive.

Follow-up for 49c1e1bcf2b482b6de35a4212a06ed1d8c382745.

6 days agovmspawn: reject --bind-volume= duplicates at parse time (#41961)
Christian Brauner [Wed, 6 May 2026 14:46:42 +0000 (16:46 +0200)] 
vmspawn: reject --bind-volume= duplicates at parse time (#41961)

bind_volume_parse() does not look at peers, so passing the same
PROVIDER:VOLUME twice on the command line silently produces two parsed
entries in arg_bind_volumes. vmspawn_bind_volume_acquire() then builds
two DriveInfo with identical d->id ("<provider>:<volume>"). At boot,
bridge_register_drive() puts d->id into the b->block_devices hashmap;
the second insert returns -EEXIST and the user sees a bare "File exists"
with no context for which volume is responsible.

Reject the collision at the parse site with a linear scan over the
existing array — n_items is small (one entry per --bind-volume on the
command line), and a clear error message naming the offending volume is
much more useful than the late EEXIST from the QMP setup loop.

6 days agoupdate TODO
Lennart Poettering [Wed, 6 May 2026 12:46:19 +0000 (14:46 +0200)] 
update TODO