Commit Graph
81477 Commits
Author SHA1 Message Date
Daan De Meyer 686bbf1e7f Introduce forward.h header with forward declarations
In preparation for adopting forward declarations to reduce unnecessary
transitive includes across the tree, let's introduce a forward.h header
with forward declarations for all libc, libsystemd, basic and shared types.

Additionally, this header exports all basic integer types and errno constants,
as well as all macros including assertions macros. These header files contain
types often used in headers and are always included in every source file one
way or another anyway.

To avoid having to include memory-util.h and alloc-util.h in forward.h, we
split off the parts we need from both into cleanup-util.h and only include
cleanup-util.h in forward.h.

To keep this commit self-contained, we include cleanup-fundamental.h and
cleanup-util.h from the headers that originally contained the same macros.
We'll remove these again in a later commit that optimizes the includes in
src/basic and src/fundamental.

Split out of #37364
2025-05-14 15:44:17 +02:00
Lennart Poettering 510e966677 validatefs: split out validate_fields_check() into three functions
Just some basic refactoring, no actual code changes
2025-05-14 13:04:20 +02:00
Lennart Poettering 798d140cac avoid race between systemd-logind and systemd-udevd in setting ACLs (#36444)
Follow-up for #36408.
Hopefully fixes #24026, #28512, and/or #23547.
2025-05-14 13:03:46 +02:00
Lennart Poettering 66d84090f4 Address post-merge issues in the sysfail entry functionality (#37426) 2025-05-14 13:03:13 +02:00
Lennart Poettering 86bb6f4052 fork-journal: some follow-ups (#37423) 2025-05-14 13:02:46 +02:00
Lennart Poettering c55f87062d journald: rename primary object from "Server" to "Manager"
In all our daemons the primary entrypoint object is called "Manager".
But so far there was one exception: in journald it was called "Server".
Let's normalize that, and stick to the same nomenclature everywhere, to
make journald less special.

No real code change, just some search&replace.
2025-05-14 13:02:26 +02:00
Jelle van der Waa 2a1a6e5dd0 sd-device: fix argument comment chase_flags 2025-05-14 12:10:56 +02:00
Jelle van der Waa 39f4686045 basic: fix consistency of flags argument for chase and chaseat
Both functions have one flags argument, so we don't need to
rename them to `chase_flags`.
2025-05-14 12:10:54 +02:00
Jelle van der Waa 3e1ff91fd6 shared/cred-util: fix argument comment for copy_file_at 2025-05-14 11:15:46 +02:00
Jelle van der Waa ac54e84a4e ask-password-api: use flags consistently as argument name 2025-05-14 11:15:45 +02:00
Jelle van der Waa 09755ba511 treewide: fix argument comment for getxattr_at_bool 2025-05-14 11:15:45 +02:00
Jelle van der Waa 4827c9fde8 basic: fix argument naming for vt_release 2025-05-14 11:15:45 +02:00
Jelle van der Waa 88a66cfbd5 hostname: use argument comment name transient_hostname 2025-05-14 11:15:45 +02:00
Jelle van der Waa b72c29b6c7 network: correct argument comment may_keep_dhcp 2025-05-14 11:15:45 +02:00
Jelle van der Waa 5073b0dd87 test: correct argument comment simplified 2025-05-14 11:15:45 +02:00
Jelle van der Waa deed695faa shared: dissect-image: use argument comment name label 2025-05-14 11:15:45 +02:00
Jelle van der Waa b52f095e9a shared: bootspec: use argument comment name auto_only 2025-05-14 11:15:45 +02:00
Jelle van der Waa 14a07ec358 vmspawn: correct argument comment 2025-05-14 11:15:45 +02:00
Jelle van der Waa cb9f37eb33 udev: fix argument comments for test_udev_rule_parse_value_one 2025-05-14 11:15:45 +02:00
Lennart Poettering d6319768bd update TODO 2025-05-14 09:36:15 +02:00
Igor Opaniuk 51e1c882fa man: run update-man-rules
Re-generate meson rules (as systemd-boot-clear-sysfail.service.xml
man page was added).

Fixes: https://github.com/systemd/systemd/issues/37415
Signed-off-by: Igor Opaniuk <igor.opaniuk@foundries.io>
2025-05-14 09:34:07 +02:00
Igor Opaniuk 8130af42e2 units: fix systemd-boot-clear-sysfail description
Fix 's/systemd-boot-random-seed/systemd-boot-clear-sysfail/g'
copypaste.

Fixes: https://github.com/systemd/systemd/issues/37415
Signed-off-by: Igor Opaniuk <igor.opaniuk@foundries.io>
2025-05-14 09:34:07 +02:00
Igor Opaniuk 6f7639f0fe man: fix systemd-boot-clear-sysfail description
Fix s/systemd-boot-random-seed/systemd-boot-clear-sysfail/g
copypaste.

Fixes: https://github.com/systemd/systemd/issues/37415
Signed-off-by: Igor Opaniuk <igor.opaniuk@foundries.io>
2025-05-14 09:33:57 +02:00
Mike Yuan b431092675 Update description and uid checks when invoking pager (#37419) 2025-05-14 03:01:41 +02:00
Mike Yuan 38e3f79d52 fork-journal: drop unneeded cast 2025-05-13 23:11:34 +02:00
Mike Yuan b86b1ca22f fork-journal: use char* const* for strv input param
This is compatible with char** and is what I originally
asked for in
https://github.com/systemd/systemd/pull/36858#discussion_r2086792739
Someone needs to read better ;-)
2025-05-13 23:01:23 +02:00
Mike Yuan c49c2477a4 journalctl-show: report VARLINKERROR=
Who knows, maybe one day we'd support spawning journalctl
as varlink socket-activatable service, where this bit of
info would help.
2025-05-13 22:57:29 +02:00
Mike Yuan df3c049fa5 journalctl-show: check Context.has_cursor rather than arg_* 2025-05-13 22:55:15 +02:00
Mike Yuan 2627c8e79e journal: do not clear individual fields if the struct won't be reused
Especially that only some of the fields are cleared currently.
2025-05-13 22:54:10 +02:00
Yu Watanabe e9ad95438d meson: fix path to coverage.h
Follow-up for 30d20907bd.
2025-05-14 02:28:27 +09:00
Yu Watanabe 18609909d9 TEST-73-LOCALE: skip lv keymap and friends
The following failure should be in libxkbcommon and/or sanitizer.
There is nothing we can do here. Let's skip it.

```
TEST-73-LOCALE.sh[3733]: + assert_rc 0 localectl set-keymap lv
TEST-73-LOCALE.sh[6699]: + set +ex
TEST-73-LOCALE.sh[6700]: Failed to set keymap: Remote peer disconnected
TEST-73-LOCALE.sh[6703]: FAIL: expected: '0' actual: '1'
TEST-73-LOCALE.sh[157]: + rm -f /etc/dbus-1/system.d/systemd-localed-read-only.conf
[FAILED] Failed to start TEST-73-LOCALE.service - TEST-73-LOCALE.
```
```
==3719==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x7fa51f161000 at pc 0x7fa521250be4 bp 0x7ffe49130a80 sp 0x7ffe49130240
READ of size 19126 at 0x7fa51f161000 thread T0
    #0 0x7fa521250be3 in strndup (/usr/lib/clang/20/lib/x86_64-redhat-linux-gnu/libclang_rt.asan.so+0x50be3) (BuildId: aa6231e817f72469c44a6c6cee9f0694a87db7fb)
    #1 0x7fa51f128325  (/lib64/libxkbcommon.so.0+0x1c325) (BuildId: 72e8cb985db37963272d140f7b2aee551c465ff5)
    #2 0x7fa51f121952  (/lib64/libxkbcommon.so.0+0x15952) (BuildId: 72e8cb985db37963272d140f7b2aee551c465ff5)
    #3 0x7fa51f123d3a  (/lib64/libxkbcommon.so.0+0x17d3a) (BuildId: 72e8cb985db37963272d140f7b2aee551c465ff5)
    #4 0x7fa51f117c86  (/lib64/libxkbcommon.so.0+0xbc86) (BuildId: 72e8cb985db37963272d140f7b2aee551c465ff5)
    #5 0x7fa51f12548f  (/lib64/libxkbcommon.so.0+0x1948f) (BuildId: 72e8cb985db37963272d140f7b2aee551c465ff5)
    #6 0x7fa51f125c9e  (/lib64/libxkbcommon.so.0+0x19c9e) (BuildId: 72e8cb985db37963272d140f7b2aee551c465ff5)
    #7 0x7fa51f126a59  (/lib64/libxkbcommon.so.0+0x1aa59) (BuildId: 72e8cb985db37963272d140f7b2aee551c465ff5)
    #8 0x7fa51f12cec6  (/lib64/libxkbcommon.so.0+0x20ec6) (BuildId: 72e8cb985db37963272d140f7b2aee551c465ff5)
    #9 0x7fa51f12e3c2  (/lib64/libxkbcommon.so.0+0x223c2) (BuildId: 72e8cb985db37963272d140f7b2aee551c465ff5)
    #10 0x7fa51f12a4e5 in xkb_keymap_new_from_names (/lib64/libxkbcommon.so.0+0x1e4e5) (BuildId: 72e8cb985db37963272d140f7b2aee551c465ff5)
    #11 0x5574dd63f864 in verify_xkb_rmlvo /usr/src/debug/systemd/src/locale/xkbcommon-util.c:69:14
(snip)
```
2025-05-14 02:28:27 +09:00
Yu Watanabe 7ded7cfb7f TEST-73-LOCALE: drop unnecessary workaround
It should be fixed by 157d5b5c30.
2025-05-14 02:28:27 +09:00
Yu Watanabe 71078275e8 integration-tests: adjust priorities
When running with sanitizers:
```
26/95 systemd:integration-tests / TEST-21-DFUZZER                          OK 1517.75s
40/95 systemd:integration-tests / TEST-85-NETWORK-NetworkdDHCPClientTests  OK  779.18s
42/95 systemd:integration-tests / TEST-04-JOURNAL                          OK  716.17s
```
and without sanitizers:
```
44/95 systemd:integration-tests / TEST-85-NETWORK-NetworkdDHCPClientTests  OK  730.33s
29/95 systemd:integration-tests / TEST-64-UDEV-STORAGE-simultaneous_events OK  701.49s
40/95 systemd:integration-tests / TEST-04-JOURNAL                          OK  348.05s
```

So, let's set higher priorities only on these tests.
2025-05-14 02:28:27 +09:00
Yu Watanabe 48a092afbb github/mkosi: tentatively disable mkosi(opensuse) job
There is a package dependency issue in opensuse, and there is nothing we
can do. Let's reenable later when the issue is fixed.
2025-05-14 02:28:27 +09:00
Yu Watanabe 59dd650501 TEST-21-DFUZZER: skip test when no sanitizer is enabled 2025-05-14 02:28:22 +09:00
Yu Watanabe 5884fafcd7 systemctl: make systemctl clean --what= values more discoverable (#37418) 2025-05-14 02:16:47 +09:00
Yu Watanabe 003c6faff4 acl-util: make acl_find_uid() static 2025-05-14 02:06:02 +09:00
Yu Watanabe 1abb592f2f udev: move devnoce_acl() to udev-builtin-uaccess.c
As it is now only used by udev-builtin-uaccess.c.

This also makes devnode_acl() use fd rather than path to device node.
2025-05-14 02:06:02 +09:00
Yu Watanabe c960ca2be1 login,udev: avoid race between systemd-logind and systemd-udevd in setting ACLs
Previously, both udevd and logind modifies ACLs of a device node. Hence,
there exists a race something like the following:
1. udevd reads an old state file,
2. logind updates the state file, and apply new ACLs,
3. udevd applies ACLs based on the old state file.

This makes logind not update ACLs but trigger uevents for relevant
devices to make ACLs updated by udevd.
2025-05-14 02:06:02 +09:00
Yu Watanabe 26a675dd56 login: do not call manager_process_seat_device() more than once per event
When udevd broadcasts an event for e.g. a graphics device with master-of-seat
tag, then previously manager_process_seat_device() was called twice for
the event.

With this commit, the function is called only once even for an event for
such device.
2025-05-14 02:06:02 +09:00
Yu Watanabe 3400abf3ca login: use FOREACH_STRING() at one more place 2025-05-14 02:06:02 +09:00
Yu Watanabe 2012d6d74e device-util: introduce device_get_seat() helper function 2025-05-14 02:06:02 +09:00
Yu Watanabe ab1bd9daed device-util: introduce several more helper functions
This also makes device_in_subsystem() and device_is_devtype() return
negative error on critical error
2025-05-14 02:06:02 +09:00
Yu Watanabe b7d60b2966 backlight: replace recursion with for loop 2025-05-14 02:06:02 +09:00
Yu Watanabe 25151ca2b8 backlight: use device_get_sysattr_unsigned() at one more place 2025-05-14 02:06:02 +09:00
Daan De Meyer 8ebe9f1da2 Prepare for reducing transitive includes in tests.h (#37414) 2025-05-13 19:02:12 +02:00
Zbigniew Jędrzejewski-Szmek cd93478af8 pager: also check for $SUDO_UID
This returns to the original approach proposed in
https://github.com/systemd/systemd/pull/17270. After review, the approach was
changed to use sd_pid_get_owner_uid() instead. Back then, when running in a
typical graphical session, sd_pid_get_owner_uid() would usually return the user
UID, and when running under sudo, geteuid() would return 0, so we'd trigger the
secure path.

sudo may allocate a new session if is invoked outside of a session (depending
on the PAM config). Since nowadays desktop environments usually start the user
shell through user units, the typical shell in a terminal emulator is not part
of a session, and when sudo is invoked, a new session is allocated, and
sd_pid_get_owner_uid() returns 0 too. Technically, the code still works as
documented in the man page, but in the common case, it doesn't do the expected
thing.

$ build/test-sd-login |& rg 'get_(owner_uid|cgroup|session)'
sd_pid_get_session(0) → No data available
sd_pid_get_owner_uid(0) → 1000
sd_pid_get_cgroup(0) → /user.slice/user-1000.slice/user@1000.service/app.slice/app-ghostty-transient-5088.scope/surfaces/556FAF50BA40.scope

$ sudo build/test-sd-login |& rg 'get_(owner_uid|cgroup|session)'
sd_pid_get_session(0) → c289
sd_pid_get_owner_uid(0) → 0
sd_pid_get_cgroup(0) → /user.slice/user-0.slice/session-c289.scope

I think it's worth checking for sudo because it is a common case used by users.
There obviously are other mechanims, so the man page is extended to say that
only some common mechanisms are supported, and to (again) recommend setting
SYSTEMD_LESSSECURE explicitly. The other option would be to set "secure mode"
by default. But this would create an inconvenience for users doing the right
thing, running systemctl and other tools directly, because then they can't run
privileged commands from the pager, e.g. to save the output to a file. (Or the
user would need to explicitly set SYSTEMD_LESSSECURE. One option would be to
set it always in the environment and to rely on sudo and other tools stripping
it from the environment before running privileged code. But that is also fairly
fragile and it obviously relies on the user doing a complicated setup to
support a fairly common use case. I think this decreases usability of the
system quite a bit. I don't think we should build solutions that work in
priniciple, but are painfully inconvenient in common cases.)

Fixes https://yeswehack.com/vulnerability-center/reports/346802.

Also see https://github.com/polkit-org/polkit/pull/562, which adds support for
$SUDO_UID/$SUDO_GID to pkexec.
2025-05-13 18:08:49 +02:00
Lennart Poettering 44beeef7be systemctl: add "systemctl start -v" mode, which shows unit's logs while starting the unit (#36858) 2025-05-13 18:03:16 +02:00
Jörg Behrmann 68b6289a9e systemct: show all in output of systemctl clean --what=help 2025-05-13 17:21:02 +02:00
Jörg Behrmann 652e4dd743 man: note for systemctl clean --what that commas separate values 2025-05-13 17:20:37 +02:00