Commit Graph
87353 Commits
Author SHA1 Message Date
Zbigniew Jędrzejewski-Szmek ca6c3bd0e5 validatefs: shorten and reindent code 2026-03-25 02:02:24 +01:00
Zbigniew Jędrzejewski-Szmek 34d08e2ec3 validatefs: use the new option parser
Co-developed-by: Claude <claude@anthropic.com>
2026-03-25 02:02:24 +01:00
Zbigniew Jędrzejewski-Szmek 58e891e5f6 update-done: use the new option parser
While at it, add --version.

Co-developed-by: Claude <claude@anthropic.com>
2026-03-25 02:02:23 +01:00
Zbigniew Jędrzejewski-Szmek 6e2c5624e6 ask-password: use the new option parser
--version was missing from the old help text and is now included.

Co-developed-by: Claude <claude@anthropic.com>
2026-03-25 02:02:22 +01:00
Zbigniew Jędrzejewski-Szmek 9a96415c69 shared/options: allow option help to be extended with fake lines
Useful when we want to enumerate options rvalues with custom help
texts.
2026-03-25 02:02:20 +01:00
Zbigniew Jędrzejewski-Szmek 1ccfe9ec5f binfmt: use the new option parser
Co-developed-by: Claude <claude@anthropic.com>
2026-03-25 00:45:57 +01:00
Zbigniew Jędrzejewski-Szmek 0765919f05 shared/options: add common option macros for --cat-config and --tldr
Co-developed-by: Claude <claude@anthropic.com>
2026-03-25 00:45:57 +01:00
Zbigniew Jędrzejewski-Szmek 9b8d74a4e7 ac-power: use the new option parser
Co-developed-by: Claude <claude@anthropic.com>
2026-03-25 00:45:57 +01:00
Zbigniew Jędrzejewski-Szmek 848dd000e0 shared/options: add helper function to count positional args 2026-03-25 00:45:57 +01:00
Daan De Meyer 7aa94251fe ci: Generalize escaping instructions in claude-review prompt 2026-03-24 10:27:35 +01:00
Luca Boccassi 3af158759f creds: use CLEANUP_ERASE for symmetric key
Just in case, ensure the sha256 that is used as a symmetric
key for encrypted creds is safely erased from memory.

Reported on yeswehack.com as YWH-PGM9780-166

Follow-up for 21bc0b6fa1
2026-03-24 08:29:03 +01:00
Lennart Poettering e7a176fe46 Define options and verbs through "magic macros" (#40880)
This is an another alternative for #40656, based on @poettering's
suggestion to use an ELF section.

The output of --help is generated using format-table, but the details of
the formatting a bit off: different sections in the table (verbs, option
groups) are not aligned to the same column. Our current table formatting
doesn't make this easy. If somebody has an idea how to do this without
too much pain, please make suggestions.

Another thing that I didn't know how to do nicely, was to use the two
columns of separation. But maybe this doesn't matter. If we switch to
one column everywhere, I don't think people will care.

Example output:
```console
$ build/systemd-id128 -h | cat    
systemd-id128 [OPTIONS...] COMMAND

Generate and print 128-bit identifiers.

Commands:
  new                Generate a new ID
  machine-id         Print the ID of current machine
  boot-id            Print the ID of current boot
  invocation-id      Print the ID of current invocation
  var-partition-uuid Print the UUID for the /var/ partition
  show [NAME|UUID]   Print one or more UUIDs
  help               Show this help

Options:
  -h --help            Show this help
     --version         Show package version
     --no-pager        Do not start a pager
     --no-legend       Do not show headers and footers
     --json=FORMAT     Output inspection data in JSON (takes one of pretty,
                       short, off)
  -j                   Equivalent to --json=pretty (on TTY) or --json=short
                       (otherwise)
  -p --pretty          Generate samples of program code
  -P --value           Only print the value
  -a --app-specific=ID Generate app-specific IDs
  -u --uuid            Output in UUID format

See the systemd-id128(1) man page for details.
```

The output wraps automatically with terminal width. If the terminal is
extremely narrow, ellipsization occurs. I think this doesn't matter
and/or is actually a feature. Such narrow terminals mostly occur in
testing, so it doesn't matter what exactly we do, as long as it is
something somewhat reasonable.

Anyway, I think this is enough as PoC. Please compare this with the
previous approach. /cc @behrmann, @YHNdnzj, @poettering

The three binaries that are converted have options, verbs, optional
arguments, and options terminate option parsing, so most of the
functionality is there. One thing that I didn't implement that was
present in previous PRs is "namespaces", i.e. multiple parsers in the
same source file. I expect that we can handle this similarly to option
groups.
2026-03-23 22:17:05 +01:00
Lennart Poettering 5adfd44c9e copy: add new flags that cause a seek to beginning of files before copying
This is quite useful in various cases where we so far did this manually.
2026-03-23 19:19:46 +00:00
Zbigniew Jędrzejewski-Szmek 1ddc5ae3e4 notify: add one more compiler suppression
Old gcc (<14) says:

2026-03-02T23:11:28.5676353Z In file included from ../src/notify/notify.c:30:
2026-03-02T23:11:28.5694607Z In function ‘strv_isempty’,
2026-03-02T23:11:28.5695481Z     inlined from ‘action_fork’ at ../src/notify/notify.c:440:9,
2026-03-02T23:11:28.5696266Z     inlined from ‘run’ at ../src/notify/notify.c:541:24,
2026-03-02T23:11:28.5696929Z     inlined from ‘main’ at ../src/notify/notify.c:682:1:
2026-03-02T23:11:28.5697877Z ../src/basic/strv.h:108:23: error: ‘args’ may be used uninitialized [-Werror=maybe-uninitialized]
2026-03-02T23:11:28.5698655Z   108 |         return !l || !*l;
2026-03-02T23:11:28.5699052Z       |                       ^~
2026-03-02T23:11:28.5700020Z ../src/notify/notify.c: In function ‘main’:
2026-03-02T23:11:28.5700681Z ../src/notify/notify.c:531:16: note: ‘args’ was declared here
2026-03-02T23:11:28.5701217Z   531 |         char **args;
2026-03-02T23:11:28.5701574Z       |                ^~~~
2026-03-02T23:11:28.5701960Z cc1: all warnings being treated as errors
2026-03-23 14:20:10 +01:00
Zbigniew Jędrzejewski-Szmek 8b89c6a64b Apply the same column width for different option groups
This feel a bit like a hack, but it works OK. The width of the first
column of verbs or options in different sections is measured and
applied to the other tables. This makes the second column aligned.
2026-03-23 14:20:10 +01:00
Zbigniew Jędrzejewski-Szmek bcaa5acf81 shared/format-table: add helpers to query and set column width 2026-03-23 14:20:10 +01:00
Daan De Meyer 6fb5ec3dd1 ci: Replace codeql PotentiallyDangerousFunction query with clang-tidy (#41246) 2026-03-23 11:30:47 +01:00
vlefebvre d7a759569e mkosi-tool/opensuse: add libtss2-tcti-device0 package
libtss2-tcti-device0 is not installed by default in the openSUSE
image, but is now required when building the test image. Without it,
the build fails with

```
Shared library 'libtss2-tcti-device.so.0' is not available:
libtss2-tcti-device.so.0: cannot open shared object file: No such file or directory
```

Follow-up for 5f85409f93
2026-03-23 11:15:20 +01:00
Arif Budiman 80706896ba po: Translated using Weblate (Indonesian)
Currently translated at 100.0% (266 of 266 strings)

Co-authored-by: Arif Budiman <arifpedia@gmail.com>
Translate-URL: https://translate.fedoraproject.org/projects/systemd/main/id/
Translation: systemd/main
2026-03-23 11:08:48 +01:00
Daan De Meyer 4d8e090763 Two fixlets (#41273)
From yeswehack.com reports
2026-03-23 09:05:27 +01:00
Yu Watanabe 218ae1b11f networkd: replace D-Bus with Varlink in networkctl (#40780)
networkctl previously called networkd over D-Bus for several operations.
This replaces all of those calls with Varlink, making it the sole IPC
mechanism between networkctl and networkd.

 New Varlink methods added to networkd:

- io.systemd.Network.Link (new sub-interface for link-specific
operations):

- Link.Describe — replaces Link.BitRates + DHCPServer.Leases D-Bus
properties
- Link.Up — replaces Link.SetUp D-Bus method (moved from
**io.systemd.Network.LinkUp**)
- Link.Down — replaces Link.SetDown D-Bus method (moved from
**io.systemd.Network.LinkDown**)
      - Link.Renew  — replaces Link.Renew D-Bus method
      - Link.ForceRenew   — replaces Link.ForceRenew D-Bus method
      - Link.Reconfigure  — replaces Link.Reconfigure D-Bus method

  - io.systemd.service 
     - Reload            — replaces Manager.Reload D-Bus method

  Supporting changes:
- link_get_bit_rates() extracted from networkd-link.c into
networkd-speed-meter.c
- BitRates added to link_build_json() so Link.Describe returns them
inline
alongside the existing interface description, replacing a separate D-Bus
read
- link_reconfigure_full() and manager_reload() extended to accept
sd_varlink*
for deferred async replies (consistent with existing sd_bus_message*
path)
  - DHCP lease display (networkctl status) uses Link.Describe instead of
DHCPServer.Leases; falls back to ClientId when hostname is not present
2026-03-23 14:55:57 +09:00
Luca Boccassi 7b148d7b78 mountfsd: fix readOnly flag inversion
mountfsd applies R/O when the varlink readOnly flag is set to false

Reported on yeswehack.com as YWH-PGM9780-164

Follow-up for 702a52f4b5
2026-03-23 00:54:51 +00:00
Luca Boccassi aaac2d3eda core: also set iov_len when deserializing LogExtraFields=
This is not actually used so it doesn't really matter in
practice and the fields are used anyway, but for cleanliness
fix it

Reported on yeswehack.com as YWH-PGM9780-165

Follow-up for 5699a1689b
2026-03-23 00:54:23 +00:00
Daan De Meyer 8878df45c1 ssh: handle VMADDR_CID_ANY in a couple places (#41230)
Originally reported in Ubuntu as
https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/2145027.
2026-03-22 20:07:53 +01:00
Daan De Meyer 2bc0b826dc [RFC] core: add io.systemd.Manager.{PowerOff,SoftReboot,Halt,Kexec} (#41236) 2026-03-22 20:06:34 +01:00
Andreas K. Hüttel beef155b12 mips: Fix conditional inclusion of <asm/sgidefs.h>
systemd now has a system call wrapper that does a long series of #ifdef's to
differentiate between architectures and ABIs. This wrapper has two problems.

1. On mips, it needs to differentiate between O32, N32, N64 ABI. It does that
via a code block in src/include/override/sys/generate-syscall.py (and derived
files):

     76 #  elif defined(_MIPS_SIM)
     77 #    if _MIPS_SIM == _MIPS_SIM_ABI32
     78 #      define systemd_NR_{syscall} {nr_mipso32}
     79 #    elif _MIPS_SIM == _MIPS_SIM_NABI32
     80 #      define systemd_NR_{syscall} {nr_mips64n32}
     81 #    elif _MIPS_SIM == _MIPS_SIM_ABI64
     82 #      define systemd_NR_{syscall} {nr_mips64}
     83 #    else
     84 #      error "Unknown MIPS ABI"
     85 #    endif
     86 #  elif defined(__hppa__)

Now the _MIPS_SIM* constants stem from a vendor-specific header file sgidefs.h,
which is included with glibc, but not with musl. It is however always present
in the Linux kernel headers as asm/sgidefs.h ...

2. To work around this, the syscall wrapper already has a block

     47 #ifdef ARCH_MIPS
     48 #include <asm/sgidefs.h>
     49 #endif

Turns out, ARCH_MIPS is defined nowhere in Gentoo, neither on glibc nor on musl.
As a result the code (by accident, probably sgidefs.h is included transitively
somehow) works on glibc, but not on musl.

The simplest fix is to replace line 47 in the generator and the derived file
with

     47 #ifdef __mips__

Two other source code files require a similar fix since they rely on the
constants.

Bug: https://github.com/systemd/systemd/issues/41239
Bug: https://bugs.gentoo.org/971376
Signed-off-by: Andreas K. Hüttel <dilfridge@gentoo.org>
2026-03-22 20:02:13 +01:00
Daan De Meyer 9d844012bc sd-dhcp-client: several trivial cleanups (#41256) 2026-03-22 20:00:33 +01:00
Yu Watanabe 55f2fdd508 dhcp: fix user class and vendor specific option assignment
The commit 6d7cb9a6b8 fixes the assignment
of the these options when specified through SendOption=. However, it
breaks when specified through UserClass= or SendVendorOption=.

When UserClass= or SendVendorOption= is specified, the option length is
calculated from the sd_dhcp_client.user_class or .vendor_options. Hence,
we can use 0 for the length in that case.

Follow-up for 6d7cb9a6b8.
2026-03-22 19:40:54 +01:00
Frantisek Sumsal 924f5a3461 sd-varlink: gracefully reject arrays/maps with a null element
Follow-up for 799392286e.
2026-03-22 19:37:47 +01:00
Zbigniew Jędrzejewski-Szmek 57a1f1ab96 bus-error: fix typo 2026-03-22 16:52:22 +01:00
Zbigniew Jędrzejewski-Szmek 95ee4fd2cc notify: add one more assert
We tend to get those preallocated array sizes wrong.
In this case, the count was correct, but add the usual
assert.
2026-03-22 16:52:22 +01:00
Zbigniew Jędrzejewski-Szmek 0e4459eb19 notify: use the new option parser
Cosmetic adjustments to one help string.
2026-03-22 16:52:22 +01:00
Zbigniew Jędrzejewski-Szmek 08f7a4865e dissect: restore compat with clang
clang says:
  src/dissect/dissect.c:292:17: warning: label followed by a declaration is a C23 extension [-Wc23-extensions]

Another option would be to raise the C standard to C23. I think that'd
make sense, but it's better to do it separately.
2026-03-22 16:52:22 +01:00
Zbigniew Jędrzejewski-Szmek 34fba9e561 dissect: use the new option parser
Some cosmetic differences in descriptions are made.
--quiet was miscategorized as a command (172fadda65),
--usr-hash and --usr-hash-sig were not listed (10b8d65f3f).
2026-03-22 16:52:22 +01:00
Zbigniew Jędrzejewski-Szmek cefec0b67d id128: use the new option parser
--version was not documented. Fixup for 0d1d512f7f.
2026-03-22 16:52:22 +01:00
Zbigniew Jędrzejewski-Szmek e13b7872e0 options: only consume "--" immediately after an option that stops parsing
The behaviour that was implemented in systemd-dissect was that
both '--exec -- cmd' and '--exec cmd' result in 'cmd' as the command,
and '--' anywhere later is as a positional argument, so nesting is
possible, e.g.:
  --exec -- cmd --opt -- another-cmd --another-opt

This is not obvious, so add some tests for this and keep it as a separate
commit.
2026-03-22 16:52:22 +01:00
Zbigniew Jędrzejewski-Szmek 4bf73e6980 test-options: add tests for option macros and flags
Add tests for OPTION_STOPS_PARSING, OPTION_GROUP_MARKER, and
OPTION_OPTIONAL_ARG flags with manual Option arrays, and a separate
test exercising the OPTION, OPTION_LONG, OPTION_SHORT, OPTION_FULL,
and OPTION_GROUP macros via FOREACH_OPTION_FULL in a switch statement,
as they would be used in real code.

Co-developed-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-22 16:52:22 +01:00
Michael Vogt 114c89cc94 core: allow unset pidref in manager_log_caller
This commit allows unset pidref when calling manager_log_caller().
With that we can log manager calls even if we cannot resolve the
caller. Currently when we cannot resolve the caller we are just
not logging anything. With this commit we at least log the call
(even though we don't know what caller it was).

Thanks to keszybz for the suggestion.
2026-03-21 22:40:52 +01:00
Michael Vogt 955115546c core: extract varlink_log_caller() helper
Extract a common helper varlink_log_caller() and use in the varlink
code when logging the caller of a method. It also logs the method
now that was tried (but failed) to be logged with log_notice just
like manager_log_caller() would do.

I was looking into modifying `manager_log_caller` instead and
accept a NULL pidref but could not log more than the method without
pidref and would make the manager_log_caller slightly less nice.

Thanks to keszybz for suggesting this.
2026-03-21 22:28:19 +01:00
Michael Vogt 6215147624 core: add io.systemd.Manager.{PowerOff,Reboot,SoftReboot,Halt,Kexec}
This adds the low-level io.systemd.Manager shutdown support. This
is (much) simpler than the logind one. It mimics dbus but uses
a shared helper for the simple cases.

Note that this is more restrictive than the dbus version. The
dbus version uses SD_BUS_VTABLE_CAPABILITY(CAP_SYS_BOOT) but
the varlink version uses varlink_check_privileged_peer(link).
This is mostly because I'm not sure how to do the equivalent
in a race-free way.

Thanks to Daan for suggesting this.
2026-03-21 22:01:17 +01:00
Oblivionsage 494c65236b dns-packet: move p->more unref into the free path
dns_packet_unref() unconditionally unrefs p->more on every call,
even when n_ref > 1. But dns_packet_ref() doesn't ref p->more.
This means if a packet with a ->more chain gets ref'd and unref'd
multiple times, the chain gets freed too early while the parent
still holds a dangling pointer.

Move the p->more unref into the n_ref == 1 block so the chain
only gets cleaned up when the packet is actually being freed.
2026-03-21 20:34:39 +01:00
Yu Watanabe 26f769bea3 sd-dhcp-client: propagate errors in client_initialize_{io,time}_events()
Call client_stop() on error and return 0 only on callback.
Normal non-callback functions should propagate errors.

This also makes client_initialize_time_events() use
event_reset_time_relative().
2026-03-22 03:34:43 +09:00
Yu Watanabe ad4d2ae619 sd-dhcp-client: voidify client_initialize()
It never fails.
2026-03-22 03:34:43 +09:00
Yu Watanabe 2fb192d237 sd-dhcp-client: drop disabled FORCERENEW message support
FORCERENEW message support has been disabled so long time for security
concern. Most other implementations of DHCP server/client neither
support FORCERENEW. Let's completely drop relevant code.
2026-03-22 03:34:43 +09:00
Yu Watanabe ddded65d41 sd-dhcp-client: add missing error checks 2026-03-22 03:34:43 +09:00
Yu Watanabe 0c68816c56 sd-dhcp-client: add missing assertion 2026-03-22 03:34:43 +09:00
Yu Watanabe ced607506d sd-dhcp-client: coding style fix 2026-03-22 03:34:43 +09:00
Yu Watanabe bd1d1e61eb fuzz-dhcp-client: modernize test code 2026-03-22 02:26:18 +09:00
Yu Watanabe f0387aa666 test-dhcp-client: modernize test code 2026-03-22 02:26:15 +09:00
Daan De Meyer e6f1d9a5e5 ci: Replace codeql PotentiallyDangerousFunction query with clang-tidy
The strerror() calls in test-errno-util.c are intentional so silence
clang-tidy there.
2026-03-20 23:31:51 +01:00