Commit Graph

82329 Commits

Author SHA1 Message Date
Mike Yuan
9efffbbfde Revert "namespace-util: include sched.h"
This reverts commit 50cda6433b.

Same as the previous revert, sched.h is too generic to
be included in namespace-util.h, plus this defeats
the purpose of forward decl.
2025-06-26 00:46:20 +09:00
Mike Yuan
7c3da8cbf9 Revert "fs-util: include fcntl.h in fs-util.h"
This reverts commit 4d0fe93cba.

I'm not convinced by the reasoning here. The practice of
forward declarations should be confined in headers only,
and any actual invocation of functions in source files
needs to include the original header. strv_split_full()
for instance takes ExtractFlags, and callers will need
to include extract-word.h to get the value definitions.

Now, indeed some -util headers export the most relevant
system header too, notably pidfd-util. But fs-util doesn't
seem to be coupled with any specific header, hence I'm
skeptical about such inclusion.
2025-06-26 00:46:20 +09:00
Luca Boccassi
f8b598d381 socket-activate: normalize COMMAND notation in help text + man (#37967) 2025-06-25 15:05:24 +01:00
Daan De Meyer
9cb6d2bf85 nspawn: Allow bpf() syscall if CAP_BPF is retained
CAP_BPF is closely associated with the bpf() syscall so it makes sense
to allow the latter if the former is retained.
2025-06-25 14:58:31 +01:00
Mike Yuan
151efb6d13 socket-activate: normalize COMMAND notation in help text + man 2025-06-25 13:34:41 +02:00
Mike Yuan
e6be9d12db man/systemd-run: consistently wrap external command + args in a single block 2025-06-25 13:31:16 +02:00
Yu Watanabe
28cc15135a Assorted header cleanups (#37958) 2025-06-25 06:32:56 +09:00
Luca Boccassi
a0dfb02456 test: escape '+' from uname -r before using in regex via '=~'
It will otherwise interpret characters such as '+' as if they
were regex, and break matching.

For example TEST-71-HOSTNAME started failing when
uname -r started including a '+':

FAIL: 'Kernel: Linux 6.12.33+deb13-amd64' not found in:
 Static hostname: host
       Icon name: computer-vm
         Chassis: vm 🖴
      Machine ID: e6471c1f95ab49098827498ed816cdf7
         Boot ID: 231da987f64d4af59f2076fbb638c611
  Virtualization: kvm
Operating System: Debian GNU/Linux 13 (trixie)
          Kernel: Linux 6.12.33+deb13-amd64
    Architecture: x86-64
2025-06-25 05:44:13 +09:00
Lennart Poettering
736b627775 logind: save position only if we have a seat 2025-06-24 22:16:41 +02:00
Lennart Poettering
2be3a06bb2 core: when PrivateDevices= is enabled and we need to decrypt TPM2 credentials, go via IPC
Also, if a device ACL list is defined, also go via IPC (instead of
trying to patch it, as before).

The outcome is that the tighter rules continue to apply when configured.

Fixes: #35959
2025-06-24 22:16:01 +02:00
Yu Watanabe
aecb6eaed7 man: fix @BUILD_ROOT@ insertion
@BUILD_ROOT@ is replaced with the _quoted_ build path. Hence, if
@BUILD_ROOT@ is quoted, the result is doubly quoted, and the script does
not work if the path contains spaces.

Fixes #37953.
2025-06-24 21:04:58 +01:00
Yu Watanabe
38704f5dc9 include: update syscall list
open_tree_attr is since kernel 6.15-rc1:
c4a16820d9
2025-06-25 03:59:25 +09:00
Yu Watanabe
65a7665939 fs-util: use int for argument that takes F_OK and friends
access_nofollow() is a simple wrapper of faccessat(), and it is defined as
```
int faccessat(int dirfd, const char *pathname, int mode, int flags);
```
2025-06-25 03:59:25 +09:00
Yu Watanabe
4d0fe93cba fs-util: include fcntl.h in fs-util.h
fs-util.h provides access_nofollow() but it did not include neither
fcntl.h nor unistd.h, which define F_OK and friends. Hence we cannot use
the function without including one of the headers. Let's include fcntl.h
in fs-util.h, then we can use the function by simply including fs-util.h.
2025-06-25 03:59:25 +09:00
Yu Watanabe
118ac16b6e include: import kernel headers for several struct and enum definitions
- mempolicy.h for MPOL_DEFAULT and friends,
- sched/types.h for struct sched_attr,
- xattr.h for struct xattr_args.
2025-06-25 00:50:06 +09:00
Yu Watanabe
50cda6433b namespace-util: include sched.h
To make CLONE_NEWNS and friends defined, which is used by clone_flag_to_namespace_type().
2025-06-25 00:50:06 +09:00
Yu Watanabe
8227088e2b meson: sort file list 2025-06-25 00:50:06 +09:00
Yu Watanabe
fbf6836812 tree-wide: include missing_fs.h only where necessary
The additional definitions provided by the header are
- EXT4_IOC_RESIZE_FS, used in resize-fs.c,
- FILEID_KERNFS, used in cgroup-util.c and pidfd-util.c.

Let's drop the inclusion at other places.
2025-06-25 00:50:06 +09:00
Lennart Poettering
51cc3825d1 tree-wide: use sd_bus_message_send() instead of sd_bus_send() wherever possible
Also, add a coccinelle script that patches this automatically.
2025-06-24 23:23:40 +09:00
Lennart Poettering
9422ce83c2 udev: reset loopback block device ownership and mode on detach
Loopback block devices are agressively reused, without being removed in
between. This means various inode attributes on their device nodes will
– so far – remain in effect between uses of the devices. Since there are
applications which change access mode/ownership of such devices after
attaching files to them, let's undo this again when we detect them to be
unused again.

Fixes: #37745
2025-06-24 13:10:11 +02:00
Lennart Poettering
7e1647ae4e import: rename keyring extension from .gpg to .pgp and add OBS key for system:systemd (#37927)
The format is not specific to gpg, it's defined by the pgp
protocols. Lintian even warns about it:

systemd-container: openpgp-file-has-implementation-specific-extension
[usr/lib/systemd/import-pubring.gpg]

Rename it accordingly, as new pgp implementations are slowly becoming
more popular.

Keep using /etc/systemd/import-pubring.gpg for backward compatibility.
2025-06-24 07:31:07 +02:00
Luca Boccassi
078eeac8ea NEWS: add not about vendor import-pubring renaming 2025-06-24 00:15:06 +01:00
Luca Boccassi
18118380c5 mkosi: drop suse spec workarounds that were merged upstream 2025-06-24 00:15:06 +01:00
Luca Boccassi
4da911c1e5 mkosi: workaround for opensuse spec file to pick up new import-pubring filename 2025-06-24 00:15:06 +01:00
Luca Boccassi
c45c77e890 mkosi: update debian commit reference to 84966b99cdfc7ea3ee35163ad224775d9be90055
* 84966b99cd systemd-container: pick up renamed keyring file
* 7aab0da57c udev: add 'clock' system group for PTP rules
2025-06-23 23:24:51 +01:00
Luca Boccassi
857f08137a import-pubring: add OBS key for system:systemd
We are publishing ParticleOS images at
https://build.opensuse.org/project/show/system:systemd

so add the signing key to the default keyring, so that they
can be imported out of the box.
2025-06-23 23:24:51 +01:00
Luca Boccassi
ff401d5df9 import: rename keyring extension from .gpg to .pgp
The format is not specific to gpg, it's defined by the pgp
protocols. Lintian even warns about it:

systemd-container: openpgp-file-has-implementation-specific-extension [usr/lib/systemd/import-pubring.gpg]

Rename it accordingly, as new pgp implementations are slowly becoming
more popular.

Keep using /etc/systemd/import-pubring.gpg for backward compatibility.
2025-06-23 23:24:51 +01:00
Yu Watanabe
274e2f4bb9 test-cpu-set-util: fix check for CPUSet.allocated
The check was simply wrong and meaningless, as it always checked
CPUSet.allocated is greater than or equals to 1, as sizeof(__cpu_mask) is 8.

Let's make the test more strict.
2025-06-23 22:28:22 +01:00
Lennart Poettering
170d7d49f5 user-record: also support "aliases" in the "status" section of user records
Some user record providers might want to implement case-insensitive user
record matching, or other forms of non-normalized matching. So far
uderdb didn't allow that, because client's typically revalidate the
returned user records against the search keys (at least our clients do)
– they check if the search user name is actually part of the user record
and its aliases.

In order to support such lookups we thus need to allow the looup keys to
be part of the user record, but also not be persisted in it, because
the number of casings/spellings of a username might be ridiculously
high.

A nice way out is to allow "aliases" not only in the main part of the
record, but also in the "status" part, that contains information
dynamically determined at query time. We can insert a second "aliases"
field there, which the parser will then merge with the primary "aliases"
field, but the existing rules around "status" ensure tha the data is
never persisted.

Follow-up: e2e1f38f5a
2025-06-23 22:26:24 +01:00
Luca Boccassi
ad39648171 network/dhcp6: handle conflict addresses gracefully (#37916) 2025-06-23 22:23:35 +01:00
Yu Watanabe
4aedee430b core: turn ordering cycle log message into a recognizable one + catalog entry (#37893)
Fixes: #35642
2025-06-24 02:56:07 +09:00
Yu Watanabe
01c4788ea6 glob-util: several cleanups for safe_glob() (#37933) 2025-06-24 02:53:37 +09:00
Daan De Meyer
1e0e7c7411 home: Make sure we resolve /etc/skel symlink
Otherwise copy_tree_at() will try to copy the symlink which we obviously
don't want.
2025-06-23 18:16:06 +02:00
Yu Watanabe
5eab200758 homed,userdbd: mark "secrets" section of user records always to "sensitive" (#37935) 2025-06-24 00:50:44 +09:00
Lennart Poettering
1bd9a3c916 bootspec: ensure memory free in one error path 2025-06-24 00:49:46 +09:00
Yu Watanabe
04fd0b9ff0 sysupdate: use path_is_safe()
path_is_safe(...) is an alias of path_is_valid_full(..., false).
2025-06-24 00:49:04 +09:00
Lennart Poettering
b53c3af3fe console: when switching console modes and one doesn't work, always go for the next
So far we already had a logic in place to go for the next mode if some
mode doesn't work – but it was only applied if we'd actively cycle
through resolutions.

Let's extend the logic and always apply it: whenever we try to switch to
a mode, and it doesn't work, go to the next one until we find one that
works.

Fixes: #37324
2025-06-24 00:48:38 +09:00
Lennart Poettering
e4003f2d9c catalog: add entries for the order cycle log messages
Fixes: #35642
2025-06-23 16:47:06 +02:00
Lennart Poettering
becbd2ec4e core: when removing a job from a transaction, include in structured log message which 2025-06-23 16:47:06 +02:00
Lennart Poettering
6650e21349 core: cast log_oom() got void 2025-06-23 16:47:06 +02:00
Lennart Poettering
fe458ad68e core: change ordering cycle log message log levels
Let's downgrade the log message about our attempts to deal with an
ordering cycle to warning, because this is a "positive" thing, we try to
improve an earlier error.

OTOH increase the log level when we first log about the cycle to error,
since that highlights the actual problem.
2025-06-23 16:47:06 +02:00
Lennart Poettering
5bbad6244f core: make log cycle messages recognizable via message IDs 2025-06-23 16:47:06 +02:00
Lennart Poettering
201647e3f2 core: output log cycle path in one log message, not many
Fixes: #35642
2025-06-23 16:47:06 +02:00
Yu Watanabe
f117272f66 glob-util: drop unused _cleanup_globfree_ 2025-06-23 23:11:44 +09:00
Yu Watanabe
9a9139e087 test: use safe_glob() at one more place
This also makes the test use ASSERT_OK() and STRV_FOREACH() macros.

No functional change, just refactoring.
2025-06-23 23:11:44 +09:00
Yu Watanabe
2a5f950e56 glob-util: rework safe_glob()
Currently, callers of safe_glob() set an empty glob_t or glob_t with
opendir func, and all other components are always zero.
So, let's introduce safe_glob_full() which optionally takes opendir
function, rather than glob_t, and returns result strv, rather than
storing results in glob_t.
Also, introduce safe_glob() which is a trivial wrapper of
safe_glob_full() without opendir func.

No functional change, just refactoring.
2025-06-23 23:11:44 +09:00
Yu Watanabe
1b0c39458b test-glob-util: drop redundant test cases
The removed glob() with GLOB_ALTDIRFUNC is exactly the same as what
safe_glob() does, which is tested in TEST(safe_glob) below.
Let's drop the test cases.
2025-06-23 23:11:44 +09:00
Valentin David
0dc39dffbd Use paths specified from environment variables for /etc configuration files
Some configuration files that need updates are directly under in /etc. To
update them atomically, we need write access to /etc. For Ubuntu Core this is
an issue as /etc is not writable. Only a selection of subdirectories can be
writable. The general solution is symlinks or bind mounts to writable places.
But for atomic writes in /etc, that does not work. So Ubuntu has had a patch
for that that did not age well.

Instead we would like to introduce some environment variables for alternate
paths.

 * SYSTEMD_ETC_HOSTNAME: /etc/hostname
 * SYSTEMD_ETC_MACHINE_INFO: /etc/machine-info
 * SYSTEMD_ETC_LOCALTIME: /etc/localtime
 * SYSTEMD_ETC_LOCALE_CONF: /etc/locale.conf
 * SYSTEMD_ETC_VCONSOLE_CONF: /etc/vconsole.conf
 * SYSTEMD_ETC_ADJTIME: /etc/adjtime

While it is for now expected that there is a symlink from the standard, we
still try to read them from that alternate path. This is important for
`/etc/localtime`, which is a symlink, so we cannot have an indirect symlink or
bind mount for it.

Since machine-id is typically written only once and not updated. This commit
does not cover it. An initrd can properly create it and bind mount it.
2025-06-23 15:32:11 +02:00
Lennart Poettering
e3d0fa5ac4 userdb: when loading a user record from JSON, mark 'secret' section in JSON variant as sensitive as side effect
When we load a user record we retain a reference to the original JSON.
Thus the loaded objects might live at least as long as our user record
object, hence we better make sure we set the 'sensitive' flag for the
'secret' section if it's not marked like that yet.

This is paranoia only: we already should be setting this flag properly
earlier, when acquiring the json variant in the first place. But it's
better to be safe than sorry.
2025-06-23 14:48:45 +02:00
Lennart Poettering
5933eb1a71 homed: set "secrets" section to 'sensitive' in more places
We already do this in all placed where we it *really* matters, i.e. for
passwords PINs. But let's do this also at any place where we add the
section at all, regardless whether it is for storing a pw or something
else.

With this we establish the rule that if it's in "secrets", then it
shall be marked "sensitive".
2025-06-23 14:48:37 +02:00