Commit Graph
9865 Commits
Author SHA1 Message Date
Jelle van der Waa d0ae0e4f07 pretty-print: correct argument comment 2025-05-21 10:50:25 +02:00
Jelle van der Waa d8b9f67e67 treewide: fix header file definitions 2025-05-21 10:50:25 +02:00
Daan De Meyer 7a30bc9ad6 shared: Introduce conf-parser-forward.h
conf-parser.h pulls in a lot of other headers as needed by all the
macros it defines. We can't easily move the implementations of these
macro to conf-parser.c, so let's instead introduce conf-parser-forward.h
with just the stuff in it needed by other header files.

We'll make use of this when cleaning up includes to only include the
minimal parts of conf-parser.h that are required by other headers without
pulling in the kitchen sink.
2025-05-21 10:49:42 +02:00
Daan De Meyer fa34123c35 test: Clean up includes
To make sure everything still compiles, we add a preliminary include
of forward.h to tests.h to make sure it is included in every test source
file. We'll clean up the tests.h includes in a later commit.

We also add a <errno.h> include to errno-list.h to keep test-errno-list.c
compiling. It'll be removed again when we clean up includes in src/basic.

Split out of #37344.
2025-05-21 10:49:42 +02:00
Daan De Meyer 4cb9717bdc pcre2-util: Make sure PatternCompileCase enum is named 2025-05-21 10:37:18 +02:00
Daan De Meyer 1fda0f4cae Various meson improvements (#37510) 2025-05-20 13:44:33 +02:00
Luca Boccassi 6946eed3fa core: Also refresh confext extensions when reloading notify-reload service (#33995)
`ExtensionImages=` and `ExtensionDirectories=` now let you specify
vpick-named extensions; however, since they just get set up once when
the service is started, you can't see newer versions without restarting
the service entirely. Here, also reload confext extensions when you
reload a service. This allows you to deploy a new version of some
configuration and have it picked up at reload time without interruption
to your workload.

Right now, we would only reload confext extensions and leave the sysext
ones behind, since it didn't seem prudent to swap out what is likely
program code at reload. This is made possible by only going for the
`SYSTEMD_CONFEXT_HIERARCHIES` overlays (which only contains `/etc`).

This PR:
- Adjusts `service.c` to also refresh extensions when needed. 
- Adds integration tests to check that a confext reload actually
occurred.
- Adds to the `systemd.exec` man pages to document this behavior.

This is a follow up to #24864 and #31364. Thank you to @bluca and
@goenkam for help in getting this up.
2025-05-20 11:27:34 +01:00
Daan De Meyer d86fead481 meson: Rework clang-tidy integration to be done via unit tests
Instead of using run-clang-tidy.py with its own scheduling, let's
just gather a list of source files ourselves and then use that to
add a unit test for each source file that runs clang-tidy on the
source file.

We also add a bit of logic to run clang-tidy on most header files
as well for extra coverage. This uncovered various header files that
were not standalone so this commit also includes fixes to make sure
the clang-tidy tests are all green.

We can also use this in a later commit to run clang-include-cleaner
on each source file in the same way.
2025-05-20 10:29:59 +02:00
maia x.andLuca Boccassi dfdeb0b1cb core: reload confexts when reloading notify-reload services
`ExtensionImages=` and `ExtensionDirectories=` now let you specify
vpick-named extensions; however, since they just get set up once when
the service is started, you can't see newer versions without restarting
the service entirely.  Here, also reload confext extensions when you
reload a service. This allows you to deploy a new version of some
configuration and have it picked up at reload time without interruption
to your workload.

Right now, we would only reload confext extensions and leave the sysext
ones behind, since it didn't seem prudent to swap out what is likely
program code at reload. This is made possible by only going for the
`SYSTEMD_CONFEXT_HIERARCHIES` overlays (which only contains `/etc`).

Implementation wise, this uses the new kernel API and two collaborating
child processes under the host & child namespaces in order to gather the
right FDs needed:

  - (1) In child, set up the extension images and directories in a slave
	mountns, and obtain their FDs.
  - (2) Fork into a grandchild under target process namespace, and do a
        "fake" unmount to obtain the FD of the underlying target folder
	say /etc).
  - (3) In the child again, set up new overlay under host NS rights.

We do not want to do I/O heavy jobs inline in PID1 blocking the state
machine, so add separate async states to handle this case.

Co-authored-by: Luca Boccassi <luca.boccassi@gmail.com>
2025-05-19 13:36:21 +01:00
Daan De Meyer 96b9d4162f bpf-link: Add HAVE_LIBBPF check
Fixes compilation error in userns-restrict.c where we try to include
libbpf.h when it is not available.
2025-05-16 21:36:15 +09:00
Yu Watanabe ed3dce108d varlink: fix typo
Follow-up for 736349958e.
2025-05-16 17:47:54 +09:00
Lennart Poettering 645e35633f Clean up includes (#37467)
Split out of #37344 

More small components that shouldn't be all too controversial.
2025-05-16 10:07:19 +02:00
Lennart Poettering 22b5ddb90f tree-wide: fix use of flink_tmpfile()
Let's always make sure the temporary file returned by fopen_tmpfile()
and friends is removed on failure (via _cleanup_). Conversely, make sure
that once the file is renamed into its final place, we no longer try to
remove the temporary file (since it's not going to exist anymore).
2025-05-16 08:28:42 +02:00
Daan De Meyer ef10d4b526 Bugprone argument comment - round 5 (#37481) 2025-05-15 20:33:50 +02:00
Jelle van der Waa 346c62f9ca treewide: correct argument comments 2025-05-15 15:39:20 +02:00
Jelle van der Waa f15dcafdb1 discover-image: correct argument comments 2025-05-15 14:50:33 +02:00
Mike Yuan 7762e9bbb2 core: always enable CPU accounting; cgtop: drop cgv1 handling (#37448) 2025-05-15 14:41:07 +02:00
Luca Boccassi ed5c3f4436 core: use socket cookie for naming per-connection service instances + set $SO_COOKIE env var to it (#37469) 2025-05-15 11:11:21 +01:00
Jelle van der Waa 5ae4d7c9ba tpm2-util: correct argument comments 2025-05-15 11:12:43 +02:00
Jelle van der Waa 2f75e5efa1 tpm2-util: rename tpm2_unseal arguments
To make it consistent with its implementation.
2025-05-15 11:12:28 +02:00
Lennart Poettering 272017d32a socket-util: add trivial socket_get_cookie() helper 2025-05-15 09:45:19 +02:00
Lennart Poettering 8d7d2edcbb bus-polkit: add a generic vtable for methods with no params, but with polkit 2025-05-15 09:31:27 +02:00
Mike Yuan 29da53dde3 core: always enable CPU accounting
Our baseline is v5.4 and cgroup v2 is enforced now,
which means CPU accounting is cheap everywhere without
requiring any controller, hence just remove the directive.
2025-05-15 02:19:16 +02:00
Mike Yuan 5fde5c0399 systemctl-show: drop BlockIO* property formatter 2025-05-15 02:19:15 +02:00
Mike Yuan 3274ef6792 core: drop Manager.blockio_accounting
Follow-up for 98d64ff500
2025-05-15 02:19:15 +02:00
Daan De Meyer 90711654df user-record: Make sure UserStorage enum has the same name as its typedef 2025-05-15 00:00:03 +02:00
Daan De Meyer 0dc510ab03 tpm2-util: Make sure structs/enums are named and add to forward.h
We have to name structs/enums to be able to forward declare them, so
let's do that and add the missing ones to forward.h.
2025-05-14 22:34:02 +02:00
Daan De Meyer 9ebbb785b0 serialize: Move some logic to the implementation file
This will allow removing the string-util.h include in #37344.
2025-05-15 04:25:47 +09:00
Yu Watanabe 1ef6cee327 Bugprone argument comment - round 4 (#37380)
Follow up from https://github.com/systemd/systemd/pull/37356
2025-05-15 03:36:16 +09:00
Daan De Meyer 7305347221 discover-image: Move some logic to the implementation file
This will allow removing the string-util.h and path-util.h includes
as part of #37344.
2025-05-14 19:55:56 +02:00
Daan De Meyer bdcd47a269 blockdev-util: Remove dependency on string-util.h
Let's insist on a string literal in SYS_BLOCK_PATH_MAX() so that
we don't accidentally allocate VLAs and let's inline strempty() in
xsprintf_sys_block_path() so we don't need to include string-util.h
in blockdev-util.h

We'll remove the actual string-util.h include as part of #37344.
2025-05-14 16:56:05 +02:00
Luca Boccassi ab5cb21e32 mount-util: add helper to get source from mountinfo 2025-05-14 15:13:28 +01:00
maia x. 4fc9940760 vpick: add path_uses_vpick helper method
Add a path_uses_vpick helper method to determine if a path matches
the vpick format ('PATH/NAME.SUFFIX.v' or 'PATH.v/NAME___.SUFFIX'):

	/* good: returns 1 */
	path_uses_vpick("/var/lib/machines/mymachine.raw.v/")
	path_uses_vpick("to.v/foo___.raw

	/* bad: returns <= 0 */
	path_uses_vpick("/")
	path_uses_vpick("path/to/foo.mp4.vtt
2025-05-14 15:13:28 +01: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 86bb6f4052 fork-journal: some follow-ups (#37423) 2025-05-14 13:02:46 +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 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
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
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 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
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 6427d0fbed logs-show: use memory_startswith() rather than startswith()
Let's be strict here: this data is conceptually not NUL terminated,
hence use memory_startswith() rather than startswith() (which implies
NUL termination). All other similar cases in logs-show.c got this right.
Fix the remaining three, too.
2025-05-13 15:39:57 +02:00
Lennart Poettering 010e2562dd logs-show: handle bad messages like EOF
Similar to the previous commit, but for logs-show.c
2025-05-13 15:39:57 +02:00