New upstream version 247

This commit is contained in:
Michael Biebl 2020-11-26 19:12:12 +01:00
parent a032b68d06
commit 9e294e288c
124 changed files with 9193 additions and 6584 deletions

View File

@ -118,6 +118,7 @@ PenaltyBreakString: 0
PenaltyExcessCharacter: 10 PenaltyExcessCharacter: 10
PenaltyReturnTypeOnItsOwnLine: 100 PenaltyReturnTypeOnItsOwnLine: 100
SpaceAfterCStyleCast: true SpaceAfterCStyleCast: true
SpaceBeforeParens: ControlStatementsExceptForEachMacros
SpacesInAngles: true SpacesInAngles: true
TabWidth: 8 TabWidth: 8
UseCRLF: false UseCRLF: false

View File

@ -103,7 +103,7 @@ for args in "${ARGS[@]}"; do
SECONDS=0 SECONDS=0
info "Checking build with $args" info "Checking build with $args"
if ! AR="$AR" CC="$CC" CXX="$CXX" CFLAGS="-Werror" CXXFLAGS="-Werror" meson -Dtests=unsafe -Dslow-tests=true --werror $args build; then if ! AR="$AR" CC="$CC" CXX="$CXX" CFLAGS="-Werror" CXXFLAGS="-Werror" meson -Dtests=unsafe -Dslow-tests=true -Dfuzz-tests=true --werror $args build; then
fatal "meson failed with $args" fatal "meson failed with $args"
fi fi

View File

@ -5,7 +5,7 @@
[Distribution] [Distribution]
Distribution=fedora Distribution=fedora
Release=32 Release=33
[Output] [Output]
Format=gpt_ext4 Format=gpt_ext4
@ -58,6 +58,8 @@ BuildPackages=
p11-kit-devel p11-kit-devel
pam-devel pam-devel
pcre2-devel pcre2-devel
perl(IPC::SysV)
perl(Time::HiRes)
pkgconfig pkgconfig
python3-devel python3-devel
python3-lxml python3-lxml

141
NEWS
View File

@ -1,8 +1,8 @@
systemd System and Service Manager systemd System and Service Manager
CHANGES WITH 247 in spe: CHANGES WITH 247:
* KERNEL API INCOMPATIBILITY: Linux 4.12 introduced two new uevents * KERNEL API INCOMPATIBILITY: Linux 4.14 introduced two new uevents
"bind" and "unbind" to the Linux device model. When this kernel "bind" and "unbind" to the Linux device model. When this kernel
change was made, systemd-udevd was only minimally updated to handle change was made, systemd-udevd was only minimally updated to handle
and propagate these new event types. The introduction of these new and propagate these new event types. The introduction of these new
@ -86,6 +86,33 @@ CHANGES WITH 247 in spe:
this is not caused by systemd/udev changes, but result of a kernel this is not caused by systemd/udev changes, but result of a kernel
behaviour change. behaviour change.
* UPCOMING INCOMPATIBILITY: So far most downstream distribution
packages have not retriggered devices once the udev package (or any
auxiliary package installing additional udev rules) is updated. We
intend to work with major distributions to change this, so that
"udevadm trigger -a change" is issued on such upgrades, ensuring that
the updated ruleset is applied to the devices already discovered, so
that (asynchronously) after the upgrade completed the udev database
is consistent with the updated rule set. This means udev rules must
be ready to be retriggered with a "change" action any time, and
result in correct and complete udev database entries. While the
majority of udev rule files known to us currently get this right,
some don't. Specifically, there are udev rules files included in
various packages that only set udev properties on the "add" action,
but do not handle the "change" action. If a device matching those
rules is retriggered with the "change" action (as is intended here)
it would suddenly lose the relevant properties. This always has been
problematic, but as soon as all udev devices are triggered on relevant
package upgrades this will become particularly so. It is strongly
recommended to fix offending rules so that they can handle a "change"
action at any time, and acquire all necessary udev properties even
then. Or in other words: the header guard mentioned above
(ACTION=="remove",GOTO="xyz_end") is the correct approach to handle
this, as it makes sure rules are rerun on "change" correctly, and
accumulate the correct and complete set of udev properties. udev rule
definitions that cannot handle "change" events being triggered at
arbitrary times should be considered buggy.
* The MountAPIVFS= service file setting now defaults to on if * The MountAPIVFS= service file setting now defaults to on if
RootImage= and RootDirectory= are used, which means that with those RootImage= and RootDirectory= are used, which means that with those
two settings /proc/, /sys/ and /dev/ are automatically properly set two settings /proc/, /sys/ and /dev/ are automatically properly set
@ -457,20 +484,32 @@ CHANGES WITH 247 in spe:
discipline in the [FlowQueuePIE] sections. discipline in the [FlowQueuePIE] sections.
* systemd-networkd's .netdev files may now be used to create "BareUDP" * systemd-networkd's .netdev files may now be used to create "BareUDP"
tunnels, configured in the new [BareUDP] setting. VXLAN tunnels may tunnels, configured in the new [BareUDP] setting.
now be marked to be independent of any underlying network interface
via the new Independent= boolean setting.
* systemd-networkd's Gateway= setting in .network files now accepts the * systemd-networkd's Gateway= setting in .network files now accepts the
special values _dhcp4 and _ipv6ra to configure additional, locally special values "_dhcp4" and "_ipv6ra" to configure additional,
defined, explicit routes to the gateway acquired via DHCP or IPv6 locally defined, explicit routes to the gateway acquired via DHCP or
Router Advertisements. IPv6 Router Advertisements. The old setting "_dhcp" is deprecated,
but still accepted for backwards compatibility.
* systemd-networkd's [IPv6PrefixDelegation] section and * systemd-networkd's [IPv6PrefixDelegation] section and
IPv6PrefixDelegation= options have been renamed as [IPv6SendRA] and IPv6PrefixDelegation= options have been renamed as [IPv6SendRA] and
IPv6SendRA= (the old names are still accepted for backwards IPv6SendRA= (the old names are still accepted for backwards
compatibility). compatibility).
* systemd-networkd's .network files gained the DHCPv6PrefixDelegation=
boolean setting in [Network] section. If enabled, the delegated prefix
gained by another link will be configured, and an address within the
prefix will be assigned.
* systemd-networkd's .network files gained the Announce= boolean setting
in [DHCPv6PrefixDelegation] section. When enabled, the delegated
prefix will be announced through IPv6 router advertisement (IPv6 RA).
The setting is enabled by default.
* VXLAN tunnels may now be marked as independent of any underlying
network interface via the new Independent= boolean setting.
* systemctl gained support for two new verbs: "service-log-level" and * systemctl gained support for two new verbs: "service-log-level" and
"service-log-target" may be used on services that implement the "service-log-target" may be used on services that implement the
generic org.freedesktop.LogControl1 D-Bus interface to dynamically generic org.freedesktop.LogControl1 D-Bus interface to dynamically
@ -481,8 +520,8 @@ CHANGES WITH 247 in spe:
* The SystemCallErrorNumber= unit file setting now accepts the new * The SystemCallErrorNumber= unit file setting now accepts the new
"kill" and "log" actions, in addition to arbitrary error number "kill" and "log" actions, in addition to arbitrary error number
specifications as before. If "kill" the the processes are killed on specifications as before. If "kill" the processes are killed on the
the event, if "log" the offending system call is audit logged. event, if "log" the offending system call is audit logged.
* A new SystemCallLog= unit file setting has been added that accepts a * A new SystemCallLog= unit file setting has been added that accepts a
list of system calls that shall be logged about (audit). list of system calls that shall be logged about (audit).
@ -530,13 +569,15 @@ CHANGES WITH 247 in spe:
contention for selected parts of the unit hierarchy using the PSI contention for selected parts of the unit hierarchy using the PSI
information reported by the kernel, and kills processes when memory information reported by the kernel, and kills processes when memory
or swap pressure is above configured limits. This service is only or swap pressure is above configured limits. This service is only
enabled in developer mode (see below) and should be considered a enabled by default in developer mode (see below) and should be
preview in this release. Behaviour details and option names are considered a preview in this release. Behaviour details and option
subject to change without the usual backwards-compatibility promises. names are subject to change without the usual backwards-compatibility
promises.
* A new helper oomctl has been added to introspect systemd-oomd state. * A new helper oomctl has been added to introspect systemd-oomd state.
If also is only available in developer mode and should be considered It is only enabled by default in developer mode and should be
a preview without the usual backwards-compatibility promises. considered a preview without the usual backwards-compatibility
promises.
* New meson option -Dcompat-mutable-uid-boundaries= has been added. If * New meson option -Dcompat-mutable-uid-boundaries= has been added. If
enabled, systemd reads the system UID boundaries from /etc/login.defs enabled, systemd reads the system UID boundaries from /etc/login.defs
@ -598,39 +639,53 @@ CHANGES WITH 247 in spe:
* "systemctl edit" has been updated to show the original effective unit * "systemctl edit" has been updated to show the original effective unit
contents in commented form in the text editor. contents in commented form in the text editor.
* Units in user mode are now segregated into three new slices:
session.slice (units that form the core of graphical session),
app.slice ("normal" user applications), and background.slice
(low-priority tasks). Unless otherwise configured, user units are
placed in app.slice. The plan is to add resource limits and
protections for the different slices in the future.
* New GPT partition types for RISCV32/64 for the root and /usr
partitions, and their associated Verity partitions have been defined,
and are now understood by systemd-gpt-auto-generator, and the OS
image dissection logic.
Contributions from: Adolfo Jayme Barrientos, afg, Alec Moskvin, Alyssa Contributions from: Adolfo Jayme Barrientos, afg, Alec Moskvin, Alyssa
Ross, Amitanand Chikorde, Andrew Hangsleben, Anita Zhang, Ansgar Ross, Amitanand Chikorde, Andrew Hangsleben, Anita Zhang, Ansgar
Burchardt, Arian van Putten, Aurelien Jarno, Axel Rasmussen, bauen1, Burchardt, Arian van Putten, Aurelien Jarno, Axel Rasmussen, bauen1,
Beniamino Galvani, Benjamin Berg, Bjørn Mork, brainrom, Chandradeep Beniamino Galvani, Benjamin Berg, Bjørn Mork, brainrom, Chandradeep
Dey, Charles Lee, Chris Down, Christian Göttsche, Clemens Gruber, Daan Dey, Charles Lee, Chris Down, Christian Göttsche, Christof Efkemann,
De Meyer, Daniele Medri, Daniel Mack, Daniel Rusek, Dan Streetman, Christoph Ruegge, Clemens Gruber, Daan De Meyer, Daniele Medri, Daniel
David Tardon, Dimitri John Ledkov, Dmitry Borodaenko, Elias Probst, Mack, Daniel Rusek, Dan Streetman, David Tardon, Dimitri John Ledkov,
Elisei Roca, ErrantSpore, Etienne Doms, Fabrice Fontaine, fangxiuning, Dmitry Borodaenko, Elias Probst, Elisei Roca, ErrantSpore, Etienne
Felix Riemann, Florian Klink, Franck Bui, Frantisek Sumsal, fwSmit, Doms, Fabrice Fontaine, fangxiuning, Felix Riemann, Florian Klink,
George Rawlinson, germanztz, Gibeom Gwon, Glen Whitney, Gogo Gogsi, Franck Bui, Frantisek Sumsal, fwSmit, George Rawlinson, germanztz,
Göran Uddeborg, Grant Mathews, Hans de Goede, Hans Ulrich Niedermann, Gibeom Gwon, Glen Whitney, Gogo Gogsi, Göran Uddeborg, Grant Mathews,
Haochen Tong, Harald Seiler, huangyong, Hubert Kario, Ikey Doherty, Jan Hans de Goede, Hans Ulrich Niedermann, Haochen Tong, Harald Seiler,
Chren, Jan Schlüter, Jérémy Nouhaud, Jian-Hong Pan, Joerg Behrmann, huangyong, Hubert Kario, igo95862, Ikey Doherty, Insun Pyo, Jan Chren,
Jonathan Lebon, Josh Brobst, Juergen Hoetzel, Julien Humbert, Kai-Chuan Jan Schlüter, Jérémy Nouhaud, Jian-Hong Pan, Joerg Behrmann, Jonathan
Hsieh, Kairui Song, Kamil Dudka, Kir Kolyshkin, Kristijan Gjoshev, Kyle Lebon, Jörg Thalheim, Josh Brobst, Juergen Hoetzel, Julien Humbert,
Huey, Kyle Russell, Lennart Poettering, lichangze, Luca Boccassi, Lucas Kai-Chuan Hsieh, Kairui Song, Kamil Dudka, Kir Kolyshkin, Kristijan
Werkmeister, Luca Weiss, Marc Kleine-Budde, Marco Wang, Martin Wilck, Gjoshev, Kyle Huey, Kyle Russell, Lee Whalen, Lennart Poettering,
Marti Raudsepp, masmullin2000, Máté Pozsgay, Matt Fenwick, Michael lichangze, Luca Boccassi, Lucas Werkmeister, Luca Weiss, Marc
Biebl, Michael Scherer, Michal Koutný, Michal Sekletár, Michal Kleine-Budde, Marco Wang, Martin Wilck, Marti Raudsepp, masmullin2000,
Suchanek, Mikael Szreder, Milo Casagrande, mirabilos, Mitsuha_QuQ, Máté Pozsgay, Matt Fenwick, Michael Biebl, Michael Scherer, Michal
mog422, Muhammet Kara, Nazar Vinnichuk, Nicholas Narsing, Nicolas Koutný, Michal Sekletár, Michal Suchanek, Mikael Szreder, Milo
Fella, Njibhu, nl6720, Oğuz Ersen, Olivier Le Moal, Ondrej Kozina, Casagrande, mirabilos, Mitsuha_QuQ, mog422, Muhammet Kara, Nazar
onlybugreports, Pass Automated Testing Suite, Pat Coulthard, Pedro Vinnichuk, Nicholas Narsing, Nicolas Fella, Njibhu, nl6720, Oğuz Ersen,
Ruiz, Peter Hutterer, Phaedrus Leeds, PhoenixDiscord, Piotr Drąg, Plan Olivier Le Moal, Ondrej Kozina, onlybugreports, Pass Automated Testing
C, Purushottam choudhary, Rasmus Villemoes, Renaud Métrich, Robert Suite, Pat Coulthard, Pavel Sapezhko, Pedro Ruiz, perry_yuan, Peter
Marko, Ronan Pigott, Roy Chen (陳彥廷), RussianNeuroMancer, Samanta Hutterer, Phaedrus Leeds, PhoenixDiscord, Piotr Drąg, Plan C,
Navarro, Samuel BF, scootergrisen, Sorin Ionescu, Steve Dodd, Susant Purushottam choudhary, Rasmus Villemoes, Renaud Métrich, Robert Marko,
Sahani, Timo Rothenpieler, Tobias Hunger, Tobias Kaufmann, Topi Roman Beranek, Ronan Pigott, Roy Chen (陳彥廷), RussianNeuroMancer,
Miettinen, Vito Caputo, Weblate, Wen Yang, williamvds, Yu, Li-Yu, Yuri Samanta Navarro, Samuel BF, scootergrisen, Sorin Ionescu, Steve Dodd,
Chornoivan, Yu Watanabe, Zbigniew Jędrzejewski-Szmek, Zmicer Turok, Susant Sahani, Timo Rothenpieler, Tobias Hunger, Tobias Kaufmann, Topi
Дамјан Георгиевски Miettinen, vanou, Vito Caputo, Weblate, Wen Yang, Whired Planck,
williamvds, Yu, Li-Yu, Yuri Chornoivan, Yu Watanabe, Zbigniew
Jędrzejewski-Szmek, Zmicer Turok, Дамјан Георгиевски
Warsaw, 2020-11-10 Warsaw, 2020-11-26
CHANGES WITH 246: CHANGES WITH 246:

14
TODO
View File

@ -20,6 +20,18 @@ Janitorial Clean-ups:
Features: Features:
* cryptsetup: optionally, when run during boot-up and password is never
entered, and we are on AC power (or so), power off machine again
* when configuring loopback netif, and it fails due to EPERM, eat up error if
it happens to be set up alright already.
* at boot: check if battery above some threshold, if not power off again after explanation
* userdb: add field for ambient caps, so that a user can have CAP_WAKE_ALARM
for example. And add code that resets ambient caps for all services by
default.
* homed: try to unmount in regular intervals when home dir was busy when we * homed: try to unmount in regular intervals when home dir was busy when we
tried because idle. tried because idle.
@ -634,7 +646,7 @@ Features:
parameters parameters
* maybe hook of xfs/ext4 quotactl() with services? i.e. automatically manage * maybe hook of xfs/ext4 quotactl() with services? i.e. automatically manage
the quota of a the user indicated in User= via unit file settings, like the the quota of the user indicated in User= via unit file settings, like the
other resource management concepts. Would mix nicely with DynamicUser=1. Or other resource management concepts. Would mix nicely with DynamicUser=1. Or
alternatively, do this with projids, so that we can also cover services alternatively, do this with projids, so that we can also cover services
running as root. Quota should probably cover all the special dirs such as running as root. Quota should probably cover all the special dirs such as

View File

@ -30,3 +30,12 @@ expression e;
+ return + return
log_LEVEL_errno(e, ...); log_LEVEL_errno(e, ...);
- return -e; - return -e;
@@
identifier log_LEVEL_errno =~ "^log_(debug|info|notice|warning|error|emergency)_errno$";
expression list args;
expression e;
local idexpression r;
@@
- log_LEVEL_errno(e, args);
- r = e;
+ r = log_LEVEL_errno(e, args);

View File

@ -44,5 +44,5 @@ identifier log_LEVEL_errno =~ "^log_(debug|info|notice|warning|error|emergency)_
identifier ERRNO =~ "^E[A-Z]+$"; identifier ERRNO =~ "^E[A-Z]+$";
expression list args; expression list args;
@@ @@
- return log_LEVEL_errno(ERRNO, args); - log_LEVEL_errno(ERRNO, args);
+ return log_LEVEL_errno(SYNTHETIC_ERRNO(ERRNO), args); + log_LEVEL_errno(SYNTHETIC_ERRNO(ERRNO), args);

View File

@ -77,7 +77,7 @@ manager, please consider supporting the following interfaces.
container instance) or creating one scope unit for each container instance container instance) or creating one scope unit for each container instance
via systemd's transient unit API (in case you have one container manager via systemd's transient unit API (in case you have one container manager
that manages all instances. Either way, make sure to set `Delegate=yes` in that manages all instances. Either way, make sure to set `Delegate=yes` in
it. This ensures that that the unit you created will be part of all cgroup it. This ensures that the unit you created will be part of all cgroup
controllers (or at least the ones systemd understands). The latter may also controllers (or at least the ones systemd understands). The latter may also
be done via `systemd-machined`'s `CreateMachine()` API. Make sure to use the be done via `systemd-machined`'s `CreateMachine()` API. Make sure to use the
cgroup path systemd put your process in for all operations of the container. cgroup path systemd put your process in for all operations of the container.
@ -364,7 +364,7 @@ If you write software that wants to detect whether it is run in a container,
please check `/proc/1/environ` and look for the `container=` environment please check `/proc/1/environ` and look for the `container=` environment
variable. Do not assume the environment variable is inherited down the process variable. Do not assume the environment variable is inherited down the process
tree. It generally is not. Hence check the environment block of PID 1, not your tree. It generally is not. Hence check the environment block of PID 1, not your
own. Note though that that file is only accessible to root. systemd hence early own. Note though that this file is only accessible to root. systemd hence early
on also copies the value into `/run/systemd/container`, which is readable for on also copies the value into `/run/systemd/container`, which is readable for
everybody. However, that's a systemd-specific interface and other init systems everybody. However, that's a systemd-specific interface and other init systems
are unlikely to do the same. are unlikely to do the same.

View File

@ -46,21 +46,29 @@ Interface](https://systemd.io/BOOT_LOADER_INTERFACE).
| `69dad710-2ce4-4e3c-b16c-21a1d49abed3` | _Root Partition (32-bit ARM)_ | ditto | ditto | | `69dad710-2ce4-4e3c-b16c-21a1d49abed3` | _Root Partition (32-bit ARM)_ | ditto | ditto |
| `b921b045-1df0-41c3-af44-4c6f280d3fae` | _Root Partition (64-bit ARM/AArch64)_ | ditto | ditto | | `b921b045-1df0-41c3-af44-4c6f280d3fae` | _Root Partition (64-bit ARM/AArch64)_ | ditto | ditto |
| `993d8d3d-f80e-4225-855a-9daf8ed7ea97` | _Root Partition (Itanium/IA-64)_ | ditto | ditto | | `993d8d3d-f80e-4225-855a-9daf8ed7ea97` | _Root Partition (Itanium/IA-64)_ | ditto | ditto |
| `60d5a7fe-8e7d-435c-b714-3dd8162144e1` | _Root Partition (RISC-V 32-bit)_ | ditto | ditto |
| `72ec70a6-cf74-40e6-bd49-4bda08e8f224` | _Root Partition (RISC-V 64-bit)_ | ditto | ditto |
| `d13c5d3b-b5d1-422a-b29f-9454fdc89d76` | _Root Verity Partition (x86)_ | A dm-verity superblock followed by hash data | On systems with matching architecture, contains dm-verity integrity hash data for the matching root partition. If this feature is used the partition UUID of the root partition should be the first 128bit of the root hash of the dm-verity hash data, and the partition UUID of this dm-verity partition should be the final 128bit of it, so that the root partition and its verity partition can be discovered easily, simply by specifying the root hash. | | `d13c5d3b-b5d1-422a-b29f-9454fdc89d76` | _Root Verity Partition (x86)_ | A dm-verity superblock followed by hash data | On systems with matching architecture, contains dm-verity integrity hash data for the matching root partition. If this feature is used the partition UUID of the root partition should be the first 128bit of the root hash of the dm-verity hash data, and the partition UUID of this dm-verity partition should be the final 128bit of it, so that the root partition and its verity partition can be discovered easily, simply by specifying the root hash. |
| `2c7357ed-ebd2-46d9-aec1-23d437ec2bf5` | _Root Verity Partition (x86-64)_ | ditto | ditto | | `2c7357ed-ebd2-46d9-aec1-23d437ec2bf5` | _Root Verity Partition (x86-64)_ | ditto | ditto |
| `7386cdf2-203c-47a9-a498-f2ecce45a2d6` | _Root Verity Partition (32-bit ARM)_ | ditto | ditto | | `7386cdf2-203c-47a9-a498-f2ecce45a2d6` | _Root Verity Partition (32-bit ARM)_ | ditto | ditto |
| `df3300ce-d69f-4c92-978c-9bfb0f38d820` | _Root Verity Partition (64-bit ARM/AArch64)_ | ditto | ditto | | `df3300ce-d69f-4c92-978c-9bfb0f38d820` | _Root Verity Partition (64-bit ARM/AArch64)_ | ditto | ditto |
| `86ed10d5-b607-45bb-8957-d350f23d0571` | _Root Verity Partition (Itanium/IA-64)_ | ditto | ditto | | `86ed10d5-b607-45bb-8957-d350f23d0571` | _Root Verity Partition (Itanium/IA-64)_ | ditto | ditto |
| `ae0253be-1167-4007-ac68-43926c14c5de` | _Root Verity Partition (RISC-V 32-bit)_ | ditto | ditto |
| `b6ed5582-440b-4209-b8da-5ff7c419ea3d` | _Root Verity Partition (RISC-V 64-bit)_ | ditto | ditto |
| `75250d76-8cc6-458e-bd66-bd47cc81a812` | _`/usr/` Partition (x86)_ | Any native, optionally in LUKS | Similar semantics to root partition, but just the `/usr/` partition. | | `75250d76-8cc6-458e-bd66-bd47cc81a812` | _`/usr/` Partition (x86)_ | Any native, optionally in LUKS | Similar semantics to root partition, but just the `/usr/` partition. |
| `8484680c-9521-48c6-9c11-b0720656f69e` | _`/usr/` Partition (x86-64)_ | ditto | ditto | | `8484680c-9521-48c6-9c11-b0720656f69e` | _`/usr/` Partition (x86-64)_ | ditto | ditto |
| `7d0359a3-02b3-4f0a-865c-654403e70625` | _`/usr/` Partition (32-bit ARM)_ | ditto | ditto | | `7d0359a3-02b3-4f0a-865c-654403e70625` | _`/usr/` Partition (32-bit ARM)_ | ditto | ditto |
| `b0e01050-ee5f-4390-949a-9101b17104e9` | _`/usr/` Partition (64-bit ARM/AArch64)_ | ditto | ditto | | `b0e01050-ee5f-4390-949a-9101b17104e9` | _`/usr/` Partition (64-bit ARM/AArch64)_ | ditto | ditto |
| `4301d2a6-4e3b-4b2a-bb94-9e0b2c4225ea` | _`/usr/` Partition (Itanium/IA-64)_ | ditto | ditto | | `4301d2a6-4e3b-4b2a-bb94-9e0b2c4225ea` | _`/usr/` Partition (Itanium/IA-64)_ | ditto | ditto |
| `b933fb22-5c3f-4f91-af90-e2bb0fa50702` | _`/usr/` Partition (RISC-V 32-bit)_ | ditto | ditto |
| `beaec34b-8442-439b-a40b-984381ed097d` | _`/usr/` Partition (RISC-V 64-bit)_ | ditto | ditto |
| `8f461b0d-14ee-4e81-9aa9-049b6fb97abd` | _`/usr/` Verity Partition (x86)_ | Any native, optionally in LUKS | Similar semantics to root Verity partition, but just for the `/usr/` partition. | | `8f461b0d-14ee-4e81-9aa9-049b6fb97abd` | _`/usr/` Verity Partition (x86)_ | Any native, optionally in LUKS | Similar semantics to root Verity partition, but just for the `/usr/` partition. |
| `77ff5f63-e7b6-4633-acf4-1565b864c0e6` | _`/usr/` Verity Partition (x86-64)_ | ditto | ditto | | `77ff5f63-e7b6-4633-acf4-1565b864c0e6` | _`/usr/` Verity Partition (x86-64)_ | ditto | ditto |
| `c215d751-7bcd-4649-be90-6627490a4c05` | _`/usr/` Verity Partition (32-bit ARM)_ | ditto | ditto | | `c215d751-7bcd-4649-be90-6627490a4c05` | _`/usr/` Verity Partition (32-bit ARM)_ | ditto | ditto |
| `6e11a4e7-fbca-4ded-b9e9-e1a512bb664e` | _`/usr/` Verity Partition (64-bit ARM/AArch64)_ | ditto | ditto | | `6e11a4e7-fbca-4ded-b9e9-e1a512bb664e` | _`/usr/` Verity Partition (64-bit ARM/AArch64)_ | ditto | ditto |
| `6a491e03-3be7-4545-8e38-83320e0ea880` | _`/usr/` Verity Partition (Itanium/IA-64)_ | ditto | ditto | | `6a491e03-3be7-4545-8e38-83320e0ea880` | _`/usr/` Verity Partition (Itanium/IA-64)_ | ditto | ditto |
| `cb1ee4e3-8cd0-4136-a0a4-aa61a32e8730` | _`/usr/` Verity Partition (RISC-V 32-bit)_ | ditto | ditto |
| `8f1056be-9b05-47c4-81d6-be53128e5b54` | _`/usr/` Verity Partition (RISC-V 64-bit)_ | ditto | ditto |
| `933ac7e1-2eb4-4f13-b844-0e14e2aef915` | _Home Partition_ | Any native, optionally in LUKS | The first partition with this type UUID on the disk containing the root partition is automatically mounted to `/home/`. If the partition is encrypted with LUKS, the device mapper file will be named `/dev/mapper/home`. | | `933ac7e1-2eb4-4f13-b844-0e14e2aef915` | _Home Partition_ | Any native, optionally in LUKS | The first partition with this type UUID on the disk containing the root partition is automatically mounted to `/home/`. If the partition is encrypted with LUKS, the device mapper file will be named `/dev/mapper/home`. |
| `3b8f8425-20e0-4f3b-907f-1a25a76f98e8` | _Server Data Partition_ | Any native, optionally in LUKS | The first partition with this type UUID on the disk containing the root partition is automatically mounted to `/srv/`. If the partition is encrypted with LUKS, the device mapper file will be named `/dev/mapper/srv`. | | `3b8f8425-20e0-4f3b-907f-1a25a76f98e8` | _Server Data Partition_ | Any native, optionally in LUKS | The first partition with this type UUID on the disk containing the root partition is automatically mounted to `/srv/`. If the partition is encrypted with LUKS, the device mapper file will be named `/dev/mapper/srv`. |
| `4d21b016-b534-45c2-a9fb-5c16e091fd2d` | _Variable Data Partition_ | Any native, optionally in LUKS | The first partition with this type UUID on the disk containing the root partition is automatically mounted to `/var/` — under the condition that its partition UUID matches the first 128 bit of `HMAC-SHA256(machine-id, 0x4d21b016b53445c2a9fb5c16e091fd2d)` (i.e. the SHA256 HMAC hash of the binary type UUID keyed by the machine ID as read from [`/etc/machine-id`](https://www.freedesktop.org/software/systemd/man/machine-id.html). This special requirement is made because `/var/` (unlike the other partition types listed here) is inherently private to a specific installation and cannot possibly be shared between multiple OS installations on the same disk, and thus should be bound to a specific instance of the OS, identified by its machine ID. If the partition is encrypted with LUKS, the device mapper file will be named `/dev/mapper/var`. | | `4d21b016-b534-45c2-a9fb-5c16e091fd2d` | _Variable Data Partition_ | Any native, optionally in LUKS | The first partition with this type UUID on the disk containing the root partition is automatically mounted to `/var/` — under the condition that its partition UUID matches the first 128 bit of `HMAC-SHA256(machine-id, 0x4d21b016b53445c2a9fb5c16e091fd2d)` (i.e. the SHA256 HMAC hash of the binary type UUID keyed by the machine ID as read from [`/etc/machine-id`](https://www.freedesktop.org/software/systemd/man/machine-id.html). This special requirement is made because `/var/` (unlike the other partition types listed here) is inherently private to a specific installation and cannot possibly be shared between multiple OS installations on the same disk, and thus should be bound to a specific instance of the OS, identified by its machine ID. If the partition is encrypted with LUKS, the device mapper file will be named `/dev/mapper/var`. |

View File

@ -517,7 +517,7 @@ _packed_ struct HashTableObject {
``` ```
The structure of both DATA_HASH_TABLE and FIELD_HASH_TABLE objects are The structure of both DATA_HASH_TABLE and FIELD_HASH_TABLE objects are
identical. They implement a simple hash table, which each cell containing identical. They implement a simple hash table, with each cell containing
offsets to the head and tail of the singly linked list of the DATA and FIELD offsets to the head and tail of the singly linked list of the DATA and FIELD
objects, respectively. DATA's and FIELD's next_hash_offset field are used to objects, respectively. DATA's and FIELD's next_hash_offset field are used to
chain up the objects. Empty cells have both offsets set to 0. chain up the objects. Empty cells have both offsets set to 0.
@ -651,15 +651,15 @@ look up the FIELD object and follow the chain of links to all DATA it includes.
### Writing ### Writing
When an entry is appended to the journal for each of its data fields the data When an entry is appended to the journal, for each of its data fields the data
hash table should be checked. If the data field does not yet exist in the file hash table should be checked. If the data field does not yet exist in the file,
it should be appended and added to the data hash table. When a field data it should be appended and added to the data hash table. When a data field's data
object is added the field hash table should be checked for the field name of object is added, the field hash table should be checked for the field name of
the data field, and a field object be added if necessary. After all data fields the data field, and a field object be added if necessary. After all data fields
(and recursively all field names) of the new entry are appended and linked up (and recursively all field names) of the new entry are appended and linked up
in the hashtables the entry object should be appended and linked up too. in the hashtables, the entry object should be appended and linked up too.
In regular intervals a tag object should be written if sealing is enabled (see At regular intervals a tag object should be written if sealing is enabled (see
above). Before the file is closed a tag should be written too, to seal it off. above). Before the file is closed a tag should be written too, to seal it off.
Before writing an object, time and disk space limits should be checked and Before writing an object, time and disk space limits should be checked and

View File

@ -9,14 +9,14 @@ layout: default
1. Add all items to NEWS 1. Add all items to NEWS
2. Update the contributors list in NEWS (`ninja -C build git-contrib`) 2. Update the contributors list in NEWS (`ninja -C build git-contrib`)
3. Update the time and place in NEWS 3. Update the time and place in NEWS
4. Update version and library numbers in `meson.build` 4. [RC1] Update version and library numbers in `meson.build`
5. Check dbus docs with `ninja -C build man/update-dbus-docs` 5. Check dbus docs with `ninja -C build man/update-dbus-docs`
6. Tag the release: `version=vXXX-rcY && git tag -s "${version}" -m "systemd ${version}"` 6. Tag the release: `version=vXXX-rcY && git tag -s "${version}" -m "systemd ${version}"`
7. Do `ninja -C build` 7. Do `ninja -C build`
8. Make sure that the version string and package string match: `build/systemctl --version` 8. Make sure that the version string and package string match: `build/systemctl --version`
9. Upload the documentation: `ninja -C build doc-sync` 9. Upload the documentation: `ninja -C build doc-sync`
10. [After final release] Close the github milestone and open a new one (https://github.com/systemd/systemd/milestones) 10. [FINAL] Close the github milestone and open a new one (https://github.com/systemd/systemd/milestones)
11. "Draft" a new release on github (https://github.com/systemd/systemd/releases/new), mark "This is a pre-release" if appropriate. 11. "Draft" a new release on github (https://github.com/systemd/systemd/releases/new), mark "This is a pre-release" if appropriate.
12. Check that announcement to systemd-devel, with a copy&paste from NEWS, was sent. This should happen automatically. 12. Check that announcement to systemd-devel, with a copy&paste from NEWS, was sent. This should happen automatically.
13. Update IRC topic (`/msg chanserv TOPIC #systemd Version NNN released`) 13. Update IRC topic (`/msg chanserv TOPIC #systemd Version NNN released`)
14. [After final release] Also push commits to stable, create an empty -stable branch: `git push systemd-stable origin/master:master origin/master:refs/heads/${version}-stable`, and change the default branch to latest release (https://github.com/systemd/systemd-stable/settings/branches). 14. [FINAL] Push commits to stable, create an empty -stable branch: `git push systemd-stable origin/master:master origin/master:refs/heads/${version}-stable`, and change the default branch to latest release (https://github.com/systemd/systemd-stable/settings/branches).

267
docs/RESOLVED-VPNS.md Normal file
View File

@ -0,0 +1,267 @@
---
title: systemd-resolved and VPNs
category: Networking
layout: default
---
# `systemd-resolved.service` and VPNs
`systemd-resolved.service` supports routing lookups for specific domains to specific
interfaces. This is useful for hooking up VPN software with systemd-resolved
and making sure the exact right lookups end up on the VPN and on the other
interfaces.
For a verbose explanation of `systemd-resolved.service`'s domain routing logic,
see its [man
page](https://www.freedesktop.org/software/systemd/man/systemd-resolved.service.html). This
document is supposed to provide examples to use the concepts for the specific
purpose of managing VPN DNS configuration.
Let's first define two distinct VPN use-cases:
1. *Corporate* VPNs, i.e. VPNs that open access to a specific set of additional
hosts. Only specific domains should be resolved via the VPN's DNS servers,
and everything that is not related to the company's domain names should go
to regular, non-VPN DNS instead.
2. *Privacy* VPNs, i.e. VPNs that should be used for basically all DNS traffic,
once they are up. If this type of VPN is used, any regular, non-VPN DNS
servers should not get any traffic anymore.
Then, let's briefly introduce three DNS routing concepts that software managing
a network interface may configure.
1. Search domains: these are traditional DNS configuration parameters and are
used to suffix non-qualified domain names (i.e. single-label ones), to turn
them into fully qualified domain names. Traditionally (before
`systemd-resolved.service`), search domain names are attached to a system's
IP configuration as a whole, in `systemd-resolved.service` they are
associated to individual interfaces instead, since they are typically
acquired through some network associated concept, such as a DHCP, IPv6RA or
PPP lease. Most importantly though: in `systemd-resolved.service` they are
not just used to suffix single-label domain names, but also for routing
domain name lookups: if a network interface has a search domain `foo.com`
configured on it, then any lookups for names ending in `.foo.com` (or for
`foo.com` itself) are preferably routed to the DNS servers configured on the
same network interface.
2. Routing domains: these are very similar to search domains, but are purely
about DNS domain name lookup routing — they are not used for qualifying
single-label domain names. When it comes to routing assigning a routing
domain to a network interface is identical to assigning a search domain to
it.
Why the need to have both concepts, i.e. search *and* routing domains?
Mostly because in many cases the qualifying of single-label names is not
desirable (since security-sensitive), but needs to be supported for specific
use-cases. Routing domains are a concept `systemd-resolved.service`
introduced, while search domains are traditionally available and are part of
DHCP/IPv6RA/PPP leases and thus universally supported. In many cases routing
domains are probably the more appropriate concept, but not easily available,
since not part of DHCP/IPv6RA/PPP.
Routing domains for `systemd-resolved.service` are usually presented along
with search domains in mostly the same way, but prefixed with `~` to
differentiate them. i.e. `~foo.com` is a configured routing domain, while
`foo.com` would be a configured search domain.
One routing domain is particular interesting: `~.` — the catch-all routing
domain. (The *dot* domain `.` is how DNS denotes the "root" domain, i.e. the
parent domain of all domains, but itself.) When used on an interface any DNS
traffic is preferably routed to its DNS servers. (A search domain i.e. `.`
instead of `~.` — would have the same effect, but given that it's mostly
pointless to suffix an unqualified domain with `.`, we generally declare it
as a routing domain, not a search domain).
Routing domains also have particular relevance when it comes to the reverse
lookup DNS domains `.in-addr.arpa` and `.ip6.arpa`. An interface that has
these (or sub-domains thereof) defined as routing domains, will be preferably
used for doing reverse IP to domain name lookups. e.g. declaring
`~168.192.in-addr.arpa` on an interface means that all lookups to find the
domain names for IPv4 addresses 192.168.x.y are preferable routed to it.
3. The `default-route` boolean. This is a simple boolean value that may be set
on an interface. If true (the default), any DNS lookups for which no
matching routing or search domains are defined are routed to interfaces
marked like this. If false then the DNS servers on this interface are not
considered for routing lookups to except for the ones listed in the
search/routing domain list. An interface that has no search/routing domain
associated and also has this boolean off is not considered for *any*
lookups.
One more thing to mention: in `systemd-resolved.service` if lookups match the
search/routing domains of multiple interfaces at once, then they are sent to
all of them in parallel, and the first positive reply used. If all lookups fail
the last negative reply is used. This means the DNS zones on the relevant
interfaces are "merged": domains existing on one but not the other will "just
work" and vice versa.
And one more note: the domain routing logic implemented is a tiny bit more
complex that what described above: if there two interfaces have search domains
that are suffix of each other, and a name is looked up that matches both, the
interface with the longer match will win and get the lookup routed to is DNS
servers. Only if the match has the same length, then both will be used in
parallel. Example: one interface has `~foo.example.com` as routing domain, and
another one `example.com` has search domain. A lookup for
`waldo.foo.example.com` is the exclusively routed to the first interface's DNS
server, since it matches by three suffix labels instead of just two. The fact
that the matching length is taken into consideration for the routing decision
is particularly relevant if you have one interface with the `~.` routing domain
and another one with `~corp.company.example` — both suffixes match a lookup for
`foo.corp.company.example`, but the latter interface wins, since the match is
for four labels, while the other is for zero labels.
# Putting it Together
Let's discuss how the three DNS routing concepts above are best used for a
reasonably complex scenario consisting of:
1. One VPN interface of the *corporate* kind, maybe called `company0`. It makes
available a bunch of servers, all in the domain `corp.company.example`.
2. One VPN interface of the *privacy* kind, maybe called `privacy0`. When it is
up all DNS traffic shall preferably routed to its DNS servers.
3. One regular WiFi interface, maybe called `wifi0`. It has a regular DNS
server on it.
Here's how to best configure this for `systemd-resolved.service`:
1. `company0` should get a routing domain `~corp.company.example`
configured. (A search domain `corp.company.example` would work too, if
qualifying of single-label names is desired or the VPN lease information
does not provide for the concept of routing domains, but does support search
domains.) This interface should also set `default-route` to false, to ensure
that really only the DNS lookups for the company's servers are routed there
and nothing else. Finally, it might make sense to also configure a routing
domain `~2.0.192.in-addr.arpa` on the interface, ensuring that all IPv4
addresses from the 192.0.2.x range are preferably resolved via the DNS
server on this interface (assuming that that's the IPv4 address range the
company uses internally).
2. `privacy0` should get a routing domain `~.` configured. The setting of
`default-route` for this interface is then irrelevant. This means: once the
interface is up, all DNS traffic is preferably routed there.
3. `wifi0` should not get any special settings, except possibly whatever the
local WiFi router considers suitable as search domain, for example
`fritz.box`. The default `true` setting for `default-route` is good too.
With this configuration if only `wifi0` is up, all DNS traffic goes to its DNS
server, since there are no other interfaces with better matching DNS
configuration. If `privacy0` is then upped, all DNS traffic will exclusively go
to this interface now — with the exception of names below the `fritz.box`
domain, which will continue to go directly to `wifi0`, as the search domain
there says so. Now, if `company0` is also upped, it will receive DNS traffic
for the company's internal domain and internal IP subnet range, but nothing
else. If `privacy0` is then downed again, `wifi0` will get the regular DNS
traffic again, and `company0` will still get the company's internal domain and
IP subnet traffic and nothing else. Everything hence works as intended.
# How to Implement this in Your VPN Software
Most likely you want to expose a boolean in some way that declares whether a
specific VPN is of the *corporate* or the *privacy* kind:
1. If managing a *corporate* VPN, you configure any search domains the user or
the VPN contact point provided. And you set `default-route` to false. If you
have IP subnet information for the VPN, it might make sense to insert
`~….in-addr.arpa` and `~….ip6.arpa` reverse lookup routing domains for it.
2. If managing a *privacy* VPN, you include `~.` in the routing domains, the
value for `default-route` is actually irrelevant, but I'd set it to true. No
need to configure any reverse lookup routing domains for it.
(If you also manage regular WiFi/Ethernet devices, just configure them as
traditional, i.e. with any search domains as acquired, do not set `~.` though,
and do not disable `default-route`.)
# The APIs
Now we determined how we want to configure things, but how do you actually get
the configuration to `systemd-resolved.service`? There are three relevant
interfaces:
1. Ideally, you use D-Bus and talk to [`systemd-resolved.service`'s D-Bus
API](https://www.freedesktop.org/software/systemd/man/org.freedesktop.resolve1.html)
directly. Use `SetLinkDomains()` to set the per-interface search and routing
domains on the interfaces you manage, and `SetLinkDefaultRoute()` to manage
the `default-route` boolean, all on the `org.freedesktop.resolve1.Manager`
interface of the `/org/freedesktop/resolve1` object.
2. If that's not in the cards, you may shell out to
[`resolvectl`](https://www.freedesktop.org/software/systemd/man/resolvectl.html),
which is a thin wrapper around the D-Bus interface mentioned above. Use
`resolvectl domain <iface> …` to set the search/routing domains and
`resolvectl default-route <iface> …` to set the `default-route` boolean.
Example use from a shell callout of your VPN software for a *corporate* VPN:
resolvectl domain corporate0 '~corp-company.example' '~2.0.192.in-addr.arpa'
resolvectl default-route corporate0 false
resolvectl dns corporate0 192.0.2.1
Example use from a shell callout of your VPN software for a *privacy* VPN:
resolvectl domain privacy0 '~.'
resolvectl default-route privacy0 true
resolvectl dns privacy0 8.8.8.8
3. If you don't want to use any `systemd-resolved` commands, you may use the
`resolvconf` wrapper we provide. `resolvectl` is actually a multi-call
binary and may be symlinked to `resolvconf`, and when invoked like that
behaves in a way that is largely compatible with FreeBSD's and
Ubuntu's/Debian's
[`resolvconf(8)`](https://manpages.ubuntu.com/manpages/trusty/man8/resolvconf.8.html)
tool. When the `-x` switch is specified, the `~.` routing domain is
automatically appended to the domain list configured, as appropriate for a
*privacy* VPN. Note that the `resolvconf` interface only covers *privacy*
VPNs and regular network interfaces (such as WiFi or Ethernet) well. The
*corporate* kind of VPN is not well covered, since the interface cannot
propagate the `default-route` boolean, nor can be used to configure the
`~….in-addr.arpa` or `~.ip6.arpa` routing domains.
# Ordering
When configuring per-interface DNS configuration settings it is wise to
configure everything *before* actually upping the interface. Once the interface
is up `systemd-resolved.service` might start using it, and hence it's important
to have everything configured properly (this is particularly relevant when
LLMNR or MulticastDNS is enabled, since that works without any explicitly
configured DNS configuration). It is also wise to configure search/routing
domains and the `default-route` boolean *before* configuring the DNS servers,
as the former without the latter has no effect, but the latter without the
former will result in DNS traffic possibly being generated, in a non-desirable
way given that the routing information is not set yet.
# Downgrading Search Domains to Routing Domains
Many VPN implementations provide a way how VPN servers can inform VPN clients
about search domains to use. In some cases it might make sense to install those
as routing domains instead of search domains. Unqualified domain names usually
imply a context of locality: the same unqualified name typically is expected to
resolve to one system in one local network, and to another one in a different
network. Search domains thus generally come with security implications: they
might cause that unqualified domains are resolved in a different (possibly
remote) context, contradicting user expectations. Thus it might be wise to
downgrade *search domains* provided by VPN servers to *routing domains*, so
that local unqualified name resolution remains untouched and strictly maintains
its local focus — in particular in the aforementioned less trusted *corporate*
VPN scenario.
To illustrate this further, here's an example for an attack scenario using
search domains: a user assumes the printer system they daily contact under the
unqualified name "printer" is the network printer in their basement (with the
fully qualified domain name "printer.home"). Sometimes the user joins the
corporate VPN of their employer, which comes with a search domain
"foocorp.example", so that the user's confidential documents (maybe a job
application to a competing company) might end up being printed on
"printer.foocorp.example" instead of "printer.home". If the local VPN software
had downgraded the VPN's search domain to a routing domain "~foocorp.example",
this mismapping would not have happened.
When connecting to untrusted WiFi networks it might be wise to go one step
further even: suppress installation of search/routing domains by the network
entirely, to ensure that the local DNS information is only used for name
resolution of qualified names and only when no better DNS configuration is
available.

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
--- 20-acpi-vendor.hwdb.base 2020-11-10 14:13:39.257693009 +0100 --- 20-acpi-vendor.hwdb.base 2020-11-26 13:49:35.243482590 +0100
+++ 20-acpi-vendor.hwdb 2020-11-10 14:13:39.264693047 +0100 +++ 20-acpi-vendor.hwdb 2020-11-26 13:49:35.260482675 +0100
@@ -3,6 +3,8 @@ @@ -3,6 +3,8 @@
# Data imported from: # Data imported from:
# https://uefi.org/uefi-pnp-export # https://uefi.org/uefi-pnp-export

View File

@ -380,6 +380,12 @@ pci:v*d*sv*sd*bc08sc06*
pci:v*d*sv*sd*bc08sc80* pci:v*d*sv*sd*bc08sc80*
ID_PCI_SUBCLASS_FROM_DATABASE=System peripheral ID_PCI_SUBCLASS_FROM_DATABASE=System peripheral
pci:v*d*sv*sd*bc08sc99*
ID_PCI_SUBCLASS_FROM_DATABASE=Timing Card
pci:v*d*sv*sd*bc08sc99i01*
ID_PCI_INTERFACE_FROM_DATABASE=TAP Timing Card
pci:v*d*sv*sd*bc09* pci:v*d*sv*sd*bc09*
ID_PCI_CLASS_FROM_DATABASE=Input device controller ID_PCI_CLASS_FROM_DATABASE=Input device controller

View File

@ -122,6 +122,9 @@ pci:v0000018Ad00000106*
pci:v000001DE* pci:v000001DE*
ID_VENDOR_FROM_DATABASE=Oxide Computer Company ID_VENDOR_FROM_DATABASE=Oxide Computer Company
pci:v00000200*
ID_VENDOR_FROM_DATABASE=Dell (wrong ID)
pci:v0000021B* pci:v0000021B*
ID_VENDOR_FROM_DATABASE=Compaq Computer Corporation ID_VENDOR_FROM_DATABASE=Compaq Computer Corporation
@ -7979,6 +7982,9 @@ pci:v00001002d00006820sv000017AAsd00003801*
pci:v00001002d00006820sv000017AAsd00003824* pci:v00001002d00006820sv000017AAsd00003824*
ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8890M / R9 M275X/M375X] (Radeon R9 M375) ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8890M / R9 M275X/M375X] (Radeon R9 M375)
pci:v00001002d00006820sv00001DA2sd0000E26A*
ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8890M / R9 M275X/M375X] (Radeon R7 250)
pci:v00001002d00006821* pci:v00001002d00006821*
ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M / R9 M270X/M370X] ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M / R9 M270X/M370X]
@ -10025,6 +10031,9 @@ pci:v00001002d00006939sv0000148Csd00009380*
pci:v00001002d00006939sv0000174Bsd0000E308* pci:v00001002d00006939sv0000174Bsd0000E308*
ID_MODEL_FROM_DATABASE=Tonga PRO [Radeon R9 285/380] (Radeon R9 380 Nitro 4G D5) ID_MODEL_FROM_DATABASE=Tonga PRO [Radeon R9 285/380] (Radeon R9 380 Nitro 4G D5)
pci:v00001002d00006939sv0000174Bsd0000E315*
ID_MODEL_FROM_DATABASE=Tonga PRO [Radeon R9 285/380] (Radeon R9 285)
pci:v00001002d0000693B* pci:v00001002d0000693B*
ID_MODEL_FROM_DATABASE=Tonga PRO GL [FirePro W7100 / Barco MXRT-7600] ID_MODEL_FROM_DATABASE=Tonga PRO GL [FirePro W7100 / Barco MXRT-7600]
@ -10545,14 +10554,17 @@ pci:v00001002d00007360*
ID_MODEL_FROM_DATABASE=Navi 12 [Radeon Pro 5600M] ID_MODEL_FROM_DATABASE=Navi 12 [Radeon Pro 5600M]
pci:v00001002d000073BF* pci:v00001002d000073BF*
ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6900 Series] ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6800/6800 XT / 6900 XT]
pci:v00001002d000073C3* pci:v00001002d000073C3*
ID_MODEL_FROM_DATABASE=Navi 23 ID_MODEL_FROM_DATABASE=Navi 22
pci:v00001002d000073DF* pci:v00001002d000073DF*
ID_MODEL_FROM_DATABASE=Navi 22 ID_MODEL_FROM_DATABASE=Navi 22
pci:v00001002d000073FF*
ID_MODEL_FROM_DATABASE=Navi 23
pci:v00001002d00007833* pci:v00001002d00007833*
ID_MODEL_FROM_DATABASE=RS350 Host Bridge ID_MODEL_FROM_DATABASE=RS350 Host Bridge
@ -28023,7 +28035,7 @@ pci:v000010DEd000000F4*
ID_MODEL_FROM_DATABASE=NV43 [GeForce 6600 LE] ID_MODEL_FROM_DATABASE=NV43 [GeForce 6600 LE]
pci:v000010DEd000000F5* pci:v000010DEd000000F5*
ID_MODEL_FROM_DATABASE=G71 [GeForce 7800 GS AGP] ID_MODEL_FROM_DATABASE=G70/G71 [GeForce 7800 GS AGP]
pci:v000010DEd000000F6* pci:v000010DEd000000F6*
ID_MODEL_FROM_DATABASE=NV43 [GeForce 6800 GS/XT] ID_MODEL_FROM_DATABASE=NV43 [GeForce 6800 GS/XT]
@ -34682,6 +34694,9 @@ pci:v000010DEd0000128B*
pci:v000010DEd0000128Bsv00001043sd000085F7* pci:v000010DEd0000128Bsv00001043sd000085F7*
ID_MODEL_FROM_DATABASE=GK208B [GeForce GT 710] (GT710-SL-1GD5) ID_MODEL_FROM_DATABASE=GK208B [GeForce GT 710] (GT710-SL-1GD5)
pci:v000010DEd0000128Bsv00001043sd00008770*
ID_MODEL_FROM_DATABASE=GK208B [GeForce GT 710] (GT710-4H-SL-2GD5)
pci:v000010DEd0000128C* pci:v000010DEd0000128C*
ID_MODEL_FROM_DATABASE=GK208B ID_MODEL_FROM_DATABASE=GK208B
@ -35859,13 +35874,13 @@ pci:v000010DEd00002204*
ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3090] ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3090]
pci:v000010DEd00002206* pci:v000010DEd00002206*
ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3080 10GB / 20GB] ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3080]
pci:v000010DEd00002206sv000010DEsd0000146D* pci:v000010DEd00002206sv000010DEsd0000146D*
ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3080 10GB / 20GB] (GA102 [GeForce RTX 3080 20GB]) ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3080] (GA102 [GeForce RTX 3080 20GB])
pci:v000010DEd00002206sv00001462sd00003892* pci:v000010DEd00002206sv00001462sd00003892*
ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3080 10GB / 20GB] (RTX 3080 10GB GAMING X TRIO) ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3080] (RTX 3080 10GB GAMING X TRIO)
pci:v000010DEd0000222B* pci:v000010DEd0000222B*
ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3090 Engineering Sample] ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3090 Engineering Sample]
@ -35883,19 +35898,19 @@ pci:v000010DEd00002482*
ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070 Ti] ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070 Ti]
pci:v000010DEd00002484* pci:v000010DEd00002484*
ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070 8GB / 16GB] ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070]
pci:v000010DEd00002484sv000010DEsd0000146B* pci:v000010DEd00002484sv000010DEsd0000146B*
ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070 8GB / 16GB] (GA104 [GeForce RTX 3070]) ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070]
pci:v000010DEd00002484sv000010DEsd000014AE* pci:v000010DEd00002484sv000010DEsd000014AE*
ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070 8GB / 16GB] (GA104 [GeForce RTX 3070 16GB]) ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070] (GA104 [GeForce RTX 3070 16GB])
pci:v000010DEd00002486* pci:v000010DEd00002486*
ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3060 Ti] ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3060 Ti]
pci:v000010DEd0000249C* pci:v000010DEd0000249C*
ID_MODEL_FROM_DATABASE=GA104M [GeForce RTX 3070 Mobile / Max-Q] ID_MODEL_FROM_DATABASE=GA104M [GeForce RTX 3070 Mobile / Max-Q 8GB/16GB]
pci:v000010DEd0000249D* pci:v000010DEd0000249D*
ID_MODEL_FROM_DATABASE=GA104M [GeForce RTX 3070 Mobile / Max-Q] ID_MODEL_FROM_DATABASE=GA104M [GeForce RTX 3070 Mobile / Max-Q]
@ -35913,7 +35928,10 @@ pci:v000010DEd000024BF*
ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070 Engineering Sample] ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070 Engineering Sample]
pci:v000010DEd000024DC* pci:v000010DEd000024DC*
ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070 16GB Engineering Sample] ID_MODEL_FROM_DATABASE=GA104M [GeForce RTX 3070 Mobile 16GB]
pci:v000010DEd000024DD*
ID_MODEL_FROM_DATABASE=GA104M [GeForce RTX 3070 Mobile / Max-Q]
pci:v000010DEd0000252F* pci:v000010DEd0000252F*
ID_MODEL_FROM_DATABASE=GA106 [GeForce RTX 3060 Engineering Sample] ID_MODEL_FROM_DATABASE=GA106 [GeForce RTX 3060 Engineering Sample]
@ -36608,6 +36626,9 @@ pci:v000010ECd00005289*
pci:v000010ECd00005289sv00001043sd00001457* pci:v000010ECd00005289sv00001043sd00001457*
ID_MODEL_FROM_DATABASE=RTL8411 PCI Express Card Reader (K55A Laptop) ID_MODEL_FROM_DATABASE=RTL8411 PCI Express Card Reader (K55A Laptop)
pci:v000010ECd00005762*
ID_MODEL_FROM_DATABASE=RTS5763DL NVMe SSD Controller
pci:v000010ECd00008029* pci:v000010ECd00008029*
ID_MODEL_FROM_DATABASE=RTL-8029(AS) ID_MODEL_FROM_DATABASE=RTL-8029(AS)
@ -57917,6 +57938,9 @@ pci:v000014F1d00008800sv00000070sd00007801*
pci:v000014F1d00008800sv00000070sd00009001* pci:v000014F1d00008800sv00000070sd00009001*
ID_MODEL_FROM_DATABASE=CX23880/1/2/3 PCI Video and Audio Decoder (Nova-T DVB-T) ID_MODEL_FROM_DATABASE=CX23880/1/2/3 PCI Video and Audio Decoder (Nova-T DVB-T)
pci:v000014F1d00008800sv00000070sd00009002*
ID_MODEL_FROM_DATABASE=CX23880/1/2/3 PCI Video and Audio Decoder (Nova-T DVB-T Model 909)
pci:v000014F1d00008800sv00000070sd00009200* pci:v000014F1d00008800sv00000070sd00009200*
ID_MODEL_FROM_DATABASE=CX23880/1/2/3 PCI Video and Audio Decoder (Nova-SE2 DVB-S) ID_MODEL_FROM_DATABASE=CX23880/1/2/3 PCI Video and Audio Decoder (Nova-SE2 DVB-S)
@ -60011,6 +60035,12 @@ pci:v000015B7d00005002*
pci:v000015B7d00005003* pci:v000015B7d00005003*
ID_MODEL_FROM_DATABASE=WD Black 2018 / PC SN520 NVMe SSD ID_MODEL_FROM_DATABASE=WD Black 2018 / PC SN520 NVMe SSD
pci:v000015B7d00005004*
ID_MODEL_FROM_DATABASE=PC SN520 NVMe SSD
pci:v000015B7d00005005*
ID_MODEL_FROM_DATABASE=PC SN520 NVMe SSD
pci:v000015B7d00005006* pci:v000015B7d00005006*
ID_MODEL_FROM_DATABASE=WD Black 2019/PC SN750 NVMe SSD ID_MODEL_FROM_DATABASE=WD Black 2019/PC SN750 NVMe SSD
@ -60020,6 +60050,9 @@ pci:v000015B7d00005009*
pci:v000015B7d00005009sv000015B7sd00005009* pci:v000015B7d00005009sv000015B7sd00005009*
ID_MODEL_FROM_DATABASE=WD Blue SN550 NVMe SSD ID_MODEL_FROM_DATABASE=WD Blue SN550 NVMe SSD
pci:v000015B7d0000500D*
ID_MODEL_FROM_DATABASE=WD Ultrastar DC SN340 NVMe SSD
pci:v000015B8* pci:v000015B8*
ID_VENDOR_FROM_DATABASE=ADDI-DATA GmbH ID_VENDOR_FROM_DATABASE=ADDI-DATA GmbH
@ -64328,6 +64361,12 @@ pci:v000018F4d000001A5*
pci:v000018F4d000001C5* pci:v000018F4d000001C5*
ID_MODEL_FROM_DATABASE=NT200A02 Network Adapter ID_MODEL_FROM_DATABASE=NT200A02 Network Adapter
pci:v000018F4d000001D5*
ID_MODEL_FROM_DATABASE=NT50B01 Network Adapter
pci:v000018F4d000001E5*
ID_MODEL_FROM_DATABASE=NT100A01 Network Adapter
pci:v000018F6* pci:v000018F6*
ID_VENDOR_FROM_DATABASE=NextIO ID_VENDOR_FROM_DATABASE=NextIO
@ -65459,6 +65498,9 @@ pci:v0000197Bd00000260*
pci:v0000197Bd00000368* pci:v0000197Bd00000368*
ID_MODEL_FROM_DATABASE=JMB368 IDE controller ID_MODEL_FROM_DATABASE=JMB368 IDE controller
pci:v0000197Bd00000585*
ID_MODEL_FROM_DATABASE=JMB58x AHCI SATA controller
pci:v0000197Bd00002360* pci:v0000197Bd00002360*
ID_MODEL_FROM_DATABASE=JMB360 AHCI Controller ID_MODEL_FROM_DATABASE=JMB360 AHCI Controller
@ -65877,7 +65919,7 @@ pci:v000019E5d00001710*
ID_MODEL_FROM_DATABASE=iBMA Virtual Network Adapter ID_MODEL_FROM_DATABASE=iBMA Virtual Network Adapter
pci:v000019E5d00001711* pci:v000019E5d00001711*
ID_MODEL_FROM_DATABASE=Hi1710 [iBMC Intelligent Management system chip w/VGA support] ID_MODEL_FROM_DATABASE=Hi171x Series [iBMC Intelligent Management system chip w/VGA support]
pci:v000019E5d00001822* pci:v000019E5d00001822*
ID_MODEL_FROM_DATABASE=Hi1822 Family (4*25GE) ID_MODEL_FROM_DATABASE=Hi1822 Family (4*25GE)
@ -66176,8 +66218,8 @@ pci:v00001A4Ad00001000*
pci:v00001A4Ad00001010* pci:v00001A4Ad00001010*
ID_MODEL_FROM_DATABASE=AMC EVR - Stockholm Timing Board ID_MODEL_FROM_DATABASE=AMC EVR - Stockholm Timing Board
pci:v00001A4Ad00001020* pci:v00001A4Ad00001030*
ID_MODEL_FROM_DATABASE=Cluster On Board (COB) Ethernet Switch ID_MODEL_FROM_DATABASE=PGPCard - Gen3 GIGe Interface
pci:v00001A4Ad00002000* pci:v00001A4Ad00002000*
ID_MODEL_FROM_DATABASE=PGPCard - 4 Lane ID_MODEL_FROM_DATABASE=PGPCard - 4 Lane
@ -66188,12 +66230,24 @@ pci:v00001A4Ad00002001*
pci:v00001A4Ad00002010* pci:v00001A4Ad00002010*
ID_MODEL_FROM_DATABASE=PCI-Express EVR ID_MODEL_FROM_DATABASE=PCI-Express EVR
pci:v00001A4Ad00002011*
ID_MODEL_FROM_DATABASE=PCI-Express EVR - TPR Version
pci:v00001A4Ad00002020* pci:v00001A4Ad00002020*
ID_MODEL_FROM_DATABASE=PGP-GEN3 PCIe ID_MODEL_FROM_DATABASE=PGP-GEN3 PCIe - 8 Lane Plus EVR
pci:v00001A4Ad00002030* pci:v00001A4Ad00002030*
ID_MODEL_FROM_DATABASE=AXI Stream DAQ PCIe card ID_MODEL_FROM_DATABASE=AXI Stream DAQ PCIe card
pci:v00001A4Ad00002040*
ID_MODEL_FROM_DATABASE=EXO PCIe TEM
pci:v00001A4Ad00003000*
ID_MODEL_FROM_DATABASE=COB DTM V1
pci:v00001A4Ad00003001*
ID_MODEL_FROM_DATABASE=COB DTM V2
pci:v00001A51* pci:v00001A51*
ID_VENDOR_FROM_DATABASE=Hectronic AB ID_VENDOR_FROM_DATABASE=Hectronic AB
@ -66692,6 +66746,9 @@ pci:v00001B1A*
pci:v00001B1Ad00000E70* pci:v00001B1Ad00000E70*
ID_MODEL_FROM_DATABASE=GRAPE ID_MODEL_FROM_DATABASE=GRAPE
pci:v00001B1C*
ID_VENDOR_FROM_DATABASE=Corsair
pci:v00001B21* pci:v00001B21*
ID_VENDOR_FROM_DATABASE=ASMedia Technology Inc. ID_VENDOR_FROM_DATABASE=ASMedia Technology Inc.
@ -66704,6 +66761,9 @@ pci:v00001B21d00000612*
pci:v00001B21d00000612sv00001849sd00000612* pci:v00001B21d00000612sv00001849sd00000612*
ID_MODEL_FROM_DATABASE=ASM1062 Serial ATA Controller (Motherboard) ID_MODEL_FROM_DATABASE=ASM1062 Serial ATA Controller (Motherboard)
pci:v00001B21d00001040*
ID_MODEL_FROM_DATABASE=ASM1040 XHCI Controller
pci:v00001B21d00001042* pci:v00001B21d00001042*
ID_MODEL_FROM_DATABASE=ASM1042 SuperSpeed USB Host Controller ID_MODEL_FROM_DATABASE=ASM1042 SuperSpeed USB Host Controller
@ -66935,6 +66995,12 @@ pci:v00001B4Bd00000640*
pci:v00001B4Bd00002241* pci:v00001B4Bd00002241*
ID_MODEL_FROM_DATABASE=88NR2241 Non-Volatile memory controller ID_MODEL_FROM_DATABASE=88NR2241 Non-Volatile memory controller
pci:v00001B4Bd00002241sv00001028sd00002112*
ID_MODEL_FROM_DATABASE=88NR2241 Non-Volatile memory controller (BOSS-N1 Monolithic)
pci:v00001B4Bd00002241sv00001028sd00002113*
ID_MODEL_FROM_DATABASE=88NR2241 Non-Volatile memory controller (BOSS-N1 Modular)
pci:v00001B4Bd00002241sv00001D49sd00000306* pci:v00001B4Bd00002241sv00001D49sd00000306*
ID_MODEL_FROM_DATABASE=88NR2241 Non-Volatile memory controller (ThinkSystem M.2 NVMe 2-Bay RAID Enablement Kit) ID_MODEL_FROM_DATABASE=88NR2241 Non-Volatile memory controller (ThinkSystem M.2 NVMe 2-Bay RAID Enablement Kit)
@ -67139,6 +67205,36 @@ pci:v00001B94d0000E400*
pci:v00001B96* pci:v00001B96*
ID_VENDOR_FROM_DATABASE=Western Digital ID_VENDOR_FROM_DATABASE=Western Digital
pci:v00001B96d00002200*
ID_MODEL_FROM_DATABASE=Ultrastar DC SN630 NVMe SSD
pci:v00001B96d00002201*
ID_MODEL_FROM_DATABASE=Ultrastar DC SN630 NVMe SSD
pci:v00001B96d00002300*
ID_MODEL_FROM_DATABASE=Ultrastar DC SN840 NVMe SSD
pci:v00001B96d00002400*
ID_MODEL_FROM_DATABASE=Ultrastar DC SN640 NVMe SSD
pci:v00001B96d00002401*
ID_MODEL_FROM_DATABASE=Ultrastar DC SN640 NVMe SSD
pci:v00001B96d00002402*
ID_MODEL_FROM_DATABASE=Ultrastar DC SN640 NVMe SSD
pci:v00001B96d00002404*
ID_MODEL_FROM_DATABASE=Ultrastar DC SN640 NVMe SSD
pci:v00001B96d00002500*
ID_MODEL_FROM_DATABASE=Ultrastar DC SN840 NVMe SSD
pci:v00001B96d00003714*
ID_MODEL_FROM_DATABASE=PC SN730 NVMe SSD
pci:v00001B96d00003734*
ID_MODEL_FROM_DATABASE=PC SN730 NVMe SSD
pci:v00001B9A* pci:v00001B9A*
ID_VENDOR_FROM_DATABASE=XAVi Technologies Corp. ID_VENDOR_FROM_DATABASE=XAVi Technologies Corp.
@ -67760,6 +67856,9 @@ pci:v00001CD2d00000305*
pci:v00001CD2d00000306* pci:v00001CD2d00000306*
ID_MODEL_FROM_DATABASE=Simulyzer-RT CompactPCI Serial CAN-2 card (CAN-FD) ID_MODEL_FROM_DATABASE=Simulyzer-RT CompactPCI Serial CAN-2 card (CAN-FD)
pci:v00001CD2d00000307*
ID_MODEL_FROM_DATABASE=Simulyzer-RT CompactPCI Serial DIO-2 card [Xilinx Zynq UltraScale+]
pci:v00001CD7* pci:v00001CD7*
ID_VENDOR_FROM_DATABASE=Nanjing Magewell Electronics Co., Ltd. ID_VENDOR_FROM_DATABASE=Nanjing Magewell Electronics Co., Ltd.
@ -68279,6 +68378,9 @@ pci:v00001D78d00001512sv00001D78sd00003107*
pci:v00001D7C* pci:v00001D7C*
ID_VENDOR_FROM_DATABASE=Aerotech, Inc. ID_VENDOR_FROM_DATABASE=Aerotech, Inc.
pci:v00001D7Cd00000001*
ID_MODEL_FROM_DATABASE=HyperWire Adapter
pci:v00001D82* pci:v00001D82*
ID_VENDOR_FROM_DATABASE=NETINT Technologies Inc. ID_VENDOR_FROM_DATABASE=NETINT Technologies Inc.
@ -68423,6 +68525,9 @@ pci:v00001DA1*
pci:v00001DA2* pci:v00001DA2*
ID_VENDOR_FROM_DATABASE=Sapphire Technology Limited ID_VENDOR_FROM_DATABASE=Sapphire Technology Limited
pci:v00001DA2d0000E26A*
ID_MODEL_FROM_DATABASE=Radeon R7 250
pci:v00001DA3* pci:v00001DA3*
ID_VENDOR_FROM_DATABASE=Habana Labs Ltd. ID_VENDOR_FROM_DATABASE=Habana Labs Ltd.
@ -68831,6 +68936,12 @@ pci:v00001E0Fd00000007sv00001028sd00002110*
pci:v00001E0Fd00000007sv00001E0Fsd00000001* pci:v00001E0Fd00000007sv00001E0Fsd00000001*
ID_MODEL_FROM_DATABASE=NVMe SSD Controller Cx6 (Generic NVMe CM6 RI 3.84TB) ID_MODEL_FROM_DATABASE=NVMe SSD Controller Cx6 (Generic NVMe CM6 RI 3.84TB)
pci:v00001E0Fd00000009*
ID_MODEL_FROM_DATABASE=NVMe SSD
pci:v00001E0Fd00000009sv00001E0Fsd00000001*
ID_MODEL_FROM_DATABASE=NVMe SSD (Toshiba RC500 NVMe SSD 500GB)
pci:v00001E17* pci:v00001E17*
ID_VENDOR_FROM_DATABASE=Arnold & Richter Cine Technik GmbH & Co. Betriebs KG ID_VENDOR_FROM_DATABASE=Arnold & Richter Cine Technik GmbH & Co. Betriebs KG
@ -68867,12 +68978,99 @@ pci:v00001E36*
pci:v00001E36d00000001* pci:v00001E36d00000001*
ID_MODEL_FROM_DATABASE=T10 [CloudBlazer] ID_MODEL_FROM_DATABASE=T10 [CloudBlazer]
pci:v00001E36d00000002*
ID_MODEL_FROM_DATABASE=T11 [CloudBlazer]
pci:v00001E36d00000003*
ID_MODEL_FROM_DATABASE=T10s [CloudBlazer]
pci:v00001E36d00008011*
ID_MODEL_FROM_DATABASE=I10 [CloudBlazer]
pci:v00001E38* pci:v00001E38*
ID_VENDOR_FROM_DATABASE=Blaize, Inc ID_VENDOR_FROM_DATABASE=Blaize, Inc
pci:v00001E38d00000102* pci:v00001E38d00000102*
ID_MODEL_FROM_DATABASE=Xplorer X1600 ID_MODEL_FROM_DATABASE=Xplorer X1600
pci:v00001E3B*
ID_VENDOR_FROM_DATABASE=Shenzhen DAPU Microelectronics Co., Ltd
pci:v00001E3Bd00001098*
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD
pci:v00001E3Bd00001098sv00001E3Bsd00000001*
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 0.8TB (H2100))
pci:v00001E3Bd00001098sv00001E3Bsd00000002*
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 0.96TB (H2200))
pci:v00001E3Bd00001098sv00001E3Bsd00000004*
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 1.6TB (H2100))
pci:v00001E3Bd00001098sv00001E3Bsd00000005*
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 1.92TB (H2200))
pci:v00001E3Bd00001098sv00001E3Bsd00000009*
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 0.8TB (H3100))
pci:v00001E3Bd00001098sv00001E3Bsd0000000A*
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 0.96TB (H3200))
pci:v00001E3Bd00001098sv00001E3Bsd0000000C*
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 1.6TB (H3100))
pci:v00001E3Bd00001098sv00001E3Bsd0000000D*
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 1.92TB (H3200))
pci:v00001E3Bd00001098sv00001E3Bsd00000014*
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 3.2TB (H3100))
pci:v00001E3Bd00001098sv00001E3Bsd00000015*
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 3.84TB (H3200))
pci:v00001E3Bd00001098sv00001E3Bsd00000021*
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 6.4TB (H3100))
pci:v00001E3Bd00001098sv00001E3Bsd00000022*
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 7.68TB (H3200))
pci:v00001E3Bd00001098sv00001E3Bsd00000061*
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 0.8TB (H2100))
pci:v00001E3Bd00001098sv00001E3Bsd00000062*
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 0.96TB (H2200))
pci:v00001E3Bd00001098sv00001E3Bsd00000064*
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 1.6TB (H2100))
pci:v00001E3Bd00001098sv00001E3Bsd00000065*
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 1.92TB (H2200))
pci:v00001E3Bd00001098sv00001E3Bsd0000006C*
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 0.8TB (H3100))
pci:v00001E3Bd00001098sv00001E3Bsd0000006D*
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 0.96TB (H3200))
pci:v00001E3Bd00001098sv00001E3Bsd0000006F*
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 1.6TB (H3100))
pci:v00001E3Bd00001098sv00001E3Bsd00000070*
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 1.92TB (H3200))
pci:v00001E3Bd00001098sv00001E3Bsd0000007C*
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 3.2TB (H3100))
pci:v00001E3Bd00001098sv00001E3Bsd0000007D*
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 3.84TB (H3200))
pci:v00001E3Bd00001098sv00001E3Bsd0000007F*
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 6.4TB (H3100))
pci:v00001E3Bd00001098sv00001E3Bsd00000080*
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 7.68TB (H3200))
pci:v00001E3D* pci:v00001E3D*
ID_VENDOR_FROM_DATABASE=Burlywood, Inc ID_VENDOR_FROM_DATABASE=Burlywood, Inc
@ -68948,6 +69146,9 @@ pci:v00001E94*
pci:v00001E95* pci:v00001E95*
ID_VENDOR_FROM_DATABASE=Solid State Storage Technology Corporation ID_VENDOR_FROM_DATABASE=Solid State Storage Technology Corporation
pci:v00001EAB*
ID_VENDOR_FROM_DATABASE=Hefei DATANG Storage Technology Co.,LTD.
pci:v00001EAE* pci:v00001EAE*
ID_VENDOR_FROM_DATABASE=XFX Limited ID_VENDOR_FROM_DATABASE=XFX Limited
@ -69195,7 +69396,7 @@ pci:v00002646*
ID_VENDOR_FROM_DATABASE=Kingston Technology Company, Inc. ID_VENDOR_FROM_DATABASE=Kingston Technology Company, Inc.
pci:v00002646d00002263* pci:v00002646d00002263*
ID_MODEL_FROM_DATABASE=A2000, M.2, 500GB ID_MODEL_FROM_DATABASE=A2000 NVMe SSD
pci:v0000270B* pci:v0000270B*
ID_VENDOR_FROM_DATABASE=Xantel Corporation ID_VENDOR_FROM_DATABASE=Xantel Corporation
@ -73016,6 +73217,12 @@ pci:v00008086d00000A55sv00001028sd00001FE8*
pci:v00008086d00000A55sv00001028sd00001FE9* pci:v00008086d00000A55sv00001028sd00001FE9*
ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Beta Rock Controller] (Express Flash NVMe 4.0TB HHHL AIC (P4600)) ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Beta Rock Controller] (Express Flash NVMe 4.0TB HHHL AIC (P4600))
pci:v00008086d00000B26*
ID_MODEL_FROM_DATABASE=Thunderbolt 4 Bridge [Goshen Ridge 2020]
pci:v00008086d00000B27*
ID_MODEL_FROM_DATABASE=Thunderbolt 4 USB Controller [Goshen Ridge 2020]
pci:v00008086d00000B60* pci:v00008086d00000B60*
ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Beta Rock Controller] ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Beta Rock Controller]
@ -76127,6 +76334,18 @@ pci:v00008086d00001240*
pci:v00008086d0000124B* pci:v00008086d0000124B*
ID_MODEL_FROM_DATABASE=82380FB (MPCI2) Mobile Docking Controller ID_MODEL_FROM_DATABASE=82380FB (MPCI2) Mobile Docking Controller
pci:v00008086d0000124C*
ID_MODEL_FROM_DATABASE=Ethernet Connection E823-L for backplane
pci:v00008086d0000124D*
ID_MODEL_FROM_DATABASE=Ethernet Connection E823-L for SFP
pci:v00008086d0000124E*
ID_MODEL_FROM_DATABASE=Ethernet Connection E823-L/X557-AT 10GBASE-T
pci:v00008086d0000124F*
ID_MODEL_FROM_DATABASE=Ethernet Connection E823-L 1GbE
pci:v00008086d00001250* pci:v00008086d00001250*
ID_MODEL_FROM_DATABASE=430HX - 82439HX TXC [Triton II] ID_MODEL_FROM_DATABASE=430HX - 82439HX TXC [Triton II]
@ -76280,6 +76499,9 @@ pci:v00008086d0000151C*
pci:v00008086d0000151Csv0000108Esd00007B13* pci:v00008086d0000151Csv0000108Esd00007B13*
ID_MODEL_FROM_DATABASE=82599 10 Gigabit TN Network Connection (Dual 10GBASE-T LP) ID_MODEL_FROM_DATABASE=82599 10 Gigabit TN Network Connection (Dual 10GBASE-T LP)
pci:v00008086d0000151D*
ID_MODEL_FROM_DATABASE=Ethernet Connection E823-L for QSFP
pci:v00008086d00001520* pci:v00008086d00001520*
ID_MODEL_FROM_DATABASE=I350 Ethernet Controller Virtual Function ID_MODEL_FROM_DATABASE=I350 Ethernet Controller Virtual Function
@ -79466,6 +79688,9 @@ pci:v00008086d00001F27*
pci:v00008086d00001F2C* pci:v00008086d00001F2C*
ID_MODEL_FROM_DATABASE=Atom processor C2000 USB Enhanced Host Controller ID_MODEL_FROM_DATABASE=Atom processor C2000 USB Enhanced Host Controller
pci:v00008086d00001F2Csv00000200sd00001028*
ID_MODEL_FROM_DATABASE=Atom processor C2000 USB Enhanced Host Controller (Atom C2338 on Dell 0K8Y0N motherboard)
pci:v00008086d00001F2E* pci:v00008086d00001F2E*
ID_MODEL_FROM_DATABASE=Atom processor C2000 RAID SATA2 Controller ID_MODEL_FROM_DATABASE=Atom processor C2000 RAID SATA2 Controller
@ -81977,6 +82202,15 @@ pci:v00008086d00002520*
pci:v00008086d00002521* pci:v00008086d00002521*
ID_MODEL_FROM_DATABASE=82804AA MRH-S Memory Repeater Hub for SDRAM ID_MODEL_FROM_DATABASE=82804AA MRH-S Memory Repeater Hub for SDRAM
pci:v00008086d00002522*
ID_MODEL_FROM_DATABASE=NVMe Optane Memory Series
pci:v00008086d00002522sv00008086sd00003806*
ID_MODEL_FROM_DATABASE=NVMe Optane Memory Series (Optane Memory 16GB)
pci:v00008086d00002522sv00008086sd00003810*
ID_MODEL_FROM_DATABASE=NVMe Optane Memory Series (Optane Memory M10 16GB)
pci:v00008086d00002526* pci:v00008086d00002526*
ID_MODEL_FROM_DATABASE=Wireless-AC 9260 ID_MODEL_FROM_DATABASE=Wireless-AC 9260
@ -92663,12 +92897,21 @@ pci:v00008086d00009A13*
pci:v00008086d00009A14* pci:v00008086d00009A14*
ID_MODEL_FROM_DATABASE=11th Gen Core Processor Host Bridge/DRAM Registers ID_MODEL_FROM_DATABASE=11th Gen Core Processor Host Bridge/DRAM Registers
pci:v00008086d00009A17*
ID_MODEL_FROM_DATABASE=Tiger Lake-H Thunderbolt USB Controller
pci:v00008086d00009A1B* pci:v00008086d00009A1B*
ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt NHI #0 ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt NHI #0
pci:v00008086d00009A1D* pci:v00008086d00009A1D*
ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt NHI #1 ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt NHI #1
pci:v00008086d00009A1F*
ID_MODEL_FROM_DATABASE=Tiger Lake-H Thunderbolt NHI #0
pci:v00008086d00009A21*
ID_MODEL_FROM_DATABASE=Tiger Lake-H Thunderbolt NHI #1
pci:v00008086d00009A23* pci:v00008086d00009A23*
ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt PCI Express Root Port #0 ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt PCI Express Root Port #0
@ -92681,11 +92924,23 @@ pci:v00008086d00009A27*
pci:v00008086d00009A29* pci:v00008086d00009A29*
ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt PCI Express Root Port #3 ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt PCI Express Root Port #3
pci:v00008086d00009A2B*
ID_MODEL_FROM_DATABASE=Tiger Lake-H Thunderbolt PCI Express Root Port #0
pci:v00008086d00009A2D*
ID_MODEL_FROM_DATABASE=Tiger Lake-H Thunderbolt PCI Express Root Port #1
pci:v00008086d00009A2F*
ID_MODEL_FROM_DATABASE=Tiger Lake-H Thunderbolt PCI Express Root Port #2
pci:v00008086d00009A31*
ID_MODEL_FROM_DATABASE=Tiger Lake-H Thunderbolt PCI Express Root Port #3
pci:v00008086d00009A33* pci:v00008086d00009A33*
ID_MODEL_FROM_DATABASE=Tiger Lake Trace Hub ID_MODEL_FROM_DATABASE=Tiger Lake Trace Hub
pci:v00008086d00009A49* pci:v00008086d00009A49*
ID_MODEL_FROM_DATABASE=UHD Graphics ID_MODEL_FROM_DATABASE=Iris Xe Graphics
pci:v00008086d00009B41* pci:v00008086d00009B41*
ID_MODEL_FROM_DATABASE=UHD Graphics ID_MODEL_FROM_DATABASE=UHD Graphics

View File

@ -403,10 +403,10 @@ evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO*:pvrThinkPad??40?:*
# Lenovo X240 series # Lenovo X240 series
evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO*:pvrThinkPadX240:* evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO*:pvrThinkPadX240:*
evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO*:pvrThinkPadX240?:* evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO*:pvrThinkPadX240?:*
EVDEV_ABS_00=1232:5711:51 EVDEV_ABS_00=1232:5711:51:13
EVDEV_ABS_01=1159:4700:53 EVDEV_ABS_01=1159:4700:53:13
EVDEV_ABS_35=1232:5711:51 EVDEV_ABS_35=1232:5711:51:13
EVDEV_ABS_36=1159:4700:53 EVDEV_ABS_36=1159:4700:53:13
# Lenovo ThinkPad X140e # Lenovo ThinkPad X140e
evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO*:pvrThinkPadX140e:* evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO*:pvrThinkPadX140e:*
@ -422,6 +422,13 @@ evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO*:pvrThinkPadT430:*
EVDEV_ABS_35=1250:5631:58 EVDEV_ABS_35=1250:5631:58
EVDEV_ABS_36=1309:4826:78 EVDEV_ABS_36=1309:4826:78
# Lenovo Thinkpad X1 Carbon Extreme 3rd gen.
evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO*pvrThinkPadX1ExtremeGen3*
EVDEV_ABS_00=1354:5678:43
EVDEV_ABS_01=1169:4695:51
EVDEV_ABS_35=1354:5678:43
EVDEV_ABS_36=1169:4695:51
# Lenovo Thinkpad Carbon X1 4th gen. and X1 Yoga 1st gen. # Lenovo Thinkpad Carbon X1 4th gen. and X1 Yoga 1st gen.
evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO*:pvrThinkPadX1Carbon4th:* evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO*:pvrThinkPadX1Carbon4th:*
EVDEV_ABS_00=1262:5679:44 EVDEV_ABS_00=1262:5679:44

View File

@ -375,6 +375,10 @@ evdev:name:Dell WMI hotkeys:dmi:bvn*:bvr*:bd*:svnDell*:pnLatitude*:*
evdev:name:Dell WMI hotkeys:dmi:bvn*:bvr*:bd*:svnDell*:pnPrecision*:* evdev:name:Dell WMI hotkeys:dmi:bvn*:bvr*:bd*:svnDell*:pnPrecision*:*
KEYBOARD_KEY_100150=f20 # Mic mute toggle, should be micmute KEYBOARD_KEY_100150=f20 # Mic mute toggle, should be micmute
# Dell Latitude privacy microphone mute
evdev:name:Dell Privacy Driver:dmi:bvn*:bvr*:bd*:svnDell*:pnLatitude*:sku0A3E:*
KEYBOARD_KEY_12001=f20 # Mic mute toggle, should be micmute
########################################################### ###########################################################
# Everex # Everex
########################################################### ###########################################################
@ -922,6 +926,7 @@ evdev:input:b0003v046Dp00*
KEYBOARD_KEY_c1029=shuffle # Shuffle button KEYBOARD_KEY_c1029=shuffle # Shuffle button
KEYBOARD_KEY_c102a=back # Back button KEYBOARD_KEY_c102a=back # Back button
KEYBOARD_KEY_c102b=cyclewindows # Empty window icon KEYBOARD_KEY_c102b=cyclewindows # Empty window icon
KEYBOARD_KEY_c102c=fn # Fn key
KEYBOARD_KEY_c102d=www # www text + magnifierglass icon KEYBOARD_KEY_c102d=www # www text + magnifierglass icon
KEYBOARD_KEY_c1031=connect # Pickup phone button → connect → XF86Go KEYBOARD_KEY_c1031=connect # Pickup phone button → connect → XF86Go
KEYBOARD_KEY_c1032=cancel # Hangup phone button → cancel → Cancel KEYBOARD_KEY_c1032=cancel # Hangup phone button → cancel → Cancel
@ -1024,6 +1029,7 @@ evdev:input:b0003v046Dp00FE*
# MX5000 keyboard (HID proxy mode and bluetooth matches) # MX5000 keyboard (HID proxy mode and bluetooth matches)
evdev:input:b0003v046DpB305* evdev:input:b0003v046DpB305*
evdev:input:b0005v046DpB305* evdev:input:b0005v046DpB305*
KEYBOARD_KEY_c0183=media # HUT says config, kbd says Media
KEYBOARD_KEY_c0230=zoomreset # HUT says fullscreen, kbd says 100% KEYBOARD_KEY_c0230=zoomreset # HUT says fullscreen, kbd says 100%
KEYBOARD_KEY_c1004=send # Send and receive / sync button KEYBOARD_KEY_c1004=send # Send and receive / sync button
KEYBOARD_KEY_c1006=coffee # Status (online/away) button KEYBOARD_KEY_c1006=coffee # Status (online/away) button
@ -1036,6 +1042,17 @@ evdev:input:b0005v046DpB305*
KEYBOARD_KEY_c1039=prog2 # Smartkey B → XF86Launch2 KEYBOARD_KEY_c1039=prog2 # Smartkey B → XF86Launch2
KEYBOARD_KEY_c103a=prog3 # Smartkey C → XF86Launch3 KEYBOARD_KEY_c103a=prog3 # Smartkey C → XF86Launch3
KEYBOARD_KEY_c103b=prog4 # Smartkey D → XF86Launch4 KEYBOARD_KEY_c103b=prog4 # Smartkey D → XF86Launch4
KEYBOARD_KEY_c1040=fn_esc # Fn mode on/off toggle
# Dinovo Edge (HID proxy mode and bluetooth matches)
evdev:input:b0003v046DpB309*
evdev:input:b0005v046DpB309*
KEYBOARD_KEY_c102c=fn # Fn key
KEYBOARD_KEY_c1038=prog1 # Fn + F9 Smartkey A → XF86Launch1
KEYBOARD_KEY_c1039=prog2 # Fn + F10 Smartkey B → XF86Launch2
KEYBOARD_KEY_c103a=prog3 # Fn + F11 Smartkey C → XF86Launch3
KEYBOARD_KEY_c103b=prog4 # Fn + F12 Smartkey D → XF86Launch4
KEYBOARD_KEY_c1050=phone # Fn + F1 Phone button
# MX5500 keyboard (HID proxy mode and bluetooth matches) # MX5500 keyboard (HID proxy mode and bluetooth matches)
evdev:input:b0003v046DpB30B* evdev:input:b0003v046DpB30B*
@ -1043,6 +1060,7 @@ evdev:input:b0005v046DpB30B*
KEYBOARD_KEY_c0183=media # HUT says consumer control configuration, kbd says Media Center KEYBOARD_KEY_c0183=media # HUT says consumer control configuration, kbd says Media Center
KEYBOARD_KEY_c100e=images # Camera icon, "Photo Gallery" KEYBOARD_KEY_c100e=images # Camera icon, "Photo Gallery"
KEYBOARD_KEY_c100f=config # Window with gear icon KEYBOARD_KEY_c100f=config # Window with gear icon
KEYBOARD_KEY_c102c=fn # Fn key
KEYBOARD_KEY_c1038=prog1 # Smartkey A → XF86Launch1 KEYBOARD_KEY_c1038=prog1 # Smartkey A → XF86Launch1
KEYBOARD_KEY_c1039=prog2 # Smartkey B → XF86Launch2 KEYBOARD_KEY_c1039=prog2 # Smartkey B → XF86Launch2
KEYBOARD_KEY_c103a=prog3 # Smartkey C → XF86Launch3 KEYBOARD_KEY_c103a=prog3 # Smartkey C → XF86Launch3

View File

@ -67,11 +67,24 @@
# or 'display'. The default, when unset, is equivalent to: # or 'display'. The default, when unset, is equivalent to:
# ACCEL_LOCATION=display # ACCEL_LOCATION=display
# #
# A note about setting ACCEL_MOUNT_MATRIX for ACCEL_LOCATION=base sensors,
# on 360 degree hinges style 2-in-1s with 2 sensors (one in the display and
# 1 in the base). Userspace will use both sensors to calculate the angle between
# the 2 halves and the angle is defined as being 0 when the device is folded
# as a regular clamshell laptop with its lid closed. This means that the
# base-accelerometer's mount-matrix must be such, that after applying
# the mount-matrices to both sensors, the base-accelerometer's readings must
# be identical to the display-accelerometer's readings (when the lid is
# closed).
#
# Sort by brand, model # Sort by brand, model
######################################### #########################################
# Acer # Acer
######################################### #########################################
sensor:modalias:acpi:KIOX0009*:dmi:*:svnAcer:pnAspireSW3-016:*
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, -1
sensor:modalias:acpi:INVN6500*:dmi:*svn*Acer*:*pn*AspireSW5-011:* sensor:modalias:acpi:INVN6500*:dmi:*svn*Acer*:*pn*AspireSW5-011:*
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1 ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
@ -458,7 +471,10 @@ sensor:modalias:acpi:NCPE0388*:dmi:*:rnLenovoYOGA510-14IKB:*
ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, 1 ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, 1
sensor:modalias:acpi:BOSC0200*:dmi:*ThinkPadYoga11e3rdGen:* sensor:modalias:acpi:BOSC0200*:dmi:*ThinkPadYoga11e3rdGen:*
ACCEL_MOUNT_MATRIX=0, 1, 0; -1, 0, 0; 0, 0, 1 ACCEL_MOUNT_MATRIX=0, 1, 0; -1, 0, 0; 0, 0, -1
sensor:modalias:acpi:BOSC0200*:dmi:*:svnLENOVO:*pvrThinkPadYoga11e4thGen:*
ACCEL_MOUNT_MATRIX=0, 1, 0; -1, 0, 0; 0, 0, -1
# Miix3-1030 # Miix3-1030
sensor:modalias:acpi:BMA250E*:dmi:bvnLENOVO:*:pvrLenovoMIIX3-1030:* sensor:modalias:acpi:BMA250E*:dmi:bvnLENOVO:*:pvrLenovoMIIX3-1030:*
@ -530,10 +546,12 @@ sensor:modalias:acpi:KIOX010A*:dmi:*:svnMEDION:pnE*:*
# Medion Akoya E3222 MD62450 # Medion Akoya E3222 MD62450
sensor:modalias:acpi:KIOX010A*:dmi:*:svnMEDION:pnMEDION*:* sensor:modalias:acpi:KIOX010A*:dmi:*:svnMEDION:pnMEDION*:*
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1 ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
ACCEL_LOCATION=display
# Medion Akoya E2221T MD60691 # Same as above, but for base sensor
sensor:modalias:acpi:KIOX020A*:dmi:*:pnE2221TMD60691*:* sensor:modalias:acpi:KIOX020A*:dmi:*:svnMEDION:pnE*:*
ACCEL_MOUNT_MATRIX=1, 0, 0; 0, 1, 0; 0, 0, 1 sensor:modalias:acpi:KIOX020A*:dmi:*:svnMEDION:pnMEDION*:*
ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, -1
ACCEL_LOCATION=base ACCEL_LOCATION=base
######################################### #########################################
@ -760,6 +778,16 @@ sensor:modalias:acpi:KIOX000A*:dmi:*:svnUMAX:pnVisionBook10WiPro:*
sensor:modalias:acpi:SMO8500*:dmi:*:svnUMAX:pnVisionBook10WiPlus:* sensor:modalias:acpi:SMO8500*:dmi:*:svnUMAX:pnVisionBook10WiPlus:*
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1 ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
#########################################
# Voyo
#########################################
# Voyo Winpad A15
# The Winpad A15 does not have its product name filled, so we
# match the entire dmi-alias, assuming that the use of a SMO8500 +
# bios-version + bios-date combo is unique
sensor:modalias:acpi:SMO8500*:dmi:bvnAmericanMegatrendsInc.:bvr5.6.5:bd11/20/2014:br5.6:svnTobefilledbyO.E.M.:pnTobefilledbyO.E.M.:pvrTobefilledbyO.E.M.:rvnAMICorporation:rnAptioCRB:rvrTobefilledbyO.E.M.:cvnToBeFilledByO.E.M.:ct3:cvrToBeFilledByO.E.M.:*
ACCEL_MOUNT_MATRIX=0, -1, 0; 1, 0, 0; 0, 0, -1
######################################### #########################################
# Wortmann # Wortmann
######################################### #########################################

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,8 @@
# #
# List of PCI ID's # List of PCI ID's
# #
# Version: 2020.10.25 # Version: 2020.11.14
# Date: 2020-10-25 03:15:01 # Date: 2020-11-14 03:15:02
# #
# Maintained by Albert Pool, Martin Mares, and other volunteers from # Maintained by Albert Pool, Martin Mares, and other volunteers from
# the PCI ID Project at https://pci-ids.ucw.cz/. # the PCI ID Project at https://pci-ids.ucw.cz/.
@ -70,6 +70,8 @@
018a LevelOne 018a LevelOne
0106 FPC-0106TX misprogrammed [RTL81xx] 0106 FPC-0106TX misprogrammed [RTL81xx]
01de Oxide Computer Company 01de Oxide Computer Company
# probably misprogrammed Intel Atom C2338 on Dell 0K8Y0N board
0200 Dell (wrong ID)
# 021b is not Compaq but there is a board misprogrammed # 021b is not Compaq but there is a board misprogrammed
021b Compaq Computer Corporation 021b Compaq Computer Corporation
8139 HNE-300 (RealTek RTL8139c) [iPaq Networking] 8139 HNE-300 (RealTek RTL8139c) [iPaq Networking]
@ -2728,6 +2730,7 @@
17aa 3643 Radeon R9 A375 17aa 3643 Radeon R9 A375
17aa 3801 Radeon R9 M275 17aa 3801 Radeon R9 M275
17aa 3824 Radeon R9 M375 17aa 3824 Radeon R9 M375
1da2 e26a Radeon R7 250
6821 Venus XT [Radeon HD 8870M / R9 M270X/M370X] 6821 Venus XT [Radeon HD 8870M / R9 M270X/M370X]
1002 031e FirePro SX4000 1002 031e FirePro SX4000
1028 05cc FirePro M5100 1028 05cc FirePro M5100
@ -3413,6 +3416,7 @@
148c 9380 Radeon R9 380 148c 9380 Radeon R9 380
# Make naming scheme consistent # Make naming scheme consistent
174b e308 Radeon R9 380 Nitro 4G D5 174b e308 Radeon R9 380 Nitro 4G D5
174b e315 Radeon R9 285
693b Tonga PRO GL [FirePro W7100 / Barco MXRT-7600] 693b Tonga PRO GL [FirePro W7100 / Barco MXRT-7600]
694c Polaris 22 XT [Radeon RX Vega M GH] 694c Polaris 22 XT [Radeon RX Vega M GH]
694e Polaris 22 XL [Radeon RX Vega M GL] 694e Polaris 22 XL [Radeon RX Vega M GL]
@ -3586,9 +3590,10 @@
7347 Navi 14 [Radeon Pro W5500M] 7347 Navi 14 [Radeon Pro W5500M]
734f Navi 14 [Radeon Pro W5300M] 734f Navi 14 [Radeon Pro W5300M]
7360 Navi 12 [Radeon Pro 5600M] 7360 Navi 12 [Radeon Pro 5600M]
73bf Navi 21 [Radeon RX 6900 Series] 73bf Navi 21 [Radeon RX 6800/6800 XT / 6900 XT]
73c3 Navi 23 73c3 Navi 22
73df Navi 22 73df Navi 22
73ff Navi 23
7833 RS350 Host Bridge 7833 RS350 Host Bridge
7834 RS350 [Radeon 9100 PRO/XT IGP] 7834 RS350 [Radeon 9100 PRO/XT IGP]
7835 RS350M [Mobility Radeon 9000 IGP] 7835 RS350M [Mobility Radeon 9000 IGP]
@ -9469,7 +9474,7 @@
1682 211c GeForce 6600 256MB DDR DUAL DVI TV 1682 211c GeForce 6600 256MB DDR DUAL DVI TV
00f3 NV43 [GeForce 6200] 00f3 NV43 [GeForce 6200]
00f4 NV43 [GeForce 6600 LE] 00f4 NV43 [GeForce 6600 LE]
00f5 G71 [GeForce 7800 GS AGP] 00f5 G70/G71 [GeForce 7800 GS AGP]
00f6 NV43 [GeForce 6800 GS/XT] 00f6 NV43 [GeForce 6800 GS/XT]
1682 217e XFX GeForce 6800 XTreme 256MB DDR3 AGP 1682 217e XFX GeForce 6800 XTreme 256MB DDR3 AGP
00f8 NV45GL [Quadro FX 3400/4400] 00f8 NV45GL [Quadro FX 3400/4400]
@ -11705,6 +11710,7 @@
128a GK208B 128a GK208B
128b GK208B [GeForce GT 710] 128b GK208B [GeForce GT 710]
1043 85f7 GT710-SL-1GD5 1043 85f7 GT710-SL-1GD5
1043 8770 GT710-4H-SL-2GD5
128c GK208B 128c GK208B
1290 GK208M [GeForce GT 730M] 1290 GK208M [GeForce GT 730M]
103c 2afa GeForce GT 730A 103c 2afa GeForce GT 730A
@ -12097,7 +12103,7 @@
21c4 TU116 [GeForce GTX 1660 SUPER] 21c4 TU116 [GeForce GTX 1660 SUPER]
21d1 TU116BM [GeForce GTX 1660 Ti Mobile] 21d1 TU116BM [GeForce GTX 1660 Ti Mobile]
2204 GA102 [GeForce RTX 3090] 2204 GA102 [GeForce RTX 3090]
2206 GA102 [GeForce RTX 3080 10GB / 20GB] 2206 GA102 [GeForce RTX 3080]
10de 146d GA102 [GeForce RTX 3080 20GB] 10de 146d GA102 [GeForce RTX 3080 20GB]
1462 3892 RTX 3080 10GB GAMING X TRIO 1462 3892 RTX 3080 10GB GAMING X TRIO
222b GA102 [GeForce RTX 3090 Engineering Sample] 222b GA102 [GeForce RTX 3090 Engineering Sample]
@ -12105,17 +12111,18 @@
2230 GA102GL [RTX A6000] 2230 GA102GL [RTX A6000]
223f GA102GL 223f GA102GL
2482 GA104 [GeForce RTX 3070 Ti] 2482 GA104 [GeForce RTX 3070 Ti]
2484 GA104 [GeForce RTX 3070 8GB / 16GB] 2484 GA104 [GeForce RTX 3070]
10de 146b GA104 [GeForce RTX 3070] 10de 146b GA104 [GeForce RTX 3070]
10de 14ae GA104 [GeForce RTX 3070 16GB] 10de 14ae GA104 [GeForce RTX 3070 16GB]
2486 GA104 [GeForce RTX 3060 Ti] 2486 GA104 [GeForce RTX 3060 Ti]
249c GA104M [GeForce RTX 3070 Mobile / Max-Q] 249c GA104M [GeForce RTX 3070 Mobile / Max-Q 8GB/16GB]
249d GA104M [GeForce RTX 3070 Mobile / Max-Q] 249d GA104M [GeForce RTX 3070 Mobile / Max-Q]
24ac GA104 [GeForce RTX 30x0 Engineering Sample] 24ac GA104 [GeForce RTX 30x0 Engineering Sample]
24ad GA104 [GeForce RTX 3060 Engineering Sample] 24ad GA104 [GeForce RTX 3060 Engineering Sample]
24af GA104 [GeForce RTX 3070 Engineering Sample] 24af GA104 [GeForce RTX 3070 Engineering Sample]
24bf GA104 [GeForce RTX 3070 Engineering Sample] 24bf GA104 [GeForce RTX 3070 Engineering Sample]
24dc GA104 [GeForce RTX 3070 16GB Engineering Sample] 24dc GA104M [GeForce RTX 3070 Mobile 16GB]
24dd GA104M [GeForce RTX 3070 Mobile / Max-Q]
252f GA106 [GeForce RTX 3060 Engineering Sample] 252f GA106 [GeForce RTX 3060 Engineering Sample]
25af GA107 [GeForce RTX 3050 Engineering Sample] 25af GA107 [GeForce RTX 3050 Engineering Sample]
10df Emulex Corporation 10df Emulex Corporation
@ -12349,6 +12356,7 @@
5288 RTS5288 PCI Express Card Reader 5288 RTS5288 PCI Express Card Reader
5289 RTL8411 PCI Express Card Reader 5289 RTL8411 PCI Express Card Reader
1043 1457 K55A Laptop 1043 1457 K55A Laptop
5762 RTS5763DL NVMe SSD Controller
8029 RTL-8029(AS) 8029 RTL-8029(AS)
10b8 2011 EZ-Card (SMC1208) 10b8 2011 EZ-Card (SMC1208)
10ec 8029 RTL-8029(AS) 10ec 8029 RTL-8029(AS)
@ -19546,6 +19554,7 @@
0070 6902 WinTV HVR-4000-HD 0070 6902 WinTV HVR-4000-HD
0070 7801 WinTV HVR-1800 MCE 0070 7801 WinTV HVR-1800 MCE
0070 9001 Nova-T DVB-T 0070 9001 Nova-T DVB-T
0070 9002 Nova-T DVB-T Model 909
0070 9200 Nova-SE2 DVB-S 0070 9200 Nova-SE2 DVB-S
0070 9202 Nova-S-Plus DVB-S 0070 9202 Nova-S-Plus DVB-S
0070 9402 WinTV-HVR1100 DVB-T/Hybrid 0070 9402 WinTV-HVR1100 DVB-T/Hybrid
@ -20255,9 +20264,12 @@
5001 WD Black NVMe SSD 5001 WD Black NVMe SSD
5002 WD Black 2018 / PC SN720 NVMe SSD 5002 WD Black 2018 / PC SN720 NVMe SSD
5003 WD Black 2018 / PC SN520 NVMe SSD 5003 WD Black 2018 / PC SN520 NVMe SSD
5004 PC SN520 NVMe SSD
5005 PC SN520 NVMe SSD
5006 WD Black 2019/PC SN750 NVMe SSD 5006 WD Black 2019/PC SN750 NVMe SSD
5009 WD Blue SN550 NVMe SSD 5009 WD Blue SN550 NVMe SSD
15b7 5009 WD Blue SN550 NVMe SSD 15b7 5009 WD Blue SN550 NVMe SSD
500d WD Ultrastar DC SN340 NVMe SSD
15b8 ADDI-DATA GmbH 15b8 ADDI-DATA GmbH
1001 APCI1516 SP controller (16 digi outputs) 1001 APCI1516 SP controller (16 digi outputs)
1003 APCI1032 SP controller (32 digi inputs w/ opto coupler) 1003 APCI1032 SP controller (32 digi inputs w/ opto coupler)
@ -21743,6 +21755,8 @@
0185 NT40A01 Network Adapter 0185 NT40A01 Network Adapter
01a5 NT200A01 Network Adapter 01a5 NT200A01 Network Adapter
01c5 NT200A02 Network Adapter 01c5 NT200A02 Network Adapter
01d5 NT50B01 Network Adapter
01e5 NT100A01 Network Adapter
18f6 NextIO 18f6 NextIO
1000 [Nexsis] Switch Virtual P2P PCIe Bridge 1000 [Nexsis] Switch Virtual P2P PCIe Bridge
1001 [Texsis] Switch Virtual P2P PCIe Bridge 1001 [Texsis] Switch Virtual P2P PCIe Bridge
@ -22137,6 +22151,7 @@
0250 JMC250 PCI Express Gigabit Ethernet Controller 0250 JMC250 PCI Express Gigabit Ethernet Controller
0260 JMC260 PCI Express Fast Ethernet Controller 0260 JMC260 PCI Express Fast Ethernet Controller
0368 JMB368 IDE controller 0368 JMB368 IDE controller
0585 JMB58x AHCI SATA controller
2360 JMB360 AHCI Controller 2360 JMB360 AHCI Controller
2361 JMB361 AHCI/IDE 2361 JMB361 AHCI/IDE
1462 7235 P965 Neo MS-7235 mainboard 1462 7235 P965 Neo MS-7235 mainboard
@ -22281,7 +22296,7 @@
19e5 d303 Hi1822 SP522 (2*8G FC) 19e5 d303 Hi1822 SP522 (2*8G FC)
19e5 d306 Hi1822 SP523 (2*8G FC) 19e5 d306 Hi1822 SP523 (2*8G FC)
1710 iBMA Virtual Network Adapter 1710 iBMA Virtual Network Adapter
1711 Hi1710 [iBMC Intelligent Management system chip w/VGA support] 1711 Hi171x Series [iBMC Intelligent Management system chip w/VGA support]
1822 Hi1822 Family (4*25GE) 1822 Hi1822 Family (4*25GE)
19e5 d129 Hi1822 SP570 (4*25GE) 19e5 d129 Hi1822 SP570 (4*25GE)
19e5 d136 Hi1822 SP580 (4*25GE) 19e5 d136 Hi1822 SP580 (4*25GE)
@ -22382,13 +22397,16 @@
1a4a SLAC National Accelerator Lab TID-AIR 1a4a SLAC National Accelerator Lab TID-AIR
1000 MCOR Power Supply Controller 1000 MCOR Power Supply Controller
1010 AMC EVR - Stockholm Timing Board 1010 AMC EVR - Stockholm Timing Board
1020 Cluster On Board (COB) Ethernet Switch 1030 PGPCard - Gen3 GIGe Interface
2000 PGPCard - 4 Lane 2000 PGPCard - 4 Lane
2001 PGPCard - 8 Lane Plus EVR 2001 PGPCard - 8 Lane Plus EVR
2010 PCI-Express EVR 2010 PCI-Express EVR
# PC-260-101-03 2011 PCI-Express EVR - TPR Version
2020 PGP-GEN3 PCIe 2020 PGP-GEN3 PCIe - 8 Lane Plus EVR
2030 AXI Stream DAQ PCIe card 2030 AXI Stream DAQ PCIe card
2040 EXO PCIe TEM
3000 COB DTM V1
3001 COB DTM V2
1a51 Hectronic AB 1a51 Hectronic AB
1a55 Rohde & Schwarz DVS GmbH 1a55 Rohde & Schwarz DVS GmbH
0010 SDStationOEM 0010 SDStationOEM
@ -22595,10 +22613,12 @@
1b13 Jaton Corp 1b13 Jaton Corp
1b1a K&F Computing Research Co. 1b1a K&F Computing Research Co.
0e70 GRAPE 0e70 GRAPE
1b1c Corsair
1b21 ASMedia Technology Inc. 1b21 ASMedia Technology Inc.
0611 ASM1061 SATA IDE Controller 0611 ASM1061 SATA IDE Controller
0612 ASM1062 Serial ATA Controller 0612 ASM1062 Serial ATA Controller
1849 0612 Motherboard 1849 0612 Motherboard
1040 ASM1040 XHCI Controller
1042 ASM1042 SuperSpeed USB Host Controller 1042 ASM1042 SuperSpeed USB Host Controller
1043 1059 K53SM motherboard 1043 1059 K53SM motherboard
1043 8488 P8B WS Motherboard 1043 8488 P8B WS Motherboard
@ -22678,6 +22698,8 @@
1b4b Marvell Technology Group Ltd. 1b4b Marvell Technology Group Ltd.
0640 88SE9128 SATA III 6Gb/s RAID Controller 0640 88SE9128 SATA III 6Gb/s RAID Controller
2241 88NR2241 Non-Volatile memory controller 2241 88NR2241 Non-Volatile memory controller
1028 2112 BOSS-N1 Monolithic
1028 2113 BOSS-N1 Modular
1d49 0306 ThinkSystem M.2 NVMe 2-Bay RAID Enablement Kit 1d49 0306 ThinkSystem M.2 NVMe 2-Bay RAID Enablement Kit
1d49 0307 ThinkSystem 7mm NVMe 2-Bay Rear RAID Enablement Kit 1d49 0307 ThinkSystem 7mm NVMe 2-Bay Rear RAID Enablement Kit
9120 88SE9120 SATA 6Gb/s Controller 9120 88SE9120 SATA 6Gb/s Controller
@ -22747,6 +22769,16 @@
1b94 Signatec / Dynamic Signals Corp 1b94 Signatec / Dynamic Signals Corp
e400 PX14400 Dual Xilinx Virtex5 based Digitizer e400 PX14400 Dual Xilinx Virtex5 based Digitizer
1b96 Western Digital 1b96 Western Digital
2200 Ultrastar DC SN630 NVMe SSD
2201 Ultrastar DC SN630 NVMe SSD
2300 Ultrastar DC SN840 NVMe SSD
2400 Ultrastar DC SN640 NVMe SSD
2401 Ultrastar DC SN640 NVMe SSD
2402 Ultrastar DC SN640 NVMe SSD
2404 Ultrastar DC SN640 NVMe SSD
2500 Ultrastar DC SN840 NVMe SSD
3714 PC SN730 NVMe SSD
3734 PC SN730 NVMe SSD
1b9a XAVi Technologies Corp. 1b9a XAVi Technologies Corp.
1baa QNAP Systems, Inc. 1baa QNAP Systems, Inc.
1bad ReFLEX CES 1bad ReFLEX CES
@ -22985,6 +23017,7 @@
0305 Simulyzer-RT CompactPCI Serial CAN-1 card 0305 Simulyzer-RT CompactPCI Serial CAN-1 card
# supports 8x CAN (-FD) interfaces # supports 8x CAN (-FD) interfaces
0306 Simulyzer-RT CompactPCI Serial CAN-2 card (CAN-FD) 0306 Simulyzer-RT CompactPCI Serial CAN-2 card (CAN-FD)
0307 Simulyzer-RT CompactPCI Serial DIO-2 card [Xilinx Zynq UltraScale+]
1cd7 Nanjing Magewell Electronics Co., Ltd. 1cd7 Nanjing Magewell Electronics Co., Ltd.
0010 Pro Capture Endpoint 0010 Pro Capture Endpoint
0014 PRO CAPTURE AIO 4K PLUS 0014 PRO CAPTURE AIO 4K PLUS
@ -23159,6 +23192,8 @@
1d78 3105 D5457 U.2 3.2TB NVMe SSD 1d78 3105 D5457 U.2 3.2TB NVMe SSD
1d78 3107 D5457 U.2 6.4TB NVMe SSD 1d78 3107 D5457 U.2 6.4TB NVMe SSD
1d7c Aerotech, Inc. 1d7c Aerotech, Inc.
# Fiber-optic HyperWire motion control bus from Aerotech.
0001 HyperWire Adapter
1d82 NETINT Technologies Inc. 1d82 NETINT Technologies Inc.
0101 Codensity D400 SSD 0101 Codensity D400 SSD
0102 Codensity D408 PCIe Gen4 NVMe SSD 0102 Codensity D408 PCIe Gen4 NVMe SSD
@ -23207,6 +23242,7 @@
0011 IO Bridge 0011 IO Bridge
1da1 Teko Telecom S.r.l. 1da1 Teko Telecom S.r.l.
1da2 Sapphire Technology Limited 1da2 Sapphire Technology Limited
e26a Radeon R7 250
1da3 Habana Labs Ltd. 1da3 Habana Labs Ltd.
0001 HL-1000 AI Inference Accelerator [Goya] 0001 HL-1000 AI Inference Accelerator [Goya]
# PCIe accelerator card for Deep Learning training tasks # PCIe accelerator card for Deep Learning training tasks
@ -23344,6 +23380,8 @@
1028 210f Dell Ent NVMe FIPS CM6 MU 3.2TB 1028 210f Dell Ent NVMe FIPS CM6 MU 3.2TB
1028 2110 Dell Ent NVMe FIPS CM6 MU 6.4TB 1028 2110 Dell Ent NVMe FIPS CM6 MU 6.4TB
1e0f 0001 Generic NVMe CM6 RI 3.84TB 1e0f 0001 Generic NVMe CM6 RI 3.84TB
0009 NVMe SSD
1e0f 0001 Toshiba RC500 NVMe SSD 500GB
1e17 Arnold & Richter Cine Technik GmbH & Co. Betriebs KG 1e17 Arnold & Richter Cine Technik GmbH & Co. Betriebs KG
1e24 Squirrels Research Labs 1e24 Squirrels Research Labs
0101 Acorn CLE-101 0101 Acorn CLE-101
@ -23359,9 +23397,38 @@
1e26 Fujitsu Client Computing Limited 1e26 Fujitsu Client Computing Limited
1e36 Shanghai Enflame Technology Co. Ltd 1e36 Shanghai Enflame Technology Co. Ltd
0001 T10 [CloudBlazer] 0001 T10 [CloudBlazer]
0002 T11 [CloudBlazer]
0003 T10s [CloudBlazer]
8011 I10 [CloudBlazer]
# nee Thinci, Inc # nee Thinci, Inc
1e38 Blaize, Inc 1e38 Blaize, Inc
0102 Xplorer X1600 0102 Xplorer X1600
1e3b Shenzhen DAPU Microelectronics Co., Ltd
1098 Haishen NVMe SSD
1e3b 0001 Enterprise NVMe SSD U.2 0.8TB (H2100)
1e3b 0002 Enterprise NVMe SSD U.2 0.96TB (H2200)
1e3b 0004 Enterprise NVMe SSD U.2 1.6TB (H2100)
1e3b 0005 Enterprise NVMe SSD U.2 1.92TB (H2200)
1e3b 0009 Enterprise NVMe SSD U.2 0.8TB (H3100)
1e3b 000a Enterprise NVMe SSD U.2 0.96TB (H3200)
1e3b 000c Enterprise NVMe SSD U.2 1.6TB (H3100)
1e3b 000d Enterprise NVMe SSD U.2 1.92TB (H3200)
1e3b 0014 Enterprise NVMe SSD U.2 3.2TB (H3100)
1e3b 0015 Enterprise NVMe SSD U.2 3.84TB (H3200)
1e3b 0021 Enterprise NVMe SSD U.2 6.4TB (H3100)
1e3b 0022 Enterprise NVMe SSD U.2 7.68TB (H3200)
1e3b 0061 Enterprise NVMe SSD HHHL 0.8TB (H2100)
1e3b 0062 Enterprise NVMe SSD HHHL 0.96TB (H2200)
1e3b 0064 Enterprise NVMe SSD HHHL 1.6TB (H2100)
1e3b 0065 Enterprise NVMe SSD HHHL 1.92TB (H2200)
1e3b 006c Enterprise NVMe SSD HHHL 0.8TB (H3100)
1e3b 006d Enterprise NVMe SSD HHHL 0.96TB (H3200)
1e3b 006f Enterprise NVMe SSD HHHL 1.6TB (H3100)
1e3b 0070 Enterprise NVMe SSD HHHL 1.92TB (H3200)
1e3b 007c Enterprise NVMe SSD HHHL 3.2TB (H3100)
1e3b 007d Enterprise NVMe SSD HHHL 3.84TB (H3200)
1e3b 007f Enterprise NVMe SSD HHHL 6.4TB (H3100)
1e3b 0080 Enterprise NVMe SSD HHHL 7.68TB (H3200)
1e3d Burlywood, Inc 1e3d Burlywood, Inc
1e49 Yangtze Memory Technologies Co.,Ltd 1e49 Yangtze Memory Technologies Co.,Ltd
1e4b MAXIO Technology (Hangzhou) Ltd. 1e4b MAXIO Technology (Hangzhou) Ltd.
@ -23389,6 +23456,7 @@
# aka SED Systems # aka SED Systems
1e94 Calian SED 1e94 Calian SED
1e95 Solid State Storage Technology Corporation 1e95 Solid State Storage Technology Corporation
1eab Hefei DATANG Storage Technology Co.,LTD.
1eae XFX Limited 1eae XFX Limited
1eb1 VeriSilicon Inc 1eb1 VeriSilicon Inc
1001 Video Accelerator 1001 Video Accelerator
@ -23473,7 +23541,7 @@
2348 Racore 2348 Racore
2010 8142 100VG/AnyLAN 2010 8142 100VG/AnyLAN
2646 Kingston Technology Company, Inc. 2646 Kingston Technology Company, Inc.
2263 A2000, M.2, 500GB 2263 A2000 NVMe SSD
270b Xantel Corporation 270b Xantel Corporation
270f Chaintech Computer Co. Ltd 270f Chaintech Computer Co. Ltd
2711 AVID Technology Inc. 2711 AVID Technology Inc.
@ -24895,6 +24963,8 @@
1028 1fe7 Express Flash NVMe 3.2TB 2.5" U.2 (P4600) 1028 1fe7 Express Flash NVMe 3.2TB 2.5" U.2 (P4600)
1028 1fe8 Express Flash NVMe 2.0TB HHHL AIC (P4600) 1028 1fe8 Express Flash NVMe 2.0TB HHHL AIC (P4600)
1028 1fe9 Express Flash NVMe 4.0TB HHHL AIC (P4600) 1028 1fe9 Express Flash NVMe 4.0TB HHHL AIC (P4600)
0b26 Thunderbolt 4 Bridge [Goshen Ridge 2020]
0b27 Thunderbolt 4 USB Controller [Goshen Ridge 2020]
0b60 NVMe DC SSD [3DNAND, Beta Rock Controller] 0b60 NVMe DC SSD [3DNAND, Beta Rock Controller]
1028 2060 NVMe SED MU U.2 1.6TB (P5600) 1028 2060 NVMe SED MU U.2 1.6TB (P5600)
1028 2061 NVMe SED MU U.2 3.2TB (P5600) 1028 2061 NVMe SED MU U.2 3.2TB (P5600)
@ -25933,6 +26003,10 @@
123f 82466GX Integrated Hot-Plug Controller (IHPC) 123f 82466GX Integrated Hot-Plug Controller (IHPC)
1240 82752 (752) AGP Graphics Accelerator 1240 82752 (752) AGP Graphics Accelerator
124b 82380FB (MPCI2) Mobile Docking Controller 124b 82380FB (MPCI2) Mobile Docking Controller
124c Ethernet Connection E823-L for backplane
124d Ethernet Connection E823-L for SFP
124e Ethernet Connection E823-L/X557-AT 10GBASE-T
124f Ethernet Connection E823-L 1GbE
1250 430HX - 82439HX TXC [Triton II] 1250 430HX - 82439HX TXC [Triton II]
1360 82806AA PCI64 Hub PCI Bridge 1360 82806AA PCI64 Hub PCI Bridge
1361 82806AA PCI64 Hub Controller (HRes) 1361 82806AA PCI64 Hub Controller (HRes)
@ -25984,6 +26058,7 @@
151b CVL2510 Thunderbolt Controller [Light Peak 2C 2010] 151b CVL2510 Thunderbolt Controller [Light Peak 2C 2010]
151c 82599 10 Gigabit TN Network Connection 151c 82599 10 Gigabit TN Network Connection
108e 7b13 Dual 10GBASE-T LP 108e 7b13 Dual 10GBASE-T LP
151d Ethernet Connection E823-L for QSFP
1520 I350 Ethernet Controller Virtual Function 1520 I350 Ethernet Controller Virtual Function
1521 I350 Gigabit Network Connection 1521 I350 Gigabit Network Connection
1028 0602 Gigabit 2P I350-t LOM 1028 0602 Gigabit 2P I350-t LOM
@ -27055,6 +27130,7 @@
1f26 Atom processor C2000 RAID SATA2 Controller 1f26 Atom processor C2000 RAID SATA2 Controller
1f27 Atom processor C2000 RAID SATA2 Controller 1f27 Atom processor C2000 RAID SATA2 Controller
1f2c Atom processor C2000 USB Enhanced Host Controller 1f2c Atom processor C2000 USB Enhanced Host Controller
0200 1028 Atom C2338 on Dell 0K8Y0N motherboard
1f2e Atom processor C2000 RAID SATA2 Controller 1f2e Atom processor C2000 RAID SATA2 Controller
1f2f Atom processor C2000 RAID SATA2 Controller 1f2f Atom processor C2000 RAID SATA2 Controller
1f30 Atom processor C2000 2-Port IDE SATA3 Controller 1f30 Atom processor C2000 2-Port IDE SATA3 Controller
@ -27897,6 +27973,9 @@
250f 82820 820 (Camino) Chipset AGP Bridge 250f 82820 820 (Camino) Chipset AGP Bridge
2520 82805AA MTH Memory Translator Hub 2520 82805AA MTH Memory Translator Hub
2521 82804AA MRH-S Memory Repeater Hub for SDRAM 2521 82804AA MRH-S Memory Repeater Hub for SDRAM
2522 NVMe Optane Memory Series
8086 3806 Optane Memory 16GB
8086 3810 Optane Memory M10 16GB
2526 Wireless-AC 9260 2526 Wireless-AC 9260
2530 82850 850 (Tehama) Chipset Host Bridge (MCH) 2530 82850 850 (Tehama) Chipset Host Bridge (MCH)
1028 00c7 Dimension 8100 1028 00c7 Dimension 8100
@ -31462,14 +31541,21 @@
9a0b Volume Management Device NVMe RAID Controller 9a0b Volume Management Device NVMe RAID Controller
9a13 Tiger Lake-LP Thunderbolt USB Controller 9a13 Tiger Lake-LP Thunderbolt USB Controller
9a14 11th Gen Core Processor Host Bridge/DRAM Registers 9a14 11th Gen Core Processor Host Bridge/DRAM Registers
9a17 Tiger Lake-H Thunderbolt USB Controller
9a1b Tiger Lake-LP Thunderbolt NHI #0 9a1b Tiger Lake-LP Thunderbolt NHI #0
9a1d Tiger Lake-LP Thunderbolt NHI #1 9a1d Tiger Lake-LP Thunderbolt NHI #1
9a1f Tiger Lake-H Thunderbolt NHI #0
9a21 Tiger Lake-H Thunderbolt NHI #1
9a23 Tiger Lake-LP Thunderbolt PCI Express Root Port #0 9a23 Tiger Lake-LP Thunderbolt PCI Express Root Port #0
9a25 Tiger Lake-LP Thunderbolt PCI Express Root Port #1 9a25 Tiger Lake-LP Thunderbolt PCI Express Root Port #1
9a27 Tiger Lake-LP Thunderbolt PCI Express Root Port #2 9a27 Tiger Lake-LP Thunderbolt PCI Express Root Port #2
9a29 Tiger Lake-LP Thunderbolt PCI Express Root Port #3 9a29 Tiger Lake-LP Thunderbolt PCI Express Root Port #3
9a2b Tiger Lake-H Thunderbolt PCI Express Root Port #0
9a2d Tiger Lake-H Thunderbolt PCI Express Root Port #1
9a2f Tiger Lake-H Thunderbolt PCI Express Root Port #2
9a31 Tiger Lake-H Thunderbolt PCI Express Root Port #3
9a33 Tiger Lake Trace Hub 9a33 Tiger Lake Trace Hub
9a49 UHD Graphics 9a49 Iris Xe Graphics
9b41 UHD Graphics 9b41 UHD Graphics
9b44 10th Gen Core Processor Host Bridge/DRAM Registers 9b44 10th Gen Core Processor Host Bridge/DRAM Registers
9b54 10th Gen Core Processor Host Bridge/DRAM Registers 9b54 10th Gen Core Processor Host Bridge/DRAM Registers
@ -33166,6 +33252,9 @@ C 08 Generic system peripheral
05 SD Host controller 05 SD Host controller
06 IOMMU 06 IOMMU
80 System peripheral 80 System peripheral
99 Timing Card
# PTP Grandmaster Source Clock
01 TAP Timing Card
C 09 Input device controller C 09 Input device controller
00 Keyboard controller 00 Keyboard controller
01 Digitizer Pen 01 Digitizer Pen

View File

@ -112,6 +112,7 @@
These special IDs are primarily useful as a quick way to persistently make the currently booted boot loader These special IDs are primarily useful as a quick way to persistently make the currently booted boot loader
entry the default choice, or to upgrade the default boot loader entry for the next boot to the default boot entry the default choice, or to upgrade the default boot loader entry for the next boot to the default boot
loader entry for all future boots, but may be used for other operations too. loader entry for all future boots, but may be used for other operations too.
When an empty string ("") is specified as an ID, then the corresponding EFI variable will be unset.
</para></listitem> </para></listitem>
</varlistentry> </varlistentry>

View File

@ -301,8 +301,8 @@ s - Service VLAN, m - Two-port MAC Relay (TPMR)
</term> </term>
<listitem><para>Reconfigure network interfaces. Takes interface name or index number. Note that <listitem><para>Reconfigure network interfaces. Takes interface name or index number. Note that
this does not reload <filename>.netdev</filename> or <filename>.network</filename> this does not reload <filename>.netdev</filename> or <filename>.network</filename>
corresponding to the the specified interface. So, if you edit config files, it is necessary to corresponding to the specified interface. So, if you edit config files, it is necessary to call
call <command>networkctl reload</command> first to apply new settings.</para></listitem> <command>networkctl reload</command> first to apply new settings.</para></listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>

View File

@ -198,6 +198,26 @@
<entry>Verity data for the ia64 root file system partition</entry> <entry>Verity data for the ia64 root file system partition</entry>
</row> </row>
<row>
<entry><constant>root-riscv32</constant></entry>
<entry>Root file system partition for the RISC-V 32-bit architecture</entry>
</row>
<row>
<entry><constant>root-riscv32-verity</constant></entry>
<entry>Verity data for the RISC-V 32-bit root file system partition</entry>
</row>
<row>
<entry><constant>root-riscv64</constant></entry>
<entry>Root file system partition for the RISC-V 64-bit architecture</entry>
</row>
<row>
<entry><constant>root-riscv64-verity</constant></entry>
<entry>Verity data for the RISC-V 64-bit root file system partition</entry>
</row>
<row> <row>
<entry><constant>usr</constant></entry> <entry><constant>usr</constant></entry>
<entry><filename>/usr/</filename> file system partition type appropriate for the local architecture (an alias for an architecture <filename>/usr/</filename> file system partition type listed below, e.g. <constant>usr-x86-64</constant>)</entry> <entry><filename>/usr/</filename> file system partition type appropriate for the local architecture (an alias for an architecture <filename>/usr/</filename> file system partition type listed below, e.g. <constant>usr-x86-64</constant>)</entry>
@ -267,6 +287,28 @@
<entry><constant>usr-ia64-verity</constant></entry> <entry><constant>usr-ia64-verity</constant></entry>
<entry>Verity data for the ia64 <filename>/usr/</filename> file system partition</entry> <entry>Verity data for the ia64 <filename>/usr/</filename> file system partition</entry>
</row> </row>
<row>
<entry><constant>usr-riscv32</constant></entry>
<entry><filename>/usr/</filename> file system partition for the RISC-V 32-bit architecture</entry>
</row>
<row>
<entry><constant>usr-riscv32-verity</constant></entry>
<entry>Verity data for the RISC-V 32-bit <filename>/usr/</filename> file system partition</entry>
</row>
<row>
<entry><constant>usr-riscv64</constant></entry>
<entry><filename>/usr/</filename> file system partition for the RISC-V 64-bit architecture</entry>
</row>
<row>
<entry><constant>usr-riscv64-verity</constant></entry>
<entry>Verity data for the RISC-V 64-bit <filename>/usr/</filename> file system partition</entry>
</row>
</tbody> </tbody>
</tgroup> </tgroup>
</table> </table>

View File

@ -199,7 +199,7 @@
domains (TLDs) that are not known by the DNS root server. This domains (TLDs) that are not known by the DNS root server. This
logic does not work in all private zone setups.</para> logic does not work in all private zone setups.</para>
<para>Defaults to <literal>allow-downgrade</literal></para> <para>Defaults to <literal>allow-downgrade</literal>.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
@ -233,13 +233,11 @@
resolver is not capable of authenticating the server, so it is resolver is not capable of authenticating the server, so it is
vulnerable to "man-in-the-middle" attacks.</para> vulnerable to "man-in-the-middle" attacks.</para>
<para>In addition to this global DNSOverTLS setting <para>In addition to this global <varname>DNSOverTLS=</varname> setting
<citerefentry><refentrytitle>systemd-networkd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> <citerefentry><refentrytitle>systemd-networkd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
also maintains per-link DNSOverTLS settings. For system DNS also maintains per-link <varname>DNSOverTLS=</varname> settings. For system DNS servers (see above), only the global
servers (see above), only the global DNSOverTLS setting is in <varname>DNSOverTLS=</varname> setting is in effect. For per-link DNS servers the per-link setting is in effect, unless
effect. For per-link DNS servers the per-link it is unset in which case the global setting is used instead.</para>
setting is in effect, unless it is unset in which case the
global setting is used instead.</para>
<para>Defaults to off.</para> <para>Defaults to off.</para>
</listitem> </listitem>

View File

@ -292,11 +292,13 @@
attached to the request object path, interface and member. Finally, the property callbacks attached to the request object path, interface and member. Finally, the property callbacks
attached to the request object path, interface and member are called. If the final callback attached to the request object path, interface and member are called. If the final callback
returns zero, an error reply is sent back to the caller indicating no matching object for the returns zero, an error reply is sent back to the caller indicating no matching object for the
request was found. Note that you can return a positive integer from a callback without request was found.</para>
<para>Note that you can return a positive integer from a callback without
immediately sending a reply. This informs sd-bus this callback will take responsibility for immediately sending a reply. This informs sd-bus this callback will take responsibility for
replying to the request without forcing the callback to produce a reply immediately. This allows replying to the request without forcing the callback to produce a reply immediately. This allows
a callback to perform any number of asynchronous operations required to construct a reply. Note a callback to perform any number of asynchronous operations required to construct a reply.
that if producing a reply takes too long, the method call will time out at the caller.</para> However, if producing a reply takes too long, the method call will time out at the caller.</para>
<para>If a callback was invoked to handle a request that expects a reply and the callback <para>If a callback was invoked to handle a request that expects a reply and the callback
returns a negative value, the value is interpreted as a negative errno-style error code and sent returns a negative value, the value is interpreted as a negative errno-style error code and sent
@ -369,8 +371,8 @@
with the message the callback was invoked with. Parameter <replaceable>flags</replaceable> is a with the message the callback was invoked with. Parameter <replaceable>flags</replaceable> is a
combination of flags, see below.</para> combination of flags, see below.</para>
<constant>SD_BUS_METHOD_WITH_ARGS()</constant> is a shorthand for calling <para><constant>SD_BUS_METHOD_WITH_ARGS()</constant> is a shorthand for calling
<constant>SD_BUS_METHOD_WITH_ARGS_OFFSET()</constant> with an offset of zero. <constant>SD_BUS_METHOD_WITH_ARGS_OFFSET()</constant> with an offset of zero.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
@ -404,7 +406,7 @@
<varlistentry> <varlistentry>
<term><constant>SD_BUS_SIGNAL_WITH_ARGS()</constant></term> <term><constant>SD_BUS_SIGNAL_WITH_ARGS()</constant></term>
<listitem><para>>Declare a D-Bus signal with the name <replaceable>member</replaceable> and <listitem><para>Declare a D-Bus signal with the name <replaceable>member</replaceable> and
arguments <replaceable>args</replaceable>. <replaceable>args</replaceable> expects a sequence of arguments <replaceable>args</replaceable>. <replaceable>args</replaceable> expects a sequence of
argument type/name pairs wrapped in the <constant>SD_BUS_ARGS()</constant> macro. The elements at argument type/name pairs wrapped in the <constant>SD_BUS_ARGS()</constant> macro. The elements at
even indices in this list describe the types of the signal's arguments. The signal's parameter even indices in this list describe the types of the signal's arguments. The signal's parameter

View File

@ -89,6 +89,12 @@
input parameter; it can be used to propagate errors from the callback handler, it will not receive any input parameter; it can be used to propagate errors from the callback handler, it will not receive any
error that was received as method reply.)</para> error that was received as method reply.)</para>
<para>The message <parameter>m</parameter> passed to the callback is only borrowed, that is, the callback should
not call <citerefentry><refentrytitle>sd_bus_message_unref</refentrytitle><manvolnum>3</manvolnum></citerefentry>
on it. If the callback wants to hold on to the message beyond the lifetime of the callback, it needs to call
<citerefentry><refentrytitle>sd_bus_message_ref</refentrytitle><manvolnum>3</manvolnum></citerefentry> to create a
new reference.</para>
<para>If <parameter>usec</parameter> is zero, the default D-Bus method call timeout is used. See <para>If <parameter>usec</parameter> is zero, the default D-Bus method call timeout is used. See
<citerefentry><refentrytitle>sd_bus_get_method_call_timeout</refentrytitle><manvolnum>3</manvolnum></citerefentry>. <citerefentry><refentrytitle>sd_bus_get_method_call_timeout</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
</para> </para>

View File

@ -57,6 +57,7 @@
<funcprototype> <funcprototype>
<funcdef>int sd_bus_message_append_array_space</funcdef> <funcdef>int sd_bus_message_append_array_space</funcdef>
<paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
<paramdef>char <parameter>type</parameter></paramdef> <paramdef>char <parameter>type</parameter></paramdef>
<paramdef>size_t <parameter>size</parameter></paramdef> <paramdef>size_t <parameter>size</parameter></paramdef>
<paramdef>void **<parameter>ptr</parameter></paramdef> <paramdef>void **<parameter>ptr</parameter></paramdef>

View File

@ -44,6 +44,7 @@
<funcprototype> <funcprototype>
<funcdef>int <function>sd_bus_message_peek_type</function></funcdef> <funcdef>int <function>sd_bus_message_peek_type</function></funcdef>
<paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
<paramdef>char *<parameter>type</parameter></paramdef> <paramdef>char *<parameter>type</parameter></paramdef>
<paramdef>const char **<parameter>contents</parameter></paramdef> <paramdef>const char **<parameter>contents</parameter></paramdef>
</funcprototype> </funcprototype>

View File

@ -188,9 +188,9 @@
<title>Return Value</title> <title>Return Value</title>
<para> <para>
On success, <function>sd_bus_message_read_basic()</function> returns 0 or On success, <function>sd_bus_message_read_basic()</function> returns a positive integer.
a positive integer. On failure, it returns a negative errno-style error If the end of the currently opened array has been reached, it returns 0.
code. On failure, it returns a negative errno-style error code.
</para> </para>
<refsect2 id='errors'> <refsect2 id='errors'>

View File

@ -59,7 +59,7 @@
message is no longer needed. If <parameter>ret</parameter> is not <constant>NULL</constant>, progress was made, but no message was message is no longer needed. If <parameter>ret</parameter> is not <constant>NULL</constant>, progress was made, but no message was
processed, <parameter>*ret</parameter> is set to <constant>NULL</constant>.</para> processed, <parameter>*ret</parameter> is set to <constant>NULL</constant>.</para>
<para>If a the bus object is connected to an <para>If the bus object is connected to an
<citerefentry><refentrytitle>sd-event</refentrytitle><manvolnum>3</manvolnum></citerefentry> event loop (with <citerefentry><refentrytitle>sd-event</refentrytitle><manvolnum>3</manvolnum></citerefentry> event loop (with
<citerefentry><refentrytitle>sd_bus_attach_event</refentrytitle><manvolnum>3</manvolnum></citerefentry>), it is not <citerefentry><refentrytitle>sd_bus_attach_event</refentrytitle><manvolnum>3</manvolnum></citerefentry>), it is not
necessary to call <function>sd_bus_process()</function> directly as it is invoked automatically when necessary to call <function>sd_bus_process()</function> directly as it is invoked automatically when

View File

@ -73,8 +73,8 @@
<refsect1> <refsect1>
<title>Configuration</title> <title>Configuration</title>
<para>For programs started by <command>systemd</command> process resource limits can be set by directive <para>For programs started by <command>systemd</command>, process resource limits can be set by directive
<varname>LimitCore=</varname>, see <varname>LimitCORE=</varname>, see
<citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>. <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
</para> </para>
@ -94,10 +94,10 @@
<citerefentry><refentrytitle>systemd-sysctl</refentrytitle><manvolnum>8</manvolnum></citerefentry>. <citerefentry><refentrytitle>systemd-sysctl</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
</para> </para>
<para>In order to by used in the <option>--backtrace</option> mode, an appropriate backtrace <para>In order to be used in the <option>--backtrace</option> mode, an appropriate backtrace
handler must be installed on the sender side. For example, in case of handler must be installed on the sender side. For example, in case of
<citerefentry project='die-net'><refentrytitle>python</refentrytitle><manvolnum>1</manvolnum></citerefentry>, this <citerefentry project='die-net'><refentrytitle>python</refentrytitle><manvolnum>1</manvolnum></citerefentry>, this
means a <varname>sys.excepthook</varname> must installed, see means a <varname>sys.excepthook</varname> must be installed, see
<ulink url="https://github.com/keszybz/systemd-coredump-python">systemd-coredump-python</ulink>. <ulink url="https://github.com/keszybz/systemd-coredump-python">systemd-coredump-python</ulink>.
</para> </para>

View File

@ -109,6 +109,18 @@
<entry><filename>/</filename></entry> <entry><filename>/</filename></entry>
<entry>On Itanium systems, the first Itanium root partition on the disk the EFI ESP is located on is mounted to the root directory <filename>/</filename>.</entry> <entry>On Itanium systems, the first Itanium root partition on the disk the EFI ESP is located on is mounted to the root directory <filename>/</filename>.</entry>
</row> </row>
<row>
<entry>60d5a7fe-8e7d-435c-b714-3dd8162144e1</entry>
<entry><filename>Root Partition (RISCV-V 32)</filename></entry>
<entry><filename>/</filename></entry>
<entry>On RISC-V 32-bit systems, the first RISCV-V 32-bit root partition on the disk the EFI ESP is located on is mounted to the root directory <filename>/</filename>.</entry>
</row>
<row>
<entry>72ec70a6-cf74-40e6-bd49-4bda08e8f224</entry>
<entry><filename>Root Partition (RISCV-V 64)</filename></entry>
<entry><filename>/</filename></entry>
<entry>On RISC-V 64-bit systems, the first RISCV-V 64-bit root partition on the disk the EFI ESP is located on is mounted to the root directory <filename>/</filename>.</entry>
</row>
<row> <row>
<entry>933ac7e1-2eb4-4f13-b844-0e14e2aef915</entry> <entry>933ac7e1-2eb4-4f13-b844-0e14e2aef915</entry>
<entry>Home Partition</entry> <entry>Home Partition</entry>

View File

@ -361,8 +361,10 @@
<listitem><para>Configure the default value for the per-unit <varname>TasksMax=</varname> setting. See <listitem><para>Configure the default value for the per-unit <varname>TasksMax=</varname> setting. See
<citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry> <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for details. This setting applies to all unit types that support resource control settings, with the exception for details. This setting applies to all unit types that support resource control settings, with the exception
of slice units. Defaults to 15%, which equals 4915 with the kernel's defaults on the host, but might be smaller of slice units. Defaults to 15% of the sysctl setting <varname>kernel.pid_max=</varname> or root cgroup <varname>pids.max</varname>.
in OS containers.</para></listitem> Kernel has a default value for <varname>kernel.pid_max=</varname> and an algorithm of counting in case of more than 32 cores.
For example with the default <varname>kernel.pid_max=</varname>, <varname>DefaultTasksMax=</varname> defaults to 4915,
but might be greater in other systems or smaller in OS containers.</para></listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>

View File

@ -273,18 +273,21 @@
<varlistentry> <varlistentry>
<term><option>none</option></term> <term><option>none</option></term>
<listitem> <listitem>
<para>Keeps the MAC address assigned by the kernel.</para> <para>Keeps the MAC address assigned by the kernel. Or use the MAC address specified in
<varname>MACAddress=</varname>.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
</variablelist> </variablelist>
<para>An empty string assignment is equivalent to setting <literal>none</literal>.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
<term><varname>MACAddress=</varname></term> <term><varname>MACAddress=</varname></term>
<listitem> <listitem>
<para>The MAC address to use, if no <para>The interface MAC address to use. For this setting to take effect,
<varname>MACAddressPolicy=</varname> <varname>MACAddressPolicy=</varname> must either be unset, empty, or <literal>none</literal>.
is specified.</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>

View File

@ -84,7 +84,7 @@
</row></thead> </row></thead>
<tbody> <tbody>
<row><entry><varname>bond</varname></entry> <row><entry><varname>bond</varname></entry>
<entry>A bond device is an aggregation of all its slave devices. See <ulink url="https://www.kernel.org/doc/Documentation/networking/bonding.txt">Linux Ethernet Bonding Driver HOWTO</ulink> for details.Local configuration</entry></row> <entry>A bond device is an aggregation of all its slave devices. See <ulink url="https://www.kernel.org/doc/Documentation/networking/bonding.txt">Linux Ethernet Bonding Driver HOWTO</ulink> for details.</entry></row>
<row><entry><varname>bridge</varname></entry> <row><entry><varname>bridge</varname></entry>
<entry>A bridge device is a software switch, and each of its slave devices and the bridge itself are ports of the switch.</entry></row> <entry>A bridge device is a software switch, and each of its slave devices and the bridge itself are ports of the switch.</entry></row>
@ -754,7 +754,8 @@
<varlistentry> <varlistentry>
<term><varname>Id=</varname></term> <term><varname>Id=</varname></term>
<listitem> <listitem>
<para>Specifies the Virtual Network Identifier (VNI) to use. Ranges [0-16777215]. This field is mandatory.</para> <para>Specifies the Virtual Network Identifier (VNI) to use, a number between 0 and 16777215. This
field is mandatory.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
@ -766,7 +767,7 @@
<varlistentry> <varlistentry>
<term><varname>TOS=</varname></term> <term><varname>TOS=</varname></term>
<listitem> <listitem>
<para>Specifies the TOS value to use in outgoing packets. Ranges [1-255].</para> <para>Specifies the TOS value to use in outgoing packets. Takes a number between 1 and 255.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
@ -818,8 +819,9 @@
<varlistentry> <varlistentry>
<term><varname>Independent=</varname></term> <term><varname>Independent=</varname></term>
<listitem> <listitem>
<para>Takes a boolean. When true, the vxlan interface is created without underlying interfaces. <para>Takes a boolean. When true, the vxlan interface is created without any underlying network
Defaults to <literal>false</literal>.</para> interface. Defaults to false, which means that a .network file that requests this tunnel using
<varname>Tunnel=</varname> is required for the tunnel to be created.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
</variablelist> </variablelist>
@ -1276,9 +1278,10 @@
<varlistentry> <varlistentry>
<term><varname>Independent=</varname></term> <term><varname>Independent=</varname></term>
<listitem> <listitem>
<para>Takes a boolean. When true tunnel does not require .network file. Created as "tunnel@NONE". <para>Takes a boolean. When false (the default), the tunnel is always created over some network
Defaults to <literal>false</literal>. device, and a .network file that requests this tunnel using <varname>Tunnel=</varname> is required
</para> for the tunnel to be created. When true, the tunnel is created independently of any network as
"tunnel@NONE".</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
@ -1770,8 +1773,8 @@
<varlistentry> <varlistentry>
<term><varname>AdActorSystem=</varname></term> <term><varname>AdActorSystem=</varname></term>
<listitem> <listitem>
<para>Specifies the 802.3ad system mac address. This can not be either <para>Specifies the 802.3ad system MAC address. This cannot be a null or multicast address.
<constant>NULL</constant> or <constant>Multicast</constant>.</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
@ -1948,10 +1951,8 @@
<varlistentry> <varlistentry>
<term><varname>Independent=</varname></term> <term><varname>Independent=</varname></term>
<listitem> <listitem>
<para>Takes a boolean. If set to <literal>no</literal>, the xfrm interface should have an <para>Takes a boolean. If false (the default), the xfrm interface must have an underlying device
underlying device which can be used for hardware offloading. Defaults to <literal>no</literal>. which can be used for hardware offloading.</para>
See <citerefentry><refentrytitle>systemd.network</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for how to configure the underlying device.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
</variablelist> </variablelist>

View File

@ -825,7 +825,7 @@ IPv6Token=prefixstable:2002:da8:1::</programlisting></para>
configured on another link. By default, an address within each delegated prefix will be configured on another link. By default, an address within each delegated prefix will be
assigned, and the prefixes will be announced through IPv6 Router Advertisement when assigned, and the prefixes will be announced through IPv6 Router Advertisement when
<varname>IPv6SendRA=</varname> is enabled. Such default settings can be configured in <varname>IPv6SendRA=</varname> is enabled. Such default settings can be configured in
[DHCPv6PrefixDelegation] section.</para></listitem> [DHCPv6PrefixDelegation] section. Defaults to disabled.</para></listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
<term><varname>IPv6MTUBytes=</varname></term> <term><varname>IPv6MTUBytes=</varname></term>
@ -1170,7 +1170,9 @@ IPv6Token=prefixstable:2002:da8:1::</programlisting></para>
<varlistentry> <varlistentry>
<term><varname>FirewallMark=</varname></term> <term><varname>FirewallMark=</varname></term>
<listitem> <listitem>
<para>Specifies the iptables firewall mark value to match (a number between 1 and 4294967295).</para> <para>Specifies the iptables firewall mark value to match (a number between 1 and
4294967295). Optionally, the firewall mask (also a number between 1 and 4294967295) can be
suffixed with a slash (<literal>/</literal>), e.g., <literal>7/255</literal>.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
@ -2086,9 +2088,11 @@ IPv6Token=prefixstable:2002:da8:1::</programlisting></para>
<varlistentry> <varlistentry>
<term><varname>DHCPv6Client=</varname></term> <term><varname>DHCPv6Client=</varname></term>
<listitem> <listitem>
<para>Takes a boolean, or the special value <literal>always</literal>. When true (the default), the DHCPv6 client will be started when the <para>Takes a boolean, or the special value <literal>always</literal>. When true or
RA has the managed or other information flag. If set to <literal>always</literal>, the DHCPv6 client will be started even if there is no <literal>always</literal>, the DHCPv6 client will be started when the RA has the managed or
managed or other information flag in the RA.</para> other information flag. If set to <literal>always</literal>, the DHCPv6 client will also be
started in managed mode when neither managed nor other information flag is set in the RA.
Defaults to true.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
</variablelist> </variablelist>

View File

@ -1734,10 +1734,9 @@
</varlistentry> </varlistentry>
</variablelist> </variablelist>
<para>The following specifiers are interpreted in the Install <para>The following specifiers are interpreted in the Install section:
section: %n, %N, %p, %i, %j, %g, %G, %U, %u, %m, %H, %b, %v. For their %a, %b, %B, %g, %G, %H, %i, %j, %l, %m, %n, %N, %o, %p, %u, %U, %v, %w, %W, %%.
meaning see the next section. For their meaning see the next section.</para>
</para>
</refsect1> </refsect1>
<refsect1> <refsect1>
@ -1787,6 +1786,16 @@
<entry>Unescaped filename</entry> <entry>Unescaped filename</entry>
<entry>This is either the unescaped instance name (if applicable) with <filename>/</filename> prepended (if applicable), or the unescaped prefix name prepended with <filename>/</filename>. This implements unescaping according to the rules for escaping absolute file system paths discussed above.</entry> <entry>This is either the unescaped instance name (if applicable) with <filename>/</filename> prepended (if applicable), or the unescaped prefix name prepended with <filename>/</filename>. This implements unescaping according to the rules for escaping absolute file system paths discussed above.</entry>
</row> </row>
<row>
<entry><literal>%g</literal></entry>
<entry>User group</entry>
<entry>This is the name of the group running the service manager instance. In case of the system manager this resolves to <literal>root</literal>.</entry>
</row>
<row>
<entry><literal>%G</literal></entry>
<entry>User GID</entry>
<entry>This is the numeric GID of the user running the service manager instance. In case of the system manager this resolves to <literal>0</literal>.</entry>
</row>
<row> <row>
<entry><literal>%h</literal></entry> <entry><literal>%h</literal></entry>
<entry>User home directory</entry> <entry>User home directory</entry>
@ -1801,11 +1810,6 @@ Note that this setting is <emphasis>not</emphasis> influenced by the <varname>Us
<entry>Host name</entry> <entry>Host name</entry>
<entry>The hostname of the running system at the point in time the unit configuration is loaded.</entry> <entry>The hostname of the running system at the point in time the unit configuration is loaded.</entry>
</row> </row>
<row>
<entry><literal>%l</literal></entry>
<entry>Short host name</entry>
<entry>The hostname of the running system at the point in time the unit configuration is loaded, truncated at the first dot to remove any domain component.</entry>
</row>
<row> <row>
<entry><literal>%i</literal></entry> <entry><literal>%i</literal></entry>
<entry>Instance name</entry> <entry>Instance name</entry>
@ -1826,13 +1830,17 @@ Note that this setting is <emphasis>not</emphasis> influenced by the <varname>Us
<entry>Unescaped final component of the prefix</entry> <entry>Unescaped final component of the prefix</entry>
<entry>Same as <literal>%j</literal>, but with escaping undone.</entry> <entry>Same as <literal>%j</literal>, but with escaping undone.</entry>
</row> </row>
<row>
<entry><literal>%l</literal></entry>
<entry>Short host name</entry>
<entry>The hostname of the running system at the point in time the unit configuration is loaded, truncated at the first dot to remove any domain component.</entry>
</row>
<row> <row>
<entry><literal>%L</literal></entry> <entry><literal>%L</literal></entry>
<entry>Log directory root</entry> <entry>Log directory root</entry>
<entry>This is either <filename>/var/log</filename> (for the system manager) or the path <literal>$XDG_CONFIG_HOME</literal> resolves to with <filename index="false">/log</filename> appended (for user managers).</entry> <entry>This is either <filename>/var/log</filename> (for the system manager) or the path <literal>$XDG_CONFIG_HOME</literal> resolves to with <filename index="false">/log</filename> appended (for user managers).</entry>
</row> </row>
<xi:include href="standard-specifiers.xml" xpointer="m"/> <xi:include href="standard-specifiers.xml" xpointer="m"/>
<xi:include href="standard-specifiers.xml" xpointer="o"/>
<row> <row>
<entry><literal>%n</literal></entry> <entry><literal>%n</literal></entry>
<entry>Full unit name</entry> <entry>Full unit name</entry>
@ -1843,6 +1851,7 @@ Note that this setting is <emphasis>not</emphasis> influenced by the <varname>Us
<entry>Full unit name</entry> <entry>Full unit name</entry>
<entry>Same as <literal>%n</literal>, but with the type suffix removed.</entry> <entry>Same as <literal>%n</literal>, but with the type suffix removed.</entry>
</row> </row>
<xi:include href="standard-specifiers.xml" xpointer="o"/>
<row> <row>
<entry><literal>%p</literal></entry> <entry><literal>%p</literal></entry>
<entry>Prefix name</entry> <entry>Prefix name</entry>
@ -1869,16 +1878,6 @@ Note that this setting is <emphasis>not</emphasis> influenced by the <varname>Us
<entry>This is either <filename>/run/</filename> (for the system manager) or the path <literal>$XDG_RUNTIME_DIR</literal> resolves to (for user managers).</entry> <entry>This is either <filename>/run/</filename> (for the system manager) or the path <literal>$XDG_RUNTIME_DIR</literal> resolves to (for user managers).</entry>
</row> </row>
<xi:include href="standard-specifiers.xml" xpointer="T"/> <xi:include href="standard-specifiers.xml" xpointer="T"/>
<row>
<entry><literal>%g</literal></entry>
<entry>User group</entry>
<entry>This is the name of the group running the service manager instance. In case of the system manager this resolves to <literal>root</literal>.</entry>
</row>
<row>
<entry><literal>%G</literal></entry>
<entry>User GID</entry>
<entry>This is the numeric GID of the user running the service manager instance. In case of the system manager this resolves to <literal>0</literal>.</entry>
</row>
<row> <row>
<entry><literal>%u</literal></entry> <entry><literal>%u</literal></entry>
<entry>User name</entry> <entry>User name</entry>

View File

@ -639,6 +639,16 @@ w- /proc/sys/vm/swappiness - - - - 10</programlisting></para>
<entry>System or user cache directory</entry> <entry>System or user cache directory</entry>
<entry>In <option>--user</option> mode, this is the same as <varname>$XDG_CACHE_HOME</varname>, and <filename>/var/cache</filename> otherwise.</entry> <entry>In <option>--user</option> mode, this is the same as <varname>$XDG_CACHE_HOME</varname>, and <filename>/var/cache</filename> otherwise.</entry>
</row> </row>
<row>
<entry><literal>%g</literal></entry>
<entry>User group</entry>
<entry>This is the name of the group running the command. In case of the system instance this resolves to <literal>root</literal>.</entry>
</row>
<row>
<entry><literal>%G</literal></entry>
<entry>User GID</entry>
<entry>This is the numeric GID of the group running the command. In case of the system instance this resolves to <constant>0</constant>.</entry>
</row>
<row> <row>
<entry><literal>%h</literal></entry> <entry><literal>%h</literal></entry>
<entry>User home directory</entry> <entry>User home directory</entry>
@ -664,16 +674,6 @@ w- /proc/sys/vm/swappiness - - - - 10</programlisting></para>
<entry>In <option>--user</option> mode, this is the same <varname>$XDG_RUNTIME_DIR</varname>, and <filename>/run/</filename> otherwise.</entry> <entry>In <option>--user</option> mode, this is the same <varname>$XDG_RUNTIME_DIR</varname>, and <filename>/run/</filename> otherwise.</entry>
</row> </row>
<xi:include href="standard-specifiers.xml" xpointer="T"/> <xi:include href="standard-specifiers.xml" xpointer="T"/>
<row>
<entry><literal>%g</literal></entry>
<entry>User group</entry>
<entry>This is the name of the group running the command. In case of the system instance this resolves to <literal>root</literal>.</entry>
</row>
<row>
<entry><literal>%G</literal></entry>
<entry>User GID</entry>
<entry>This is the numeric GID of the group running the command. In case of the system instance this resolves to <constant>0</constant>.</entry>
</row>
<row> <row>
<entry><literal>%u</literal></entry> <entry><literal>%u</literal></entry>
<entry>User name</entry> <entry>User name</entry>

View File

@ -132,7 +132,7 @@
<para>The string can be prefixed with a lowercase e (e"string\n") to mark the string as <para>The string can be prefixed with a lowercase e (e"string\n") to mark the string as
<ulink url="https://en.wikipedia.org/wiki/Escape_sequences_in_C#Table_of_escape_sequences">C-style escaped</ulink>. <ulink url="https://en.wikipedia.org/wiki/Escape_sequences_in_C#Table_of_escape_sequences">C-style escaped</ulink>.
For example, e"string\n" is parsed as 7 characters: 6 lowercase letters and a newline. For example, e"string\n" is parsed as 7 characters: 6 lowercase letters and a newline.
This can be useful for writting special characters when a kernel driver requires them.</para> This can be useful for writing special characters when a kernel driver requires them.</para>
<para>Please note that <constant>NUL</constant> is not allowed in either string variant.</para> <para>Please note that <constant>NUL</constant> is not allowed in either string variant.</para>
</refsect2> </refsect2>

View File

@ -1074,6 +1074,7 @@ else
libcurl = [] libcurl = []
endif endif
conf.set10('HAVE_LIBCURL', have) conf.set10('HAVE_LIBCURL', have)
conf.set10('CURL_NO_OLDIES', get_option('mode') == 'developer')
want_libidn = get_option('libidn') want_libidn = get_option('libidn')
want_libidn2 = get_option('libidn2') want_libidn2 = get_option('libidn2')
@ -1419,7 +1420,7 @@ if have == 'auto'
else else
have = have == 'true' have = have == 'true'
if have and get_option('mode') != 'developer' if have and get_option('mode') != 'developer'
error('oomd is not available in release mode (yet)') warning('oomd is not ready for release mode (yet)')
endif endif
endif endif
conf.set10('ENABLE_OOMD', have) conf.set10('ENABLE_OOMD', have)
@ -1594,6 +1595,7 @@ generate_gperfs = find_program('tools/generate-gperfs.py')
subdir('po') subdir('po')
subdir('catalog') subdir('catalog')
subdir('src/libudev')
subdir('src/systemd') subdir('src/systemd')
subdir('src/basic') subdir('src/basic')
subdir('src/libsystemd') subdir('src/libsystemd')
@ -1673,7 +1675,6 @@ update_dbus_docs_py = find_program('tools/update-dbus-docs.py')
# usually, but not always, installed in /bin. # usually, but not always, installed in /bin.
public_programs = [] public_programs = []
subdir('src/libudev')
subdir('src/shared') subdir('src/shared')
subdir('src/core') subdir('src/core')
subdir('src/shutdown') subdir('src/shutdown')
@ -3438,7 +3439,7 @@ endif
fuzzer_exes = [] fuzzer_exes = []
if get_option('tests') != 'false' if fuzz_tests or fuzzer_build
foreach tuple : fuzzers foreach tuple : fuzzers
sources = tuple[0] sources = tuple[0]
link_with = tuple[1].length() > 0 ? tuple[1] : [libshared] link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
@ -3560,7 +3561,7 @@ foreach tuple : sanitizers
if name != prev if name != prev
if want_tests == 'false' if want_tests == 'false'
message('Not compiling @0@ because tests is set to false'.format(name)) message('Not compiling @0@ because tests is set to false'.format(name))
elif slow_tests or fuzz_tests elif fuzz_tests
exe = custom_target( exe = custom_target(
name, name,
output : name, output : name,
@ -3570,12 +3571,12 @@ foreach tuple : sanitizers
'@OUTPUT@'], '@OUTPUT@'],
build_by_default : true) build_by_default : true)
else else
message('Not compiling @0@ because slow-tests/fuzz-tests is set to false'.format(name)) message('Not compiling @0@ because fuzz-tests is set to false'.format(name))
endif endif
endif endif
prev = name prev = name
if want_tests != 'false' and (slow_tests or fuzz_tests) if fuzz_tests
test('@0@:@1@:@2@'.format(b, c, sanitizer), test('@0@:@1@:@2@'.format(b, c, sanitizer),
env, env,
env : ['UBSAN_OPTIONS=print_stacktrace=1:print_summary=1:halt_on_error=1'], env : ['UBSAN_OPTIONS=print_stacktrace=1:print_summary=1:halt_on_error=1'],

View File

@ -6,13 +6,14 @@
# Boyuan Yang <073plan@gmail.com>, 2015. # Boyuan Yang <073plan@gmail.com>, 2015.
# Jeff Bai <jeffbai@aosc.xyz>, 2016. # Jeff Bai <jeffbai@aosc.xyz>, 2016.
# Charles Lee <lchopn@gmail.com>, 2020. # Charles Lee <lchopn@gmail.com>, 2020.
# Whired Planck <fungdaat31@outlook.com>, 2020.
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: systemd\n" "Project-Id-Version: systemd\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-19 18:02+0200\n" "POT-Creation-Date: 2020-08-19 18:02+0200\n"
"PO-Revision-Date: 2020-09-24 04:29+0000\n" "PO-Revision-Date: 2020-11-26 11:35+0000\n"
"Last-Translator: Charles Lee <lchopn@gmail.com>\n" "Last-Translator: Whired Planck <fungdaat31@outlook.com>\n"
"Language-Team: Chinese (Simplified) <https://translate.fedoraproject.org/" "Language-Team: Chinese (Simplified) <https://translate.fedoraproject.org/"
"projects/systemd/master/zh_CN/>\n" "projects/systemd/master/zh_CN/>\n"
"Language: zh_CN\n" "Language: zh_CN\n"
@ -20,7 +21,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.2.2\n" "X-Generator: Weblate 4.3.2\n"
#: src/core/org.freedesktop.systemd1.policy.in:22 #: src/core/org.freedesktop.systemd1.policy.in:22
msgid "Send passphrase back to system" msgid "Send passphrase back to system"
@ -67,70 +68,56 @@ msgstr "重新载入 systemd 状态需要认证。"
#: src/home/org.freedesktop.home1.policy:13 #: src/home/org.freedesktop.home1.policy:13
msgid "Create a home area" msgid "Create a home area"
msgstr "" msgstr "创建一个家区域"
#: src/home/org.freedesktop.home1.policy:14 #: src/home/org.freedesktop.home1.policy:14
#, fuzzy
#| msgid "Authentication is required to reload the systemd state."
msgid "Authentication is required to create a user's home area." msgid "Authentication is required to create a user's home area."
msgstr "重新载入 systemd 状态需要认证。" msgstr "创建用户家区域需要认证。"
#: src/home/org.freedesktop.home1.policy:23 #: src/home/org.freedesktop.home1.policy:23
msgid "Remove a home area" msgid "Remove a home area"
msgstr "" msgstr "移除一个家区域"
#: src/home/org.freedesktop.home1.policy:24 #: src/home/org.freedesktop.home1.policy:24
#, fuzzy
#| msgid "Authentication is required to reload the systemd state."
msgid "Authentication is required to remove a user's home area." msgid "Authentication is required to remove a user's home area."
msgstr "重新载入 systemd 状态需要认证。" msgstr "移除用户家区域需要认证。"
#: src/home/org.freedesktop.home1.policy:33 #: src/home/org.freedesktop.home1.policy:33
msgid "Check credentials of a home area" msgid "Check credentials of a home area"
msgstr "" msgstr "检查家区域凭证"
#: src/home/org.freedesktop.home1.policy:34 #: src/home/org.freedesktop.home1.policy:34
#, fuzzy
#| msgid ""
#| "Authentication is required to manage active sessions, users and seats."
msgid "" msgid ""
"Authentication is required to check credentials against a user's home area." "Authentication is required to check credentials against a user's home area."
msgstr "管理活动会话、用户与会话座位需要认证。" msgstr "根据用户家区域检查凭证需要认证。"
#: src/home/org.freedesktop.home1.policy:43 #: src/home/org.freedesktop.home1.policy:43
msgid "Update a home area" msgid "Update a home area"
msgstr "" msgstr "更新一个家区域"
# Pay attention to the concept of "seat". # Pay attention to the concept of "seat".
# #
# To fully understand the meaning, please refer to session management in old ConsoleKit and new systemd-logind. # To fully understand the meaning, please refer to session management in old ConsoleKit and new systemd-logind.
#: src/home/org.freedesktop.home1.policy:44 #: src/home/org.freedesktop.home1.policy:44
#, fuzzy
#| msgid "Authentication is required to attach a device to a seat."
msgid "Authentication is required to update a user's home area." msgid "Authentication is required to update a user's home area."
msgstr "允许将设备附加至某个会话座位需要认证。" msgstr "更新用户家区域需要认证。"
#: src/home/org.freedesktop.home1.policy:53 #: src/home/org.freedesktop.home1.policy:53
msgid "Resize a home area" msgid "Resize a home area"
msgstr "" msgstr "调整家区域大小"
#: src/home/org.freedesktop.home1.policy:54 #: src/home/org.freedesktop.home1.policy:54
#, fuzzy
#| msgid "Authentication is required to set a wall message"
msgid "Authentication is required to resize a user's home area." msgid "Authentication is required to resize a user's home area."
msgstr "设置 wall 消息需要认证。" msgstr "调整家区域大小需要认证。"
#: src/home/org.freedesktop.home1.policy:63 #: src/home/org.freedesktop.home1.policy:63
msgid "Change password of a home area" msgid "Change password of a home area"
msgstr "" msgstr "更改家区域的密码"
#: src/home/org.freedesktop.home1.policy:64 #: src/home/org.freedesktop.home1.policy:64
#, fuzzy
#| msgid ""
#| "Authentication is required to manage active sessions, users and seats."
msgid "" msgid ""
"Authentication is required to change the password of a user's home area." "Authentication is required to change the password of a user's home area."
msgstr "管理活动会话、用户与会话座位需要认证。" msgstr "更改家区域密码需要认证。"
#: src/hostname/org.freedesktop.hostname1.policy:20 #: src/hostname/org.freedesktop.hostname1.policy:20
msgid "Set hostname" msgid "Set hostname"
@ -148,11 +135,10 @@ msgstr "设置静态主机名"
# #
# There were some discussions, like https://lists.fedoraprojects.org/pipermail/trans-zh_cn/2012-December/001347.html # There were some discussions, like https://lists.fedoraprojects.org/pipermail/trans-zh_cn/2012-December/001347.html
#: src/hostname/org.freedesktop.hostname1.policy:31 #: src/hostname/org.freedesktop.hostname1.policy:31
#, fuzzy
msgid "" msgid ""
"Authentication is required to set the statically configured local hostname, " "Authentication is required to set the statically configured local hostname, "
"as well as the pretty hostname." "as well as the pretty hostname."
msgstr "设静态本地主机名或美观主机名需要认证。" msgstr "设静态本地主机名或美观主机名需要认证。"
#: src/hostname/org.freedesktop.hostname1.policy:41 #: src/hostname/org.freedesktop.hostname1.policy:41
msgid "Set machine information" msgid "Set machine information"
@ -164,13 +150,11 @@ msgstr "设置本地机器信息需要认证。"
#: src/hostname/org.freedesktop.hostname1.policy:51 #: src/hostname/org.freedesktop.hostname1.policy:51
msgid "Get product UUID" msgid "Get product UUID"
msgstr "" msgstr "获取产品 UUID"
#: src/hostname/org.freedesktop.hostname1.policy:52 #: src/hostname/org.freedesktop.hostname1.policy:52
#, fuzzy
#| msgid "Authentication is required to reload '$(unit)'."
msgid "Authentication is required to get product UUID." msgid "Authentication is required to get product UUID."
msgstr "重新载入“$(unit)”需要认证。" msgstr "获取产品 UUID 需要认证。"
#: src/import/org.freedesktop.import1.policy:22 #: src/import/org.freedesktop.import1.policy:22
msgid "Import a VM or container image" msgid "Import a VM or container image"
@ -300,10 +284,8 @@ msgid "Allow non-logged-in user to run programs"
msgstr "允许未登录用户运行程序" msgstr "允许未登录用户运行程序"
#: src/login/org.freedesktop.login1.policy:118 #: src/login/org.freedesktop.login1.policy:118
#, fuzzy
#| msgid "Authentication is required to run programs as a non-logged-in user."
msgid "Explicit request is required to run programs as a non-logged-in user." msgid "Explicit request is required to run programs as a non-logged-in user."
msgstr "允许未登录用户运行程序需要认证。" msgstr "要以未登录用户运行程序,需要明确请求。"
#: src/login/org.freedesktop.login1.policy:127 #: src/login/org.freedesktop.login1.policy:127
msgid "Allow non-logged-in users to run programs" msgid "Allow non-logged-in users to run programs"
@ -389,10 +371,8 @@ msgid ""
msgstr "在其它应用程序阻止重启时重启系统需要认证。" msgstr "在其它应用程序阻止重启时重启系统需要认证。"
#: src/login/org.freedesktop.login1.policy:224 #: src/login/org.freedesktop.login1.policy:224
#, fuzzy
#| msgid "Hibernate the system"
msgid "Halt the system" msgid "Halt the system"
msgstr "休眠系统" msgstr "停止系统"
#: src/login/org.freedesktop.login1.policy:225 #: src/login/org.freedesktop.login1.policy:225
msgid "Authentication is required to halt the system." msgid "Authentication is required to halt the system."
@ -492,13 +472,11 @@ msgstr "对活动会话进行锁定或解锁需要认证。"
#: src/login/org.freedesktop.login1.policy:341 #: src/login/org.freedesktop.login1.policy:341
msgid "Set the reboot \"reason\" in the kernel" msgid "Set the reboot \"reason\" in the kernel"
msgstr "" msgstr "在内核中设定重启“原因”"
#: src/login/org.freedesktop.login1.policy:342 #: src/login/org.freedesktop.login1.policy:342
#, fuzzy
#| msgid "Authentication is required to set the system timezone."
msgid "Authentication is required to set the reboot \"reason\" in the kernel." msgid "Authentication is required to set the reboot \"reason\" in the kernel."
msgstr "设置系统时区需要认证。" msgstr "在内核中设定重启“原因”需要认证。"
#: src/login/org.freedesktop.login1.policy:352 #: src/login/org.freedesktop.login1.policy:352
msgid "Indicate to the firmware to boot to setup interface" msgid "Indicate to the firmware to boot to setup interface"
@ -512,31 +490,23 @@ msgstr "向固件发出启动时进入设置界面的指令需要认证。"
#: src/login/org.freedesktop.login1.policy:363 #: src/login/org.freedesktop.login1.policy:363
msgid "Indicate to the boot loader to boot to the boot loader menu" msgid "Indicate to the boot loader to boot to the boot loader menu"
msgstr "" msgstr "指示引导加载程序启动至引导加载程序菜单"
#: src/login/org.freedesktop.login1.policy:364 #: src/login/org.freedesktop.login1.policy:364
#, fuzzy
#| msgid ""
#| "Authentication is required to indicate to the firmware to boot to setup "
#| "interface."
msgid "" msgid ""
"Authentication is required to indicate to the boot loader to boot to the " "Authentication is required to indicate to the boot loader to boot to the "
"boot loader menu." "boot loader menu."
msgstr "向固件发出启动时进入设置界面的指令需要认证。" msgstr "指示引导加载程序启动至引导加载程序菜单需要认证。"
#: src/login/org.freedesktop.login1.policy:374 #: src/login/org.freedesktop.login1.policy:374
msgid "Indicate to the boot loader to boot a specific entry" msgid "Indicate to the boot loader to boot a specific entry"
msgstr "" msgstr "指示引导加载程序启动指定条目"
#: src/login/org.freedesktop.login1.policy:375 #: src/login/org.freedesktop.login1.policy:375
#, fuzzy
#| msgid ""
#| "Authentication is required to indicate to the firmware to boot to setup "
#| "interface."
msgid "" msgid ""
"Authentication is required to indicate to the boot loader to boot into a " "Authentication is required to indicate to the boot loader to boot into a "
"specific boot loader entry." "specific boot loader entry."
msgstr "向固件发出启动时进入设置界面的指令需要认证。" msgstr "指示引导加载程序启动入指定引导加载条目需要认证。"
#: src/login/org.freedesktop.login1.policy:385 #: src/login/org.freedesktop.login1.policy:385
msgid "Set a wall message" msgid "Set a wall message"
@ -548,13 +518,11 @@ msgstr "设置 wall 消息需要认证。"
#: src/login/org.freedesktop.login1.policy:395 #: src/login/org.freedesktop.login1.policy:395
msgid "Change Session" msgid "Change Session"
msgstr "" msgstr "更改会话"
#: src/login/org.freedesktop.login1.policy:396 #: src/login/org.freedesktop.login1.policy:396
#, fuzzy
#| msgid "Authentication is required to set the local hostname."
msgid "Authentication is required to change the virtual terminal." msgid "Authentication is required to change the virtual terminal."
msgstr "设置本地主机名需要认证。" msgstr "更改虚拟终端需要认证。"
#: src/machine/org.freedesktop.machine1.policy:22 #: src/machine/org.freedesktop.machine1.policy:22
msgid "Log into a local container" msgid "Log into a local container"
@ -629,10 +597,8 @@ msgid "Set NTP servers"
msgstr "设置 NTP 服务器" msgstr "设置 NTP 服务器"
#: src/network/org.freedesktop.network1.policy:23 #: src/network/org.freedesktop.network1.policy:23
#, fuzzy
#| msgid "Authentication is required to set the system time."
msgid "Authentication is required to set NTP servers." msgid "Authentication is required to set NTP servers."
msgstr "设置系统时间需要认证。" msgstr "设定 NTP 服务器需要认证。"
#: src/network/org.freedesktop.network1.policy:33 #: src/network/org.freedesktop.network1.policy:33
#: src/resolve/org.freedesktop.resolve1.policy:44 #: src/resolve/org.freedesktop.resolve1.policy:44
@ -641,10 +607,8 @@ msgstr "设置 DNS 服务器"
#: src/network/org.freedesktop.network1.policy:34 #: src/network/org.freedesktop.network1.policy:34
#: src/resolve/org.freedesktop.resolve1.policy:45 #: src/resolve/org.freedesktop.resolve1.policy:45
#, fuzzy
#| msgid "Authentication is required to set the system time."
msgid "Authentication is required to set DNS servers." msgid "Authentication is required to set DNS servers."
msgstr "设置系统时间需要认证。" msgstr "设定 DNS 服务器需要认证。"
#: src/network/org.freedesktop.network1.policy:44 #: src/network/org.freedesktop.network1.policy:44
#: src/resolve/org.freedesktop.resolve1.policy:55 #: src/resolve/org.freedesktop.resolve1.policy:55
@ -653,10 +617,8 @@ msgstr "设置域名"
#: src/network/org.freedesktop.network1.policy:45 #: src/network/org.freedesktop.network1.policy:45
#: src/resolve/org.freedesktop.resolve1.policy:56 #: src/resolve/org.freedesktop.resolve1.policy:56
#, fuzzy
#| msgid "Authentication is required to stop '$(unit)'."
msgid "Authentication is required to set domains." msgid "Authentication is required to set domains."
msgstr "停止“$(unit)”需要认证。" msgstr "设定域需要认证。"
#: src/network/org.freedesktop.network1.policy:55 #: src/network/org.freedesktop.network1.policy:55
#: src/resolve/org.freedesktop.resolve1.policy:66 #: src/resolve/org.freedesktop.resolve1.policy:66
@ -665,51 +627,43 @@ msgstr "设置默认路由"
#: src/network/org.freedesktop.network1.policy:56 #: src/network/org.freedesktop.network1.policy:56
#: src/resolve/org.freedesktop.resolve1.policy:67 #: src/resolve/org.freedesktop.resolve1.policy:67
#, fuzzy
#| msgid "Authentication is required to set the local hostname."
msgid "Authentication is required to set default route." msgid "Authentication is required to set default route."
msgstr "设置本地主机名需要认证。" msgstr "设定默认路由需要认证。"
#: src/network/org.freedesktop.network1.policy:66 #: src/network/org.freedesktop.network1.policy:66
#: src/resolve/org.freedesktop.resolve1.policy:77 #: src/resolve/org.freedesktop.resolve1.policy:77
msgid "Enable/disable LLMNR" msgid "Enable/disable LLMNR"
msgstr "" msgstr "启用/禁用 LLMNR"
#: src/network/org.freedesktop.network1.policy:67 #: src/network/org.freedesktop.network1.policy:67
#: src/resolve/org.freedesktop.resolve1.policy:78 #: src/resolve/org.freedesktop.resolve1.policy:78
#, fuzzy
#| msgid "Authentication is required to hibernate the system."
msgid "Authentication is required to enable or disable LLMNR." msgid "Authentication is required to enable or disable LLMNR."
msgstr "休眠系统需要认证。" msgstr "启用或禁用 LLMNR 需要认证。"
#: src/network/org.freedesktop.network1.policy:77 #: src/network/org.freedesktop.network1.policy:77
#: src/resolve/org.freedesktop.resolve1.policy:88 #: src/resolve/org.freedesktop.resolve1.policy:88
msgid "Enable/disable multicast DNS" msgid "Enable/disable multicast DNS"
msgstr "" msgstr "启用/禁用多播 DNS"
#: src/network/org.freedesktop.network1.policy:78 #: src/network/org.freedesktop.network1.policy:78
#: src/resolve/org.freedesktop.resolve1.policy:89 #: src/resolve/org.freedesktop.resolve1.policy:89
#, fuzzy
#| msgid "Authentication is required to log into the local host."
msgid "Authentication is required to enable or disable multicast DNS." msgid "Authentication is required to enable or disable multicast DNS."
msgstr "登入本地主机需要认证。" msgstr "启用或禁用多播 DNS 需要认证。"
#: src/network/org.freedesktop.network1.policy:88 #: src/network/org.freedesktop.network1.policy:88
#: src/resolve/org.freedesktop.resolve1.policy:99 #: src/resolve/org.freedesktop.resolve1.policy:99
msgid "Enable/disable DNS over TLS" msgid "Enable/disable DNS over TLS"
msgstr "" msgstr "启用/禁用 DNS over TLS"
#: src/network/org.freedesktop.network1.policy:89 #: src/network/org.freedesktop.network1.policy:89
#: src/resolve/org.freedesktop.resolve1.policy:100 #: src/resolve/org.freedesktop.resolve1.policy:100
#, fuzzy
#| msgid "Authentication is required to set the local hostname."
msgid "Authentication is required to enable or disable DNS over TLS." msgid "Authentication is required to enable or disable DNS over TLS."
msgstr "设置本地主机名需要认证。" msgstr "启用或禁用 DNS over TLS 需要认证。"
#: src/network/org.freedesktop.network1.policy:99 #: src/network/org.freedesktop.network1.policy:99
#: src/resolve/org.freedesktop.resolve1.policy:110 #: src/resolve/org.freedesktop.resolve1.policy:110
msgid "Enable/disable DNSSEC" msgid "Enable/disable DNSSEC"
msgstr "" msgstr "启用/禁用 DNSSEC"
#: src/network/org.freedesktop.network1.policy:100 #: src/network/org.freedesktop.network1.policy:100
#: src/resolve/org.freedesktop.resolve1.policy:111 #: src/resolve/org.freedesktop.resolve1.policy:111

View File

@ -20,7 +20,7 @@ create_container() {
# GPG key from keyserver", so retry a few times with different keyservers. # GPG key from keyserver", so retry a few times with different keyservers.
for keyserver in "" "keys.gnupg.net" "keys.openpgp.org" "keyserver.ubuntu.com"; do for keyserver in "" "keys.gnupg.net" "keys.openpgp.org" "keyserver.ubuntu.com"; do
for retry in {1..5}; do for retry in {1..5}; do
sudo lxc-create -n $CONTAINER -t download -- -d $DISTRO -r $RELEASE -a $ARCH --server us.images.linuxcontainers.org ${keyserver:+--keyserver "$keyserver"} && break 2 sudo lxc-create -n $CONTAINER -t download -- -d $DISTRO -r $RELEASE -a $ARCH ${keyserver:+--keyserver "$keyserver"} && break 2
sleep $((retry*retry)) sleep $((retry*retry))
done done
done done
@ -86,7 +86,7 @@ EOF
# disable autopkgtests which are not for upstream # disable autopkgtests which are not for upstream
sed -i '/# NOUPSTREAM/ q' debian/tests/control sed -i '/# NOUPSTREAM/ q' debian/tests/control
# enable more unit tests # enable more unit tests
sed -i '/^CONFFLAGS =/ s/=/= --werror -Dtests=unsafe -Dsplit-usr=true -Dslow-tests=true -Dman=true /' debian/rules sed -i '/^CONFFLAGS =/ s/=/= --werror -Dtests=unsafe -Dsplit-usr=true -Dslow-tests=true -Dfuzz-tests=true -Dman=true /' debian/rules
# no orig tarball # no orig tarball
echo '1.0' > debian/source/format echo '1.0' > debian/source/format

View File

@ -252,6 +252,7 @@ static int get_max_brightness(sd_device *device, unsigned *ret) {
if (max_brightness <= 0) if (max_brightness <= 0)
return log_device_warning_errno(device, SYNTHETIC_ERRNO(EINVAL), "Maximum brightness is 0, ignoring device."); return log_device_warning_errno(device, SYNTHETIC_ERRNO(EINVAL), "Maximum brightness is 0, ignoring device.");
log_device_debug(device, "Maximum brightness is %u", max_brightness);
*ret = max_brightness; *ret = max_brightness;
return 0; return 0;
} }
@ -348,6 +349,7 @@ static int read_brightness(sd_device *device, unsigned max_brightness, unsigned
goto use_brightness; goto use_brightness;
} }
log_device_debug(device, "Current actual_brightness is %u", brightness);
*ret_brightness = brightness; *ret_brightness = brightness;
return 0; return 0;
} }
@ -366,6 +368,7 @@ use_brightness:
"brightness=%u is larger than max_brightness=%u", "brightness=%u is larger than max_brightness=%u",
brightness, max_brightness); brightness, max_brightness);
log_device_debug(device, "Current brightness is %u", brightness);
*ret_brightness = brightness; *ret_brightness = brightness;
return 0; return 0;
} }
@ -456,10 +459,11 @@ static int run(int argc, char *argv[]) {
if (r > 0) { if (r > 0) {
r = safe_atou(value, &brightness); r = safe_atou(value, &brightness);
if (r < 0) { if (r < 0) {
log_error_errno(r, "Failed to parse saved brightness '%s', removing %s.", log_warning_errno(r, "Failed to parse saved brightness '%s', removing %s.",
value, saved); value, saved);
(void) unlink(saved); (void) unlink(saved);
} else { } else {
log_debug("Using saved brightness %u.", brightness);
if (clamp) if (clamp)
(void) clamp_brightness(device, true, max_brightness, &brightness); (void) clamp_brightness(device, true, max_brightness, &brightness);

View File

@ -50,6 +50,9 @@ int capability_from_name(const char *name) {
return sc->id; return sc->id;
} }
/* This is the number of capability names we are *compiled* with.
* For the max capability number of the currently-running kernel,
* use cap_last_cap(). */
int capability_list_length(void) { int capability_list_length(void) {
return (int) ELEMENTSOF(capability_names); return (int) ELEMENTSOF(capability_names);
} }

View File

@ -1875,9 +1875,8 @@ int cg_mask_supported(CGroupMask *ret) {
if (r > 0) { if (r > 0) {
_cleanup_free_ char *root = NULL, *controllers = NULL, *path = NULL; _cleanup_free_ char *root = NULL, *controllers = NULL, *path = NULL;
/* In the unified hierarchy we can read the supported /* In the unified hierarchy we can read the supported and accessible controllers from
* and accessible controllers from a the top-level * the top-level cgroup attribute */
* cgroup attribute */
r = cg_get_root_path(&root); r = cg_get_root_path(&root);
if (r < 0) if (r < 0)

View File

@ -1103,7 +1103,7 @@ int copy_file_atomic_full(
assert(from); assert(from);
assert(to); assert(to);
/* We try to use O_TMPFILE here to create the file if we can. Note that that only works if COPY_REPLACE is not /* We try to use O_TMPFILE here to create the file if we can. Note that this only works if COPY_REPLACE is not
* set though as we need to use linkat() for linking the O_TMPFILE file into the file system but that system * set though as we need to use linkat() for linking the O_TMPFILE file into the file system but that system
* call can't replace existing files. Hence, if COPY_REPLACE is set we create a temporary name in the file * call can't replace existing files. Hence, if COPY_REPLACE is set we create a temporary name in the file
* system right-away and unconditionally which we then can renameat() to the right name after we completed * system right-away and unconditionally which we then can renameat() to the right name after we completed

View File

@ -16,7 +16,7 @@
/* Those that can be escaped or double-quoted. /* Those that can be escaped or double-quoted.
* *
* Stricly speaking, ! does not need to be escaped, except in interactive * Strictly speaking, ! does not need to be escaped, except in interactive
* mode, but let's be extra nice to the user and quote ! in case this * mode, but let's be extra nice to the user and quote ! in case this
* output is ever used in interactive mode. */ * output is ever used in interactive mode. */
#define SHELL_NEED_QUOTES SHELL_NEED_ESCAPE GLOB_CHARS "'()<>|&;!" #define SHELL_NEED_QUOTES SHELL_NEED_ESCAPE GLOB_CHARS "'()<>|&;!"

View File

@ -810,7 +810,7 @@ int chase_symlinks(const char *path, const char *original_root, unsigned flags,
* *
* 3. With CHASE_STEP: in this case only a single step of the normalization is executed, i.e. only the first * 3. With CHASE_STEP: in this case only a single step of the normalization is executed, i.e. only the first
* symlink or ".." component of the path is resolved, and the resulting path is returned. This is useful if * symlink or ".." component of the path is resolved, and the resulting path is returned. This is useful if
* a caller wants to trace the a path through the file system verbosely. Returns < 0 on error, > 0 if the * a caller wants to trace the path through the file system verbosely. Returns < 0 on error, > 0 if the
* path is fully normalized, and == 0 for each normalization step. This may be combined with * path is fully normalized, and == 0 for each normalization step. This may be combined with
* CHASE_NONEXISTENT, in which case 1 is returned when a component is not found. * CHASE_NONEXISTENT, in which case 1 is returned when a component is not found.
* *

View File

@ -291,7 +291,7 @@ int iovw_put(struct iovec_wrapper *iovw, void *data, size_t len) {
return -E2BIG; return -E2BIG;
if (!GREEDY_REALLOC(iovw->iovec, iovw->size_bytes, iovw->count + 1)) if (!GREEDY_REALLOC(iovw->iovec, iovw->size_bytes, iovw->count + 1))
return log_oom(); return -ENOMEM;
iovw->iovec[iovw->count++] = IOVEC_MAKE(data, len); iovw->iovec[iovw->count++] = IOVEC_MAKE(data, len);
return 0; return 0;
@ -303,7 +303,7 @@ int iovw_put_string_field(struct iovec_wrapper *iovw, const char *field, const c
x = strjoin(field, value); x = strjoin(field, value);
if (!x) if (!x)
return log_oom(); return -ENOMEM;
r = iovw_put(iovw, x, strlen(x)); r = iovw_put(iovw, x, strlen(x));
if (r >= 0) if (r >= 0)

View File

@ -248,8 +248,8 @@ int khash_put(khash *h, const void *buffer, size_t size) {
int khash_put_iovec(khash *h, const struct iovec *iovec, size_t n) { int khash_put_iovec(khash *h, const struct iovec *iovec, size_t n) {
struct msghdr mh = { struct msghdr mh = {
mh.msg_iov = (struct iovec*) iovec, .msg_iov = (struct iovec*) iovec,
mh.msg_iovlen = n, .msg_iovlen = n,
}; };
ssize_t k; ssize_t k;

View File

@ -17,6 +17,20 @@
#if defined(__x86_64__) && defined(__ILP32__) #if defined(__x86_64__) && defined(__ILP32__)
# define systemd_SC_arch_bias(x) ((x) | /* __X32_SYSCALL_BIT */ 0x40000000) # define systemd_SC_arch_bias(x) ((x) | /* __X32_SYSCALL_BIT */ 0x40000000)
#elif defined(__ia64__)
# define systemd_SC_arch_bias(x) (1024 + (x))
#elif defined __alpha__
# define systemd_SC_arch_bias(x) (110 + (x))
#elif defined _MIPS_SIM
# if _MIPS_SIM == _MIPS_SIM_ABI32
# define systemd_SC_arch_bias(x) (4000 + (x))
# elif _MIPS_SIM == _MIPS_SIM_NABI32
# define systemd_SC_arch_bias(x) (6000 + (x))
# elif _MIPS_SIM == _MIPS_SIM_ABI64
# define systemd_SC_arch_bias(x) (5000 + (x))
# else
# error "Unknown MIPS ABI"
# endif
#else #else
# define systemd_SC_arch_bias(x) (x) # define systemd_SC_arch_bias(x) (x)
#endif #endif
@ -51,13 +65,11 @@ static inline int missing_pivot_root(const char *new_root, const char *put_old)
# define systemd_NR_memfd_create 350 # define systemd_NR_memfd_create 350
#elif defined _MIPS_SIM #elif defined _MIPS_SIM
# if _MIPS_SIM == _MIPS_SIM_ABI32 # if _MIPS_SIM == _MIPS_SIM_ABI32
# define systemd_NR_memfd_create 4354 # define systemd_NR_memfd_create systemd_SC_arch_bias(354)
# endif # elif _MIPS_SIM == _MIPS_SIM_NABI32
# if _MIPS_SIM == _MIPS_SIM_NABI32 # define systemd_NR_memfd_create systemd_SC_arch_bias(318)
# define systemd_NR_memfd_create 6318 # elif _MIPS_SIM == _MIPS_SIM_ABI64
# endif # define systemd_NR_memfd_create systemd_SC_arch_bias(314)
# if _MIPS_SIM == _MIPS_SIM_ABI64
# define systemd_NR_memfd_create 5314
# endif # endif
#elif defined __i386__ #elif defined __i386__
# define systemd_NR_memfd_create 356 # define systemd_NR_memfd_create 356
@ -105,7 +117,7 @@ static inline int missing_memfd_create(const char *name, unsigned int flags) {
#elif defined(__aarch64__) #elif defined(__aarch64__)
# define systemd_NR_getrandom 278 # define systemd_NR_getrandom 278
#elif defined(__ia64__) #elif defined(__ia64__)
# define systemd_NR_getrandom 1339 # define systemd_NR_getrandom systemd_SC_arch_bias(318)
#elif defined(__m68k__) #elif defined(__m68k__)
# define systemd_NR_getrandom 352 # define systemd_NR_getrandom 352
#elif defined(__s390x__) #elif defined(__s390x__)
@ -114,13 +126,11 @@ static inline int missing_memfd_create(const char *name, unsigned int flags) {
# define systemd_NR_getrandom 359 # define systemd_NR_getrandom 359
#elif defined _MIPS_SIM #elif defined _MIPS_SIM
# if _MIPS_SIM == _MIPS_SIM_ABI32 # if _MIPS_SIM == _MIPS_SIM_ABI32
# define systemd_NR_getrandom 4353 # define systemd_NR_getrandom systemd_SC_arch_bias(353)
# endif # elif _MIPS_SIM == _MIPS_SIM_NABI32
# if _MIPS_SIM == _MIPS_SIM_NABI32 # define systemd_NR_getrandom systemd_SC_arch_bias(317)
# define systemd_NR_getrandom 6317 # elif _MIPS_SIM == _MIPS_SIM_ABI64
# endif # define systemd_NR_getrandom systemd_SC_arch_bias(313)
# if _MIPS_SIM == _MIPS_SIM_ABI64
# define systemd_NR_getrandom 5313
# endif # endif
#elif defined(__arc__) #elif defined(__arc__)
# define systemd_NR_getrandom 278 # define systemd_NR_getrandom 278
@ -186,6 +196,14 @@ static inline pid_t missing_gettid(void) {
# define systemd_NR_name_to_handle_at 335 # define systemd_NR_name_to_handle_at 335
#elif defined(__arc__) #elif defined(__arc__)
# define systemd_NR_name_to_handle_at 264 # define systemd_NR_name_to_handle_at 264
#elif defined _MIPS_SIM
# if _MIPS_SIM == _MIPS_SIM_ABI32
# define systemd_NR_name_to_handle_at systemd_SC_arch_bias(339)
# elif _MIPS_SIM == _MIPS_SIM_NABI32
# define systemd_NR_name_to_handle_at systemd_SC_arch_bias(303)
# elif _MIPS_SIM == _MIPS_SIM_ABI64
# define systemd_NR_name_to_handle_at systemd_SC_arch_bias(298)
# endif
#else #else
# warning "name_to_handle_at number is not defined" # warning "name_to_handle_at number is not defined"
#endif #endif
@ -239,6 +257,14 @@ static inline int missing_name_to_handle_at(int fd, const char *name, struct fil
# define systemd_NR_setns 339 # define systemd_NR_setns 339
#elif defined(__arc__) #elif defined(__arc__)
# define systemd_NR_setns 268 # define systemd_NR_setns 268
#elif defined _MIPS_SIM
# if _MIPS_SIM == _MIPS_SIM_ABI32
# define systemd_NR_setns systemd_SC_arch_bias(344)
# elif _MIPS_SIM == _MIPS_SIM_NABI32
# define systemd_NR_setns systemd_SC_arch_bias(308)
# elif _MIPS_SIM == _MIPS_SIM_ABI64
# define systemd_NR_setns systemd_SC_arch_bias(303)
# endif
#else #else
# warning "setns() syscall number unknown for your architecture" # warning "setns() syscall number unknown for your architecture"
#endif #endif
@ -290,13 +316,11 @@ static inline pid_t raw_getpid(void) {
# define systemd_NR_renameat2 276 # define systemd_NR_renameat2 276
#elif defined _MIPS_SIM #elif defined _MIPS_SIM
# if _MIPS_SIM == _MIPS_SIM_ABI32 # if _MIPS_SIM == _MIPS_SIM_ABI32
# define systemd_NR_renameat2 4351 # define systemd_NR_renameat2 systemd_SC_arch_bias(351)
# endif # elif _MIPS_SIM == _MIPS_SIM_NABI32
# if _MIPS_SIM == _MIPS_SIM_NABI32 # define systemd_NR_renameat2 systemd_SC_arch_bias(315)
# define systemd_NR_renameat2 6315 # elif _MIPS_SIM == _MIPS_SIM_ABI64
# endif # define systemd_NR_renameat2 systemd_SC_arch_bias(311)
# if _MIPS_SIM == _MIPS_SIM_ABI64
# define systemd_NR_renameat2 5311
# endif # endif
#elif defined __i386__ #elif defined __i386__
# define systemd_NR_renameat2 353 # define systemd_NR_renameat2 353
@ -405,6 +429,14 @@ static inline key_serial_t missing_request_key(const char *type, const char *des
# define systemd_NR_copy_file_range 379 # define systemd_NR_copy_file_range 379
#elif defined __arc__ #elif defined __arc__
# define systemd_NR_copy_file_range 285 # define systemd_NR_copy_file_range 285
#elif defined _MIPS_SIM
# if _MIPS_SIM == _MIPS_SIM_ABI32
# define systemd_NR_copy_file_range systemd_SC_arch_bias(360)
# elif _MIPS_SIM == _MIPS_SIM_NABI32
# define systemd_NR_copy_file_range systemd_SC_arch_bias(324)
# elif _MIPS_SIM == _MIPS_SIM_ABI64
# define systemd_NR_copy_file_range systemd_SC_arch_bias(320)
# endif
#else #else
# warning "copy_file_range() syscall number unknown for your architecture" # warning "copy_file_range() syscall number unknown for your architecture"
#endif #endif
@ -457,6 +489,14 @@ static inline ssize_t missing_copy_file_range(int fd_in, loff_t *off_in,
# define systemd_NR_bpf 351 # define systemd_NR_bpf 351
#elif defined __tilegx__ #elif defined __tilegx__
# define systemd_NR_bpf 280 # define systemd_NR_bpf 280
#elif defined _MIPS_SIM
# if _MIPS_SIM == _MIPS_SIM_ABI32
# define systemd_NR_bpf systemd_SC_arch_bias(355)
# elif _MIPS_SIM == _MIPS_SIM_NABI32
# define systemd_NR_bpf systemd_SC_arch_bias(319)
# elif _MIPS_SIM == _MIPS_SIM_ABI64
# define systemd_NR_bpf systemd_SC_arch_bias(315)
# endif
#else #else
# warning "bpf() syscall number unknown for your architecture" # warning "bpf() syscall number unknown for your architecture"
#endif #endif
@ -507,13 +547,11 @@ static inline int missing_bpf(int cmd, union bpf_attr *attr, size_t size) {
# define systemd_NR_pkey_mprotect 384 # define systemd_NR_pkey_mprotect 384
# elif defined _MIPS_SIM # elif defined _MIPS_SIM
# if _MIPS_SIM == _MIPS_SIM_ABI32 # if _MIPS_SIM == _MIPS_SIM_ABI32
# define systemd_NR_pkey_mprotect 4363 # define systemd_NR_pkey_mprotect systemd_SC_arch_bias(363)
# endif # elif _MIPS_SIM == _MIPS_SIM_NABI32
# if _MIPS_SIM == _MIPS_SIM_NABI32 # define systemd_NR_pkey_mprotect systemd_SC_arch_bias(327)
# define systemd_NR_pkey_mprotect 6327 # elif _MIPS_SIM == _MIPS_SIM_ABI64
# endif # define systemd_NR_pkey_mprotect systemd_SC_arch_bias(323)
# if _MIPS_SIM == _MIPS_SIM_ABI64
# define systemd_NR_pkey_mprotect 5323
# endif # endif
# else # else
# warning "pkey_mprotect() syscall number unknown for your architecture" # warning "pkey_mprotect() syscall number unknown for your architecture"
@ -550,6 +588,14 @@ assert_cc(__NR_pkey_mprotect == systemd_NR_pkey_mprotect);
# define systemd_NR_statx 360 # define systemd_NR_statx 360
#elif defined __x86_64__ #elif defined __x86_64__
# define systemd_NR_statx systemd_SC_arch_bias(332) # define systemd_NR_statx systemd_SC_arch_bias(332)
#elif defined _MIPS_SIM
# if _MIPS_SIM == _MIPS_SIM_ABI32
# define systemd_NR_statx systemd_SC_arch_bias(366)
# elif _MIPS_SIM == _MIPS_SIM_NABI32
# define systemd_NR_statx systemd_SC_arch_bias(330)
# elif _MIPS_SIM == _MIPS_SIM_ABI64
# define systemd_NR_statx systemd_SC_arch_bias(326)
# endif
#else #else
# warning "statx() syscall number unknown for your architecture" # warning "statx() syscall number unknown for your architecture"
#endif #endif
@ -634,23 +680,7 @@ static inline long missing_get_mempolicy(int *mode, unsigned long *nodemask,
/* ======================================================================= */ /* ======================================================================= */
/* should be always defined, see kernel 39036cd2727395c3369b1051005da74059a85317 */ /* should be always defined, see kernel 39036cd2727395c3369b1051005da74059a85317 */
#if defined __alpha__
# define systemd_NR_pidfd_send_signal 534
#elif defined _MIPS_SIM
# if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */
# define systemd_NR_pidfd_send_signal (424 + 4000)
# endif
# if _MIPS_SIM == _MIPS_SIM_NABI32 /* n32 */
# define systemd_NR_pidfd_send_signal (424 + 6000)
# endif
# if _MIPS_SIM == _MIPS_SIM_ABI64 /* n64 */
# define systemd_NR_pidfd_send_signal (424 + 5000)
# endif
#elif defined __ia64__
# define systemd_NR_pidfd_send_signal (424 + 1024)
#else
#define systemd_NR_pidfd_send_signal systemd_SC_arch_bias(424) #define systemd_NR_pidfd_send_signal systemd_SC_arch_bias(424)
#endif
/* may be (invalid) negative number due to libseccomp, see PR 13319 */ /* may be (invalid) negative number due to libseccomp, see PR 13319 */
#if defined __NR_pidfd_send_signal && __NR_pidfd_send_signal >= 0 #if defined __NR_pidfd_send_signal && __NR_pidfd_send_signal >= 0
@ -678,23 +708,7 @@ static inline int missing_pidfd_send_signal(int fd, int sig, siginfo_t *info, un
#endif #endif
/* should be always defined, see kernel 7615d9e1780e26e0178c93c55b73309a5dc093d7 */ /* should be always defined, see kernel 7615d9e1780e26e0178c93c55b73309a5dc093d7 */
#if defined __alpha__
# define systemd_NR_pidfd_open 544
#elif defined _MIPS_SIM
# if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */
# define systemd_NR_pidfd_open (434 + 4000)
# endif
# if _MIPS_SIM == _MIPS_SIM_NABI32 /* n32 */
# define systemd_NR_pidfd_open (434 + 6000)
# endif
# if _MIPS_SIM == _MIPS_SIM_ABI64 /* n64 */
# define systemd_NR_pidfd_open (434 + 5000)
# endif
#elif defined __ia64__
# define systemd_NR_pidfd_open (434 + 1024)
#else
#define systemd_NR_pidfd_open systemd_SC_arch_bias(434) #define systemd_NR_pidfd_open systemd_SC_arch_bias(434)
#endif
/* may be (invalid) negative number due to libseccomp, see PR 13319 */ /* may be (invalid) negative number due to libseccomp, see PR 13319 */
#if defined __NR_pidfd_open && __NR_pidfd_open >= 0 #if defined __NR_pidfd_open && __NR_pidfd_open >= 0

View File

@ -19,7 +19,7 @@ bool ratelimit_below(RateLimit *r) {
ts = now(CLOCK_MONOTONIC); ts = now(CLOCK_MONOTONIC);
if (r->begin <= 0 || if (r->begin <= 0 ||
r->begin + r->interval < ts) { ts - r->begin > r->interval) {
r->begin = ts; r->begin = ts;
/* Reset counter */ /* Reset counter */

View File

@ -1144,7 +1144,7 @@ static int mount_start(Unit *u) {
return -EAGAIN; return -EAGAIN;
/* Already on it! */ /* Already on it! */
if (m->state == MOUNT_MOUNTING) if (IN_SET(m->state, MOUNT_MOUNTING, MOUNT_MOUNTING_DONE))
return 0; return 0;
assert(IN_SET(m->state, MOUNT_DEAD, MOUNT_FAILED)); assert(IN_SET(m->state, MOUNT_DEAD, MOUNT_FAILED));
@ -1948,6 +1948,15 @@ static int mount_process_proc_self_mountinfo(Manager *m) {
mount_enter_dead(mount, MOUNT_SUCCESS); mount_enter_dead(mount, MOUNT_SUCCESS);
break; break;
case MOUNT_MOUNTING_DONE:
/* The mount command may add the corresponding proc mountinfo entry and
* then remove it because of an internal error. E.g., fuse.sshfs seems
* to do that when the connection fails. See #17617. To handle such the
* case, let's once set the state back to mounting. Then, the unit can
* correctly enter the failed state later in mount_sigchld(). */
mount_set_state(mount, MOUNT_MOUNTING);
break;
default: default:
break; break;
} }

View File

@ -8,6 +8,7 @@
#include "dbus-unit.h" #include "dbus-unit.h"
#include "load-dropin.h" #include "load-dropin.h"
#include "log.h" #include "log.h"
#include "process-util.h"
#include "scope.h" #include "scope.h"
#include "serialize.h" #include "serialize.h"
#include "special.h" #include "special.h"
@ -235,8 +236,18 @@ static int scope_coldplug(Unit *u) {
if (r < 0) if (r < 0)
return r; return r;
if (!IN_SET(s->deserialized_state, SCOPE_DEAD, SCOPE_FAILED)) if (!IN_SET(s->deserialized_state, SCOPE_DEAD, SCOPE_FAILED)) {
if (u->pids) {
void *pidp;
SET_FOREACH(pidp, u->pids) {
r = unit_watch_pid(u, PTR_TO_PID(pidp), false);
if (r < 0 && r != -EEXIST)
return r;
}
} else
(void) unit_enqueue_rewatch_pids(u); (void) unit_enqueue_rewatch_pids(u);
}
bus_scope_track_controller(s); bus_scope_track_controller(s);
@ -366,6 +377,10 @@ static int scope_start(Unit *u) {
return r; return r;
} }
/* Now u->pids have been moved into the scope cgroup, it's not needed
* anymore. */
u->pids = set_free(u->pids);
s->result = SCOPE_SUCCESS; s->result = SCOPE_SUCCESS;
scope_set_state(s, SCOPE_RUNNING); scope_set_state(s, SCOPE_RUNNING);
@ -427,6 +442,7 @@ static int scope_get_timeout(Unit *u, usec_t *timeout) {
static int scope_serialize(Unit *u, FILE *f, FDSet *fds) { static int scope_serialize(Unit *u, FILE *f, FDSet *fds) {
Scope *s = SCOPE(u); Scope *s = SCOPE(u);
void *pidp;
assert(s); assert(s);
assert(f); assert(f);
@ -438,6 +454,9 @@ static int scope_serialize(Unit *u, FILE *f, FDSet *fds) {
if (s->controller) if (s->controller)
(void) serialize_item(f, "controller", s->controller); (void) serialize_item(f, "controller", s->controller);
SET_FOREACH(pidp, u->pids)
serialize_item_format(f, "pids", PID_FMT, PTR_TO_PID(pidp));
return 0; return 0;
} }
@ -473,6 +492,20 @@ static int scope_deserialize_item(Unit *u, const char *key, const char *value, F
if (r < 0) if (r < 0)
return log_oom(); return log_oom();
} else if (streq(key, "pids")) {
pid_t pid;
if (parse_pid(value, &pid) < 0)
log_unit_debug(u, "Failed to parse pids value: %s", value);
else {
r = set_ensure_allocated(&u->pids, NULL);
if (r < 0)
return r;
r = set_put(u->pids, PID_TO_PTR(pid));
if (r < 0)
return r;
}
} else } else
log_unit_debug(u, "Unknown serialization key: %s", key); log_unit_debug(u, "Unknown serialization key: %s", key);

View File

@ -177,46 +177,23 @@ int unit_name_printf(const Unit *u, const char* format, char **ret) {
* This will use the passed string as format string and replace the following specifiers (which should all be * This will use the passed string as format string and replace the following specifiers (which should all be
* safe for inclusion in unit names): * safe for inclusion in unit names):
* *
* %n: the full id of the unit (foo@bar.waldo) * %n: the full id of the unit (foo-aaa@bar.waldo)
* %N: the id of the unit without the suffix (foo@bar) * %N: the id of the unit without the suffix (foo-aaa@bar)
* %p: the prefix (foo) * %p: the prefix (foo-aaa)
* %i: the instance (bar) * %i: the instance (bar)
* * %j: the last componet of the prefix (aaa)
* %U: the UID of the running user
* %u: the username of the running user
*
* %m: the machine ID of the running system
* %b: the boot ID of the running system
* %H: the hostname of the running system
* %v: the kernel version
* %a: the native userspace architecture
* %o: the OS ID according to /etc/os-release
* %w: the OS version ID, according to /etc/os-release
* %B: the OS build ID, according to /etc/os-release
* %W: the OS variant ID, according to /etc/os-release
*/ */
const Specifier table[] = { const Specifier table[] = {
{ 'i', specifier_string, u->instance },
{ 'j', specifier_last_component, NULL },
{ 'n', specifier_string, u->id }, { 'n', specifier_string, u->id },
{ 'N', specifier_prefix_and_instance, NULL }, { 'N', specifier_prefix_and_instance, NULL },
{ 'p', specifier_prefix, NULL }, { 'p', specifier_prefix, NULL },
{ 'i', specifier_string, u->instance },
{ 'j', specifier_last_component, NULL },
{ 'g', specifier_group_name, NULL }, COMMON_SYSTEM_SPECIFIERS,
{ 'G', specifier_group_id, NULL },
{ 'U', specifier_user_id, NULL },
{ 'u', specifier_user_name, NULL },
{ 'm', specifier_machine_id, NULL }, COMMON_CREDS_SPECIFIERS,
{ 'b', specifier_boot_id, NULL },
{ 'H', specifier_host_name, NULL },
{ 'v', specifier_kernel_release, NULL },
{ 'a', specifier_architecture, NULL },
{ 'o', specifier_os_id, NULL },
{ 'w', specifier_os_version_id, NULL },
{ 'B', specifier_os_build_id, NULL },
{ 'W', specifier_os_variant_id, NULL },
{} {}
}; };
@ -237,19 +214,15 @@ int unit_full_printf(const Unit *u, const char *format, char **ret) {
* %r: where units in this slice are placed in the cgroup tree (deprecated) * %r: where units in this slice are placed in the cgroup tree (deprecated)
* %R: the root of this systemd's instance tree (deprecated) * %R: the root of this systemd's instance tree (deprecated)
* *
* %t: the runtime directory root (e.g. /run or $XDG_RUNTIME_DIR)
* %S: the state directory root (e.g. /var/lib or $XDG_CONFIG_HOME)
* %C: the cache directory root (e.g. /var/cache or $XDG_CACHE_HOME) * %C: the cache directory root (e.g. /var/cache or $XDG_CACHE_HOME)
* %L: the log directory root (e.g. /var/log or $XDG_CONFIG_HOME/log)
* %E: the configuration directory root (e.g. /etc or $XDG_CONFIG_HOME) * %E: the configuration directory root (e.g. /etc or $XDG_CONFIG_HOME)
* %T: the temporary directory (e.g. /tmp, or $TMPDIR, $TEMP, $TMP) * %L: the log directory root (e.g. /var/log or $XDG_CONFIG_HOME/log)
* %V: the temporary directory for large, persistent stuff (e.g. /var/tmp, or $TMPDIR, $TEMP, $TMP) * %S: the state directory root (e.g. /var/lib or $XDG_CONFIG_HOME)
* %t: the runtime directory root (e.g. /run or $XDG_RUNTIME_DIR)
* *
* %h: the homedir of the running user * %h: the homedir of the running user
* %s: the shell of the running user * %s: the shell of the running user
* *
* %v: `uname -r` of the running system
*
* NOTICE: When you add new entries here, please be careful: specifiers which depend on settings of the unit * NOTICE: When you add new entries here, please be careful: specifiers which depend on settings of the unit
* file itself are broken by design, as they would resolve differently depending on whether they are used * file itself are broken by design, as they would resolve differently depending on whether they are used
* before or after the relevant configuration setting. Hence: don't add them. * before or after the relevant configuration setting. Hence: don't add them.
@ -260,40 +233,35 @@ int unit_full_printf(const Unit *u, const char *format, char **ret) {
assert(ret); assert(ret);
const Specifier table[] = { const Specifier table[] = {
{ 'n', specifier_string, u->id },
{ 'N', specifier_prefix_and_instance, NULL },
{ 'p', specifier_prefix, NULL },
{ 'P', specifier_prefix_unescaped, NULL },
{ 'i', specifier_string, u->instance }, { 'i', specifier_string, u->instance },
{ 'I', specifier_instance_unescaped, NULL }, { 'I', specifier_instance_unescaped, NULL },
{ 'j', specifier_last_component, NULL }, { 'j', specifier_last_component, NULL },
{ 'J', specifier_last_component_unescaped, NULL }, { 'J', specifier_last_component_unescaped, NULL },
{ 'n', specifier_string, u->id },
{ 'N', specifier_prefix_and_instance, NULL },
{ 'p', specifier_prefix, NULL },
{ 'P', specifier_prefix_unescaped, NULL },
{ 'f', specifier_filename, NULL }, { 'f', specifier_filename, NULL },
{ 'c', specifier_cgroup, NULL }, { 'c', specifier_cgroup, NULL },
{ 'r', specifier_cgroup_slice, NULL }, { 'r', specifier_cgroup_slice, NULL },
{ 'R', specifier_cgroup_root, NULL }, { 'R', specifier_cgroup_root, NULL },
{ 't', specifier_special_directory, UINT_TO_PTR(EXEC_DIRECTORY_RUNTIME) },
{ 'S', specifier_special_directory, UINT_TO_PTR(EXEC_DIRECTORY_STATE) },
{ 'C', specifier_special_directory, UINT_TO_PTR(EXEC_DIRECTORY_CACHE) }, { 'C', specifier_special_directory, UINT_TO_PTR(EXEC_DIRECTORY_CACHE) },
{ 'L', specifier_special_directory, UINT_TO_PTR(EXEC_DIRECTORY_LOGS) },
{ 'E', specifier_special_directory, UINT_TO_PTR(EXEC_DIRECTORY_CONFIGURATION) }, { 'E', specifier_special_directory, UINT_TO_PTR(EXEC_DIRECTORY_CONFIGURATION) },
{ 'T', specifier_tmp_dir, NULL }, { 'L', specifier_special_directory, UINT_TO_PTR(EXEC_DIRECTORY_LOGS) },
{ 'V', specifier_var_tmp_dir, NULL }, { 'S', specifier_special_directory, UINT_TO_PTR(EXEC_DIRECTORY_STATE) },
{ 't', specifier_special_directory, UINT_TO_PTR(EXEC_DIRECTORY_RUNTIME) },
{ 'g', specifier_group_name, NULL },
{ 'G', specifier_group_id, NULL },
{ 'U', specifier_user_id, NULL },
{ 'u', specifier_user_name, NULL },
{ 'h', specifier_user_home, NULL }, { 'h', specifier_user_home, NULL },
{ 's', specifier_user_shell, NULL }, { 's', specifier_user_shell, NULL },
{ 'm', specifier_machine_id, NULL }, COMMON_SYSTEM_SPECIFIERS,
{ 'H', specifier_host_name, NULL },
{ 'l', specifier_short_host_name, NULL }, COMMON_CREDS_SPECIFIERS,
{ 'b', specifier_boot_id, NULL },
{ 'v', specifier_kernel_release, NULL }, COMMON_TMP_SPECIFIERS,
{} {}
}; };

View File

@ -353,7 +353,8 @@ static char *disk_mount_point(const char *label) {
/* Yeah, we don't support native systemd unit files here for now */ /* Yeah, we don't support native systemd unit files here for now */
if (asprintf(&device, "/dev/mapper/%s", label) < 0) device = strjoin("/dev/mapper/", label);
if (!device)
return NULL; return NULL;
f = setmntent(fstab_path(), "re"); f = setmntent(fstab_path(), "re");
@ -447,10 +448,9 @@ static int get_password(
assert(strv_length(passwords2) == 1); assert(strv_length(passwords2) == 1);
if (!streq(passwords[0], passwords2[0])) { if (!streq(passwords[0], passwords2[0]))
log_warning("Passwords did not match, retrying."); return log_warning_errno(SYNTHETIC_ERRNO(EAGAIN),
return -EAGAIN; "Passwords did not match, retrying.");
}
} }
strv_uniq(passwords); strv_uniq(passwords);

View File

@ -625,6 +625,15 @@ static int acquire_home(
do_auth = true; do_auth = true;
} }
/* Later PAM modules may need the auth token, but only during pam_authenticate. */
if (please_authenticate && !strv_isempty(secret->password)) {
r = pam_set_item(handle, PAM_AUTHTOK, *secret->password);
if (r < 0) {
pam_syslog(handle, LOG_ERR, "Failed to set PAM auth token: %s", pam_strerror(handle, r));
return r;
}
}
r = pam_set_data(handle, fd_field, FD_TO_PTR(acquired_fd), cleanup_home_fd); r = pam_set_data(handle, fd_field, FD_TO_PTR(acquired_fd), cleanup_home_fd);
if (r < 0) { if (r < 0) {
pam_syslog(handle, LOG_ERR, "Failed to set PAM bus data: %s", pam_strerror(handle, r)); pam_syslog(handle, LOG_ERR, "Failed to set PAM bus data: %s", pam_strerror(handle, r));

View File

@ -50,7 +50,7 @@ static int curl_glue_on_io(sd_event_source *s, int fd, uint32_t revents, void *u
return 0; return 0;
} }
static int curl_glue_socket_callback(CURLM *curl, curl_socket_t s, int action, void *userdata, void *socketp) { static int curl_glue_socket_callback(CURL *curl, curl_socket_t s, int action, void *userdata, void *socketp) {
sd_event_source *io = socketp; sd_event_source *io = socketp;
CurlGlue *g = userdata; CurlGlue *g = userdata;
uint32_t events = 0; uint32_t events = 0;
@ -178,7 +178,7 @@ CurlGlue *curl_glue_unref(CurlGlue *g) {
int curl_glue_new(CurlGlue **glue, sd_event *event) { int curl_glue_new(CurlGlue **glue, sd_event *event) {
_cleanup_(curl_glue_unrefp) CurlGlue *g = NULL; _cleanup_(curl_glue_unrefp) CurlGlue *g = NULL;
_cleanup_(curl_multi_cleanupp) CURL *c = NULL; _cleanup_(curl_multi_cleanupp) CURLM *c = NULL;
_cleanup_(sd_event_unrefp) sd_event *e = NULL; _cleanup_(sd_event_unrefp) sd_event *e = NULL;
int r; int r;

View File

@ -35,5 +35,5 @@ int curl_header_strdup(const void *contents, size_t sz, const char *field, char
int curl_parse_http_time(const char *t, usec_t *ret); int curl_parse_http_time(const char *t, usec_t *ret);
DEFINE_TRIVIAL_CLEANUP_FUNC(CURL*, curl_easy_cleanup); DEFINE_TRIVIAL_CLEANUP_FUNC(CURL*, curl_easy_cleanup);
DEFINE_TRIVIAL_CLEANUP_FUNC(CURL*, curl_multi_cleanup); DEFINE_TRIVIAL_CLEANUP_FUNC(CURLM*, curl_multi_cleanup);
DEFINE_TRIVIAL_CLEANUP_FUNC(struct curl_slist*, curl_slist_free_all); DEFINE_TRIVIAL_CLEANUP_FUNC(struct curl_slist*, curl_slist_free_all);

View File

@ -2019,13 +2019,12 @@ static int verify(sd_journal *j) {
#endif #endif
k = journal_file_verify(f, arg_verify_key, &first, &validated, &last, true); k = journal_file_verify(f, arg_verify_key, &first, &validated, &last, true);
if (k == -EINVAL) { if (k == -EINVAL)
/* If the key was invalid give up right-away. */ /* If the key was invalid give up right-away. */
return k; return k;
} else if (k < 0) { else if (k < 0)
log_warning_errno(k, "FAIL: %s (%m)", f->path); r = log_warning_errno(k, "FAIL: %s (%m)", f->path);
r = k; else {
} else {
char a[FORMAT_TIMESTAMP_MAX], b[FORMAT_TIMESTAMP_MAX], c[FORMAT_TIMESPAN_MAX]; char a[FORMAT_TIMESTAMP_MAX], b[FORMAT_TIMESTAMP_MAX], c[FORMAT_TIMESPAN_MAX];
log_info("PASS: %s", f->path); log_info("PASS: %s", f->path);
@ -2374,10 +2373,8 @@ int main(int argc, char *argv[]) {
int q; int q;
q = journal_directory_vacuum(d->path, arg_vacuum_size, arg_vacuum_n_files, arg_vacuum_time, NULL, !arg_quiet); q = journal_directory_vacuum(d->path, arg_vacuum_size, arg_vacuum_n_files, arg_vacuum_time, NULL, !arg_quiet);
if (q < 0) { if (q < 0)
log_error_errno(q, "Failed to vacuum %s: %m", d->path); r = log_error_errno(q, "Failed to vacuum %s: %m", d->path);
r = q;
}
} }
goto finish; goto finish;

View File

@ -20,7 +20,7 @@ MACHINE_ID=$KERNEL_INSTALL_MACHINE_ID
BOOT_ROOT=${ENTRY_DIR_ABS%/$MACHINE_ID/$KERNEL_VERSION} BOOT_ROOT=${ENTRY_DIR_ABS%/$MACHINE_ID/$KERNEL_VERSION}
BOOT_MNT=$(stat -c %m $BOOT_ROOT) BOOT_MNT=$(stat -c %m $BOOT_ROOT)
ENTRY_DIR=/${ENTRY_DIR_ABS#$BOOT_MNT} ENTRY_DIR=${ENTRY_DIR_ABS#$BOOT_MNT}
if [[ $COMMAND == remove ]]; then if [[ $COMMAND == remove ]]; then
rm -f "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION.conf" rm -f "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION.conf"

View File

@ -188,8 +188,7 @@ int sd_dhcp6_client_set_mac(
assert_return(client, -EINVAL); assert_return(client, -EINVAL);
assert_return(addr, -EINVAL); assert_return(addr, -EINVAL);
assert_return(addr_len > 0 && addr_len <= MAX_MAC_ADDR_LEN, -EINVAL); assert_return(addr_len <= MAX_MAC_ADDR_LEN, -EINVAL);
assert_return(arp_type > 0, -EINVAL);
assert_return(IN_SET(client->state, DHCP6_STATE_STOPPED), -EBUSY); assert_return(IN_SET(client->state, DHCP6_STATE_STOPPED), -EBUSY);
@ -197,8 +196,11 @@ int sd_dhcp6_client_set_mac(
assert_return(addr_len == ETH_ALEN, -EINVAL); assert_return(addr_len == ETH_ALEN, -EINVAL);
else if (arp_type == ARPHRD_INFINIBAND) else if (arp_type == ARPHRD_INFINIBAND)
assert_return(addr_len == INFINIBAND_ALEN, -EINVAL); assert_return(addr_len == INFINIBAND_ALEN, -EINVAL);
else else {
return -EINVAL; client->arp_type = ARPHRD_NONE;
client->mac_addr_len = 0;
return 0;
}
if (client->mac_addr_len == addr_len && if (client->mac_addr_len == addr_len &&
memcmp(&client->mac_addr, addr, addr_len) == 0) memcmp(&client->mac_addr, addr, addr_len) == 0)
@ -1743,8 +1745,7 @@ int sd_dhcp6_client_start(sd_dhcp6_client *client) {
} }
log_dhcp6_client(client, "Started in %s mode", log_dhcp6_client(client, "Started in %s mode",
client->information_request? "Information request": client->information_request ? "Information request" : "Managed");
"Managed");
return client_start(client, state); return client_start(client, state);
} }

View File

@ -420,7 +420,8 @@ static int enumerator_scan_dir_and_add_devices(sd_device_enumerator *enumerator,
dir = opendir(path); dir = opendir(path);
if (!dir) if (!dir)
return -errno; /* this is necessarily racey, so ignore missing directories */
return (errno == ENOENT && (subdir1 || subdir2)) ? 0 : -errno;
FOREACH_DIRENT_ALL(dent, dir, return -errno) { FOREACH_DIRENT_ALL(dent, dir, return -errno) {
_cleanup_(sd_device_unrefp) sd_device *device = NULL; _cleanup_(sd_device_unrefp) sd_device *device = NULL;
@ -743,16 +744,12 @@ static int enumerator_scan_devices_all(sd_device_enumerator *enumerator) {
int k; int k;
k = enumerator_scan_dir(enumerator, "bus", "devices", NULL); k = enumerator_scan_dir(enumerator, "bus", "devices", NULL);
if (k < 0) { if (k < 0)
log_debug_errno(k, "sd-device-enumerator: Failed to scan /sys/bus: %m"); r = log_debug_errno(k, "sd-device-enumerator: Failed to scan /sys/bus: %m");
r = k;
}
k = enumerator_scan_dir(enumerator, "class", NULL, NULL); k = enumerator_scan_dir(enumerator, "class", NULL, NULL);
if (k < 0) { if (k < 0)
log_debug_errno(k, "sd-device-enumerator: Failed to scan /sys/class: %m"); r = log_debug_errno(k, "sd-device-enumerator: Failed to scan /sys/class: %m");
r = k;
}
} }
return r; return r;
@ -870,10 +867,8 @@ int device_enumerator_scan_subsystems(sd_device_enumerator *enumerator) {
/* modules */ /* modules */
if (match_subsystem(enumerator, "module")) { if (match_subsystem(enumerator, "module")) {
k = enumerator_scan_dir_and_add_devices(enumerator, "module", NULL, NULL); k = enumerator_scan_dir_and_add_devices(enumerator, "module", NULL, NULL);
if (k < 0) { if (k < 0)
log_debug_errno(k, "sd-device-enumerator: Failed to scan modules: %m"); r = log_debug_errno(k, "sd-device-enumerator: Failed to scan modules: %m");
r = k;
}
} }
if (access("/sys/subsystem", F_OK) >= 0) if (access("/sys/subsystem", F_OK) >= 0)
@ -884,19 +879,15 @@ int device_enumerator_scan_subsystems(sd_device_enumerator *enumerator) {
/* subsystems (only buses support coldplug) */ /* subsystems (only buses support coldplug) */
if (match_subsystem(enumerator, "subsystem")) { if (match_subsystem(enumerator, "subsystem")) {
k = enumerator_scan_dir_and_add_devices(enumerator, subsysdir, NULL, NULL); k = enumerator_scan_dir_and_add_devices(enumerator, subsysdir, NULL, NULL);
if (k < 0) { if (k < 0)
log_debug_errno(k, "sd-device-enumerator: Failed to scan subsystems: %m"); r = log_debug_errno(k, "sd-device-enumerator: Failed to scan subsystems: %m");
r = k;
}
} }
/* subsystem drivers */ /* subsystem drivers */
if (match_subsystem(enumerator, "drivers")) { if (match_subsystem(enumerator, "drivers")) {
k = enumerator_scan_dir(enumerator, subsysdir, "drivers", "drivers"); k = enumerator_scan_dir(enumerator, subsysdir, "drivers", "drivers");
if (k < 0) { if (k < 0)
log_debug_errno(k, "sd-device-enumerator: Failed to scan drivers: %m"); r = log_debug_errno(k, "sd-device-enumerator: Failed to scan drivers: %m");
r = k;
}
} }
typesafe_qsort(enumerator->devices, enumerator->n_devices, device_compare); typesafe_qsort(enumerator->devices, enumerator->n_devices, device_compare);

View File

@ -8,9 +8,19 @@
#include "set.h" #include "set.h"
#include "time-util.h" #include "time-util.h"
#define LATEST_UDEV_DATABASE_VERSION 1
struct sd_device { struct sd_device {
unsigned n_ref; unsigned n_ref;
/* The database version indicates the supported features by the udev database.
* This is saved and parsed in V field.
*
* 0: None of the following features are supported (systemd version <= 246).
* 1: The current tags (Q) and the database version (V) features are implemented (>= 247).
*/
unsigned database_version;
int watch_handle; int watch_handle;
sd_device *parent; sd_device *parent;
@ -88,7 +98,9 @@ struct sd_device {
int device_new_aux(sd_device **ret); int device_new_aux(sd_device **ret);
int device_add_property_aux(sd_device *device, const char *key, const char *value, bool db); int device_add_property_aux(sd_device *device, const char *key, const char *value, bool db);
int device_add_property_internal(sd_device *device, const char *key, const char *value); static inline int device_add_property_internal(sd_device *device, const char *key, const char *value) {
return device_add_property_aux(device, key, value, false);
}
int device_read_uevent_file(sd_device *device); int device_read_uevent_file(sd_device *device);
int device_set_syspath(sd_device *device, const char *_syspath, bool verify); int device_set_syspath(sd_device *device, const char *_syspath, bool verify);

View File

@ -468,6 +468,10 @@ int device_new_from_nulstr(sd_device **ret, uint8_t *nulstr, size_t len) {
i += end - key + 1; i += end - key + 1;
/* netlink messages for some devices contain an unwanted newline at the end of value.
* Let's drop the newline and remaining characters after the newline. */
truncate_nl(key);
r = device_append(device, key, &major, &minor); r = device_append(device, key, &major, &minor);
if (r < 0) if (r < 0)
return r; return r;
@ -944,6 +948,10 @@ int device_update_db(sd_device *device) {
SET_FOREACH(tag, device->current_tags) SET_FOREACH(tag, device->current_tags)
fprintf(f, "Q:%s\n", tag); /* Current tag */ fprintf(f, "Q:%s\n", tag); /* Current tag */
/* Always write the latest database version here, instead of the value stored in
* device->database_version, as which may be 0. */
fputs("V:" STRINGIFY(LATEST_UDEV_DATABASE_VERSION) "\n", f);
} }
r = fflush_and_check(f); r = fflush_and_check(f);

View File

@ -128,10 +128,6 @@ int device_add_property_aux(sd_device *device, const char *_key, const char *_va
return 0; return 0;
} }
int device_add_property_internal(sd_device *device, const char *key, const char *value) {
return device_add_property_aux(device, key, value, false);
}
int device_set_syspath(sd_device *device, const char *_syspath, bool verify) { int device_set_syspath(sd_device *device, const char *_syspath, bool verify) {
_cleanup_free_ char *syspath = NULL; _cleanup_free_ char *syspath = NULL;
const char *devpath; const char *devpath;
@ -1208,6 +1204,12 @@ static int handle_db_line(sd_device *device, char key, const char *value) {
if (r < 0) if (r < 0)
return r; return r;
break;
case 'V':
r = safe_atou(value, &device->database_version);
if (r < 0)
return r;
break; break;
default: default:
log_device_debug(device, "sd-device: Unknown key '%c' in device db, ignoring", key); log_device_debug(device, "sd-device: Unknown key '%c' in device db, ignoring", key);
@ -1442,11 +1444,26 @@ _public_ const char *sd_device_get_tag_next(sd_device *device) {
return v; return v;
} }
static bool device_database_supports_current_tags(sd_device *device) {
assert(device);
(void) device_read_db(device);
/* The current tags (saved in Q field) feature is implemented in database version 1.
* If the database version is 0, then the tags (NOT current tags, saved in G field) are not
* sticky. Thus, we can safely bypass the operations for the current tags (Q) to tags (G). */
return device->database_version >= 1;
}
_public_ const char *sd_device_get_current_tag_first(sd_device *device) { _public_ const char *sd_device_get_current_tag_first(sd_device *device) {
void *v; void *v;
assert_return(device, NULL); assert_return(device, NULL);
if (!device_database_supports_current_tags(device))
return sd_device_get_tag_first(device);
(void) device_read_db(device); (void) device_read_db(device);
device->current_tags_iterator_generation = device->tags_generation; device->current_tags_iterator_generation = device->tags_generation;
@ -1461,6 +1478,9 @@ _public_ const char *sd_device_get_current_tag_next(sd_device *device) {
assert_return(device, NULL); assert_return(device, NULL);
if (!device_database_supports_current_tags(device))
return sd_device_get_tag_next(device);
(void) device_read_db(device); (void) device_read_db(device);
if (device->current_tags_iterator_generation != device->tags_generation) if (device->current_tags_iterator_generation != device->tags_generation)
@ -1763,6 +1783,9 @@ _public_ int sd_device_has_current_tag(sd_device *device, const char *tag) {
assert_return(device, -EINVAL); assert_return(device, -EINVAL);
assert_return(tag, -EINVAL); assert_return(tag, -EINVAL);
if (!device_database_supports_current_tags(device))
return sd_device_has_tag(device, tag);
(void) device_read_db(device); (void) device_read_db(device);
return set_contains(device->current_tags, tag); return set_contains(device->current_tags, tag);

View File

@ -469,7 +469,7 @@ int config_parse_ad_actor_system(
} }
if (ether_addr_is_null(&n) || (n.ether_addr_octet[0] & 0x01)) { if (ether_addr_is_null(&n) || (n.ether_addr_octet[0] & 0x01)) {
log_syntax(unit, LOG_WARNING, filename, line, 0, log_syntax(unit, LOG_WARNING, filename, line, 0,
"Not a valid MAC address %s, can not be null or multicast. Ignoring assignment.", "Not an appropriate MAC address %s, cannot be null or multicast. Ignoring assignment.",
rvalue); rvalue);
return 0; return 0;
} }

View File

@ -58,9 +58,16 @@ void network_adjust_dhcp(Network *network) {
} }
} }
static struct DUID fallback_duid = { .type = DUID_TYPE_EN };
DUID* link_get_duid(Link *link) { DUID* link_get_duid(Link *link) {
if (link->network->duid.type != _DUID_TYPE_INVALID) if (link->network->duid.type != _DUID_TYPE_INVALID)
return &link->network->duid; return &link->network->duid;
else if (link->hw_addr.length == 0 &&
(link->manager->duid.type == DUID_TYPE_LLT ||
link->manager->duid.type == DUID_TYPE_LL))
/* Fallback to DUID that works without mac addresses.
* This is useful for tunnel devices without mac address. */
return &fallback_duid;
else else
return &link->manager->duid; return &link->manager->duid;
} }

View File

@ -1163,13 +1163,17 @@ static int ndisc_router_handler(Link *link, sd_ndisc_router *rt) {
if (r < 0) if (r < 0)
return log_link_error_errno(link, r, "Failed to get RA flags: %m"); return log_link_error_errno(link, r, "Failed to get RA flags: %m");
if ((flags & (ND_RA_FLAG_MANAGED | ND_RA_FLAG_OTHER) && link->network->ipv6_accept_ra_start_dhcp6_client)) { if ((flags & (ND_RA_FLAG_MANAGED | ND_RA_FLAG_OTHER) &&
link->network->ipv6_accept_ra_start_dhcp6_client != IPV6_ACCEPT_RA_START_DHCP6_CLIENT_NO) ||
link->network->ipv6_accept_ra_start_dhcp6_client == IPV6_ACCEPT_RA_START_DHCP6_CLIENT_ALWAYS) {
if (link->network->ipv6_accept_ra_start_dhcp6_client == IPV6_ACCEPT_RA_START_DHCP6_CLIENT_ALWAYS) if (flags & (ND_RA_FLAG_MANAGED | ND_RA_FLAG_OTHER))
r = dhcp6_request_address(link, false);
else
/* (re)start DHCPv6 client in stateful or stateless mode according to RA flags */ /* (re)start DHCPv6 client in stateful or stateless mode according to RA flags */
r = dhcp6_request_address(link, !(flags & ND_RA_FLAG_MANAGED)); r = dhcp6_request_address(link, !(flags & ND_RA_FLAG_MANAGED));
else
/* When IPv6AcceptRA.DHCPv6Client=always, start dhcp6 client in managed mode
* even if router does not have M or O flag. */
r = dhcp6_request_address(link, false);
if (r < 0 && r != -EBUSY) if (r < 0 && r != -EBUSY)
return log_link_error_errno(link, r, "Could not acquire DHCPv6 lease on NDisc request: %m"); return log_link_error_errno(link, r, "Could not acquire DHCPv6 lease on NDisc request: %m");
else else

View File

@ -422,7 +422,7 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi
.ipv6_accept_ra_use_onlink_prefix = true, .ipv6_accept_ra_use_onlink_prefix = true,
.ipv6_accept_ra_route_table = RT_TABLE_MAIN, .ipv6_accept_ra_route_table = RT_TABLE_MAIN,
.ipv6_accept_ra_route_table_set = false, .ipv6_accept_ra_route_table_set = false,
.ipv6_accept_ra_start_dhcp6_client = true, .ipv6_accept_ra_start_dhcp6_client = IPV6_ACCEPT_RA_START_DHCP6_CLIENT_YES,
.can_triple_sampling = -1, .can_triple_sampling = -1,
.can_termination = -1, .can_termination = -1,

View File

@ -104,10 +104,6 @@ static void test_oomd_cgroup_context_acquire_and_insert(void) {
assert_se(oomd_cgroup_context_acquire(cgroup, &ctx) == 0); assert_se(oomd_cgroup_context_acquire(cgroup, &ctx) == 0);
assert_se(streq(ctx->path, cgroup)); assert_se(streq(ctx->path, cgroup));
assert_se(ctx->memory_pressure.avg10 == 0);
assert_se(ctx->memory_pressure.avg60 == 0);
assert_se(ctx->memory_pressure.avg300 == 0);
assert_se(ctx->memory_pressure.total == 0);
assert_se(ctx->current_memory_usage > 0); assert_se(ctx->current_memory_usage > 0);
assert_se(ctx->memory_min == 0); assert_se(ctx->memory_min == 0);
assert_se(ctx->memory_low == 0); assert_se(ctx->memory_low == 0);

View File

@ -918,16 +918,7 @@ static int config_parse_type(
} }
static const Specifier specifier_table[] = { static const Specifier specifier_table[] = {
{ 'm', specifier_machine_id, NULL }, COMMON_SYSTEM_SPECIFIERS,
{ 'b', specifier_boot_id, NULL },
{ 'H', specifier_host_name, NULL },
{ 'l', specifier_short_host_name, NULL },
{ 'v', specifier_kernel_release, NULL },
{ 'a', specifier_architecture, NULL },
{ 'o', specifier_os_id, NULL },
{ 'w', specifier_os_version_id, NULL },
{ 'B', specifier_os_build_id, NULL },
{ 'W', specifier_os_variant_id, NULL },
{} {}
}; };

View File

@ -304,7 +304,7 @@ static void process_dmesg_files(PStoreList *list) {
* output either. */ * output either. */
size_t needed = strlen(pe->dirent.d_name) + strlen(":\n") + pe->content_size + 1; size_t needed = strlen(pe->dirent.d_name) + strlen(":\n") + pe->content_size + 1;
if (!GREEDY_REALLOC(dmesg, dmesg_allocated, dmesg_size + needed)) { if (!GREEDY_REALLOC(dmesg, dmesg_allocated, dmesg_size + needed)) {
log_warning_errno(ENOMEM, "Failed to write dmesg file: %m"); log_oom();
dmesg_bad = true; dmesg_bad = true;
continue; continue;
} }

View File

@ -145,7 +145,6 @@ static void print_source(uint64_t flags, usec_t rtt) {
printf("\n%s-- Information acquired via", ansi_grey()); printf("\n%s-- Information acquired via", ansi_grey());
if (flags != 0)
printf(" protocol%s%s%s%s%s", printf(" protocol%s%s%s%s%s",
flags & SD_RESOLVED_DNS ? " DNS" :"", flags & SD_RESOLVED_DNS ? " DNS" :"",
flags & SD_RESOLVED_LLMNR_IPV4 ? " LLMNR/IPv4" : "", flags & SD_RESOLVED_LLMNR_IPV4 ? " LLMNR/IPv4" : "",

View File

@ -1795,6 +1795,7 @@ static int bus_method_register_service(sd_bus_message *message, void *userdata,
_cleanup_(dnssd_service_freep) DnssdService *service = NULL; _cleanup_(dnssd_service_freep) DnssdService *service = NULL;
_cleanup_(sd_bus_track_unrefp) sd_bus_track *bus_track = NULL; _cleanup_(sd_bus_track_unrefp) sd_bus_track *bus_track = NULL;
_cleanup_free_ char *path = NULL; _cleanup_free_ char *path = NULL;
_cleanup_free_ char *instance_name = NULL;
Manager *m = userdata; Manager *m = userdata;
DnssdService *s = NULL; DnssdService *s = NULL;
const char *name; const char *name;
@ -1835,10 +1836,6 @@ static int bus_method_register_service(sd_bus_message *message, void *userdata,
if (!dnssd_srv_type_is_valid(type)) if (!dnssd_srv_type_is_valid(type))
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "DNS-SD service type '%s' is invalid", type); return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "DNS-SD service type '%s' is invalid", type);
r = dnssd_render_instance_name(name_template, NULL);
if (r < 0)
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "DNS-SD service name '%s' is invalid", name_template);
service->name = strdup(name); service->name = strdup(name);
if (!service->name) if (!service->name)
return log_oom(); return log_oom();
@ -1851,6 +1848,10 @@ static int bus_method_register_service(sd_bus_message *message, void *userdata,
if (!service->type) if (!service->type)
return log_oom(); return log_oom();
r = dnssd_render_instance_name(service, &instance_name);
if (r < 0)
return r;
r = sd_bus_message_enter_container(message, SD_BUS_TYPE_ARRAY, "a{say}"); r = sd_bus_message_enter_container(message, SD_BUS_TYPE_ARRAY, "a{say}");
if (r < 0) if (r < 0)
return r; return r;

View File

@ -229,7 +229,20 @@ int config_parse_dnssd_service_name(
void *data, void *data,
void *userdata) { void *userdata) {
static const Specifier specifier_table[] = {
{ 'a', specifier_architecture, NULL },
{ 'b', specifier_boot_id, NULL },
{ 'B', specifier_os_build_id, NULL },
{ 'H', specifier_host_name, NULL }, /* We will use specifier_dnssd_host_name(). */
{ 'm', specifier_machine_id, NULL },
{ 'o', specifier_os_id, NULL },
{ 'v', specifier_kernel_release, NULL },
{ 'w', specifier_os_version_id, NULL },
{ 'W', specifier_os_variant_id, NULL },
{}
};
DnssdService *s = userdata; DnssdService *s = userdata;
_cleanup_free_ char *name = NULL;
int r; int r;
assert(filename); assert(filename);
@ -242,22 +255,23 @@ int config_parse_dnssd_service_name(
return 0; return 0;
} }
r = dnssd_render_instance_name(rvalue, NULL); r = specifier_printf(rvalue, specifier_table, NULL, &name);
if (r == -ENOMEM)
return log_oom();
if (r < 0) { if (r < 0) {
log_syntax(unit, LOG_WARNING, filename, line, r, log_syntax(unit, LOG_WARNING, filename, line, r,
"Invalid service instance name template '%s', ignoring: %m", rvalue); "Invalid service instance name template '%s', ignoring assignment: %m", rvalue);
return 0; return 0;
} }
r = free_and_strdup(&s->name_template, rvalue); if (!dns_service_name_is_valid(name)) {
if (r < 0) log_syntax(unit, LOG_WARNING, filename, line, 0,
return log_oom(); "Service instance name template '%s' renders to invalid name '%s'. Ignoring assignment.",
rvalue, name);
return 0; return 0;
} }
return free_and_strdup_warn(&s->name_template, rvalue);
}
int config_parse_dnssd_service_type( int config_parse_dnssd_service_type(
const char *unit, const char *unit,
const char *filename, const char *filename,

View File

@ -1380,7 +1380,7 @@ static int nsec3_hashed_domain_make(DnsResourceRecord *nsec3, const char *domain
* matches the wildcard domain. * matches the wildcard domain.
* *
* Based on this we can prove either the existence of the record in @key, or NXDOMAIN or NODATA, or * Based on this we can prove either the existence of the record in @key, or NXDOMAIN or NODATA, or
* that there is no proof either way. The latter is the case if a the proof of non-existence of a given * that there is no proof either way. The latter is the case if a proof of non-existence of a given
* name uses an NSEC3 record with the opt-out bit set. Lastly, if we are given insufficient NSEC3 records * name uses an NSEC3 record with the opt-out bit set. Lastly, if we are given insufficient NSEC3 records
* to conclude anything we indicate this by returning NO_RR. */ * to conclude anything we indicate this by returning NO_RR. */
static int dnssec_test_nsec3(DnsAnswer *answer, DnsResourceKey *key, DnssecNsecResult *result, bool *authenticated, uint32_t *ttl) { static int dnssec_test_nsec3(DnsAnswer *answer, DnsResourceKey *key, DnssecNsecResult *result, bool *authenticated, uint32_t *ttl) {

View File

@ -282,8 +282,7 @@ void dns_query_candidate_notify(DnsQueryCandidate *c) {
return; return;
fail: fail:
log_warning_errno(r, "Failed to follow search domains: %m"); c->error_code = log_warning_errno(r, "Failed to follow search domains: %m");
c->error_code = r;
dns_query_ready(c->query); dns_query_ready(c->query);
} }

View File

@ -2117,7 +2117,7 @@ int dns_transaction_request_dnssec_keys(DnsTransaction *t) {
return r; return r;
if (r == 0) { if (r == 0) {
/* Hmm, so this SOA RR doesn't match our original question. In this case, maybe this is /* Hmm, so this SOA RR doesn't match our original question. In this case, maybe this is
* a negative reply, and we need the a SOA RR's TTL in order to cache a negative entry? * a negative reply, and we need the SOA RR's TTL in order to cache a negative entry?
* If so, we need to validate it, too. */ * If so, we need to validate it, too. */
r = dns_answer_match_key(t->answer, t->key, NULL); r = dns_answer_match_key(t->answer, t->key, NULL);

View File

@ -155,32 +155,34 @@ static int specifier_dnssd_host_name(char specifier, const void *data, const voi
return 0; return 0;
} }
int dnssd_render_instance_name(const char *name_template, char **ret_name) { int dnssd_render_instance_name(DnssdService *s, char **ret_name) {
static const Specifier specifier_table[] = { static const Specifier specifier_table[] = {
{ 'm', specifier_machine_id, NULL },
{ 'b', specifier_boot_id, NULL },
{ 'H', specifier_dnssd_host_name, NULL },
{ 'v', specifier_kernel_release, NULL },
{ 'a', specifier_architecture, NULL }, { 'a', specifier_architecture, NULL },
{ 'o', specifier_os_id, NULL }, { 'b', specifier_boot_id, NULL },
{ 'w', specifier_os_version_id, NULL },
{ 'B', specifier_os_build_id, NULL }, { 'B', specifier_os_build_id, NULL },
{ 'H', specifier_dnssd_host_name, NULL },
{ 'm', specifier_machine_id, NULL },
{ 'o', specifier_os_id, NULL },
{ 'v', specifier_kernel_release, NULL },
{ 'w', specifier_os_version_id, NULL },
{ 'W', specifier_os_variant_id, NULL }, { 'W', specifier_os_variant_id, NULL },
{} {}
}; };
_cleanup_free_ char *name = NULL; _cleanup_free_ char *name = NULL;
int r; int r;
assert(name_template); assert(s);
assert(s->name_template);
r = specifier_printf(name_template, specifier_table, NULL, &name); r = specifier_printf(s->name_template, specifier_table, s, &name);
if (r < 0) if (r < 0)
return r; return log_debug_errno(r, "Failed to replace specifiers: %m");
if (!dns_service_name_is_valid(name)) if (!dns_service_name_is_valid(name))
return -EINVAL; return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
"Service instance name '%s' is invalid.",
name);
if (ret_name)
*ret_name = TAKE_PTR(name); *ret_name = TAKE_PTR(name);
return 0; return 0;
@ -225,7 +227,7 @@ int dnssd_update_rrs(DnssdService *s) {
LIST_FOREACH(items, txt_data, s->txt_data_items) LIST_FOREACH(items, txt_data, s->txt_data_items)
txt_data->rr = dns_resource_record_unref(txt_data->rr); txt_data->rr = dns_resource_record_unref(txt_data->rr);
r = dnssd_render_instance_name(s->name_template, &n); r = dnssd_render_instance_name(s, &n);
if (r < 0) if (r < 0)
return r; return r;

View File

@ -53,7 +53,7 @@ DnssdTxtData *dnssd_txtdata_free_all(DnssdTxtData *txt_data);
DEFINE_TRIVIAL_CLEANUP_FUNC(DnssdService*, dnssd_service_free); DEFINE_TRIVIAL_CLEANUP_FUNC(DnssdService*, dnssd_service_free);
DEFINE_TRIVIAL_CLEANUP_FUNC(DnssdTxtData*, dnssd_txtdata_free); DEFINE_TRIVIAL_CLEANUP_FUNC(DnssdTxtData*, dnssd_txtdata_free);
int dnssd_render_instance_name(const char *name_template, char **ret_name); int dnssd_render_instance_name(DnssdService *s, char **ret_name);
int dnssd_load(Manager *manager); int dnssd_load(Manager *manager);
int dnssd_txt_item_new_from_string(const char *key, const char *value, DnsTxtItem **ret_item); int dnssd_txt_item_new_from_string(const char *key, const char *value, DnsTxtItem **ret_item);
int dnssd_txt_item_new_from_data(const char *key, const void *value, const size_t size, DnsTxtItem **ret_item); int dnssd_txt_item_new_from_data(const char *key, const void *value, const size_t size, DnsTxtItem **ret_item);

View File

@ -334,9 +334,6 @@ int ask_password_plymouth(
p += k; p += k;
if (p < 1)
continue;
if (buffer[0] == 5) { if (buffer[0] == 5) {
if (flags & ASK_PASSWORD_ACCEPT_CACHED) { if (flags & ASK_PASSWORD_ACCEPT_CACHED) {

View File

@ -8,7 +8,6 @@
#include "alloc-util.h" #include "alloc-util.h"
#include "bpf-program.h" #include "bpf-program.h"
#include "fd-util.h" #include "fd-util.h"
#include "log.h"
#include "memory-util.h" #include "memory-util.h"
#include "missing_syscall.h" #include "missing_syscall.h"
#include "path-util.h" #include "path-util.h"
@ -18,7 +17,7 @@ int bpf_program_new(uint32_t prog_type, BPFProgram **ret) {
p = new0(BPFProgram, 1); p = new0(BPFProgram, 1);
if (!p) if (!p)
return log_oom(); return -ENOMEM;
p->n_ref = 1; p->n_ref = 1;
p->prog_type = prog_type; p->prog_type = prog_type;

View File

@ -35,7 +35,7 @@ typedef enum ConfigParseFlags {
/* Prototype for a parser for a specific configuration setting */ /* Prototype for a parser for a specific configuration setting */
typedef int (*ConfigParserCallback)(CONFIG_PARSER_ARGUMENTS); typedef int (*ConfigParserCallback)(CONFIG_PARSER_ARGUMENTS);
/* A macro declaring the a function prototype, following the typedef above, simply because it's so cumbersomely long /* A macro declaring a function prototype, following the typedef above, simply because it's so cumbersomely long
* otherwise. (And current emacs gets irritatingly slow when editing files that contain lots of very long function * otherwise. (And current emacs gets irritatingly slow when editing files that contain lots of very long function
* prototypes on the same screen) */ * prototypes on the same screen) */
#define CONFIG_PARSER_PROTOTYPE(name) int name(CONFIG_PARSER_ARGUMENTS) #define CONFIG_PARSER_PROTOTYPE(name) int name(CONFIG_PARSER_ARGUMENTS)

View File

@ -14,6 +14,10 @@ const GptPartitionType gpt_partition_type_table[] = {
{ GPT_ROOT_ARM_64_VERITY, "root-arm64-verity" }, { GPT_ROOT_ARM_64_VERITY, "root-arm64-verity" },
{ GPT_ROOT_IA64, "root-ia64" }, { GPT_ROOT_IA64, "root-ia64" },
{ GPT_ROOT_IA64_VERITY, "root-ia64-verity" }, { GPT_ROOT_IA64_VERITY, "root-ia64-verity" },
{ GPT_ROOT_RISCV32, "root-riscv32" },
{ GPT_ROOT_RISCV32_VERITY, "root-riscv32-verity" },
{ GPT_ROOT_RISCV64, "root-riscv64" },
{ GPT_ROOT_RISCV64_VERITY, "root-riscv64-verity" },
#ifdef GPT_ROOT_NATIVE #ifdef GPT_ROOT_NATIVE
{ GPT_ROOT_NATIVE, "root" }, { GPT_ROOT_NATIVE, "root" },
{ GPT_ROOT_NATIVE_VERITY, "root-verity" }, { GPT_ROOT_NATIVE_VERITY, "root-verity" },
@ -32,6 +36,10 @@ const GptPartitionType gpt_partition_type_table[] = {
{ GPT_USR_ARM_64_VERITY, "usr-arm64-verity" }, { GPT_USR_ARM_64_VERITY, "usr-arm64-verity" },
{ GPT_USR_IA64, "usr-ia64" }, { GPT_USR_IA64, "usr-ia64" },
{ GPT_USR_IA64_VERITY, "usr-ia64-verity" }, { GPT_USR_IA64_VERITY, "usr-ia64-verity" },
{ GPT_USR_RISCV32, "usr-riscv32" },
{ GPT_USR_RISCV32_VERITY, "usr-riscv32-verity" },
{ GPT_USR_RISCV64, "usr-riscv64" },
{ GPT_USR_RISCV64_VERITY, "usr-riscv64-verity" },
#ifdef GPT_USR_NATIVE #ifdef GPT_USR_NATIVE
{ GPT_USR_NATIVE, "usr" }, { GPT_USR_NATIVE, "usr" },
{ GPT_USR_NATIVE_VERITY, "usr-verity" }, { GPT_USR_NATIVE_VERITY, "usr-verity" },

View File

@ -15,11 +15,15 @@
#define GPT_ROOT_ARM SD_ID128_MAKE(69,da,d7,10,2c,e4,4e,3c,b1,6c,21,a1,d4,9a,be,d3) #define GPT_ROOT_ARM SD_ID128_MAKE(69,da,d7,10,2c,e4,4e,3c,b1,6c,21,a1,d4,9a,be,d3)
#define GPT_ROOT_ARM_64 SD_ID128_MAKE(b9,21,b0,45,1d,f0,41,c3,af,44,4c,6f,28,0d,3f,ae) #define GPT_ROOT_ARM_64 SD_ID128_MAKE(b9,21,b0,45,1d,f0,41,c3,af,44,4c,6f,28,0d,3f,ae)
#define GPT_ROOT_IA64 SD_ID128_MAKE(99,3d,8d,3d,f8,0e,42,25,85,5a,9d,af,8e,d7,ea,97) #define GPT_ROOT_IA64 SD_ID128_MAKE(99,3d,8d,3d,f8,0e,42,25,85,5a,9d,af,8e,d7,ea,97)
#define GPT_ROOT_RISCV32 SD_ID128_MAKE(60,d5,a7,fe,8e,7d,43,5c,b7,14,3d,d8,16,21,44,e1)
#define GPT_ROOT_RISCV64 SD_ID128_MAKE(72,ec,70,a6,cf,74,40,e6,bd,49,4b,da,08,e8,f2,24)
#define GPT_USR_X86 SD_ID128_MAKE(75,25,0d,76,8c,c6,45,8e,bd,66,bd,47,cc,81,a8,12) #define GPT_USR_X86 SD_ID128_MAKE(75,25,0d,76,8c,c6,45,8e,bd,66,bd,47,cc,81,a8,12)
#define GPT_USR_X86_64 SD_ID128_MAKE(84,84,68,0c,95,21,48,c6,9c,11,b0,72,06,56,f6,9e) #define GPT_USR_X86_64 SD_ID128_MAKE(84,84,68,0c,95,21,48,c6,9c,11,b0,72,06,56,f6,9e)
#define GPT_USR_ARM SD_ID128_MAKE(7d,03,59,a3,02,b3,4f,0a,86,5c,65,44,03,e7,06,25) #define GPT_USR_ARM SD_ID128_MAKE(7d,03,59,a3,02,b3,4f,0a,86,5c,65,44,03,e7,06,25)
#define GPT_USR_ARM_64 SD_ID128_MAKE(b0,e0,10,50,ee,5f,43,90,94,9a,91,01,b1,71,04,e9) #define GPT_USR_ARM_64 SD_ID128_MAKE(b0,e0,10,50,ee,5f,43,90,94,9a,91,01,b1,71,04,e9)
#define GPT_USR_IA64 SD_ID128_MAKE(43,01,d2,a6,4e,3b,4b,2a,bb,94,9e,0b,2c,42,25,ea) #define GPT_USR_IA64 SD_ID128_MAKE(43,01,d2,a6,4e,3b,4b,2a,bb,94,9e,0b,2c,42,25,ea)
#define GPT_USR_RISCV32 SD_ID128_MAKE(b9,33,fb,22,5c,3f,4f,91,af,90,e2,bb,0f,a5,07,02)
#define GPT_USR_RISCV64 SD_ID128_MAKE(be,ae,c3,4b,84,42,43,9b,a4,0b,98,43,81,ed,09,7d)
#define GPT_ESP SD_ID128_MAKE(c1,2a,73,28,f8,1f,11,d2,ba,4b,00,a0,c9,3e,c9,3b) #define GPT_ESP SD_ID128_MAKE(c1,2a,73,28,f8,1f,11,d2,ba,4b,00,a0,c9,3e,c9,3b)
#define GPT_XBOOTLDR SD_ID128_MAKE(bc,13,c2,ff,59,e6,42,62,a3,52,b2,75,fd,6f,71,72) #define GPT_XBOOTLDR SD_ID128_MAKE(bc,13,c2,ff,59,e6,42,62,a3,52,b2,75,fd,6f,71,72)
#define GPT_SWAP SD_ID128_MAKE(06,57,fd,6d,a4,ab,43,c4,84,e5,09,33,c8,4b,4f,4f) #define GPT_SWAP SD_ID128_MAKE(06,57,fd,6d,a4,ab,43,c4,84,e5,09,33,c8,4b,4f,4f)
@ -37,11 +41,15 @@
#define GPT_ROOT_ARM_VERITY SD_ID128_MAKE(73,86,cd,f2,20,3c,47,a9,a4,98,f2,ec,ce,45,a2,d6) #define GPT_ROOT_ARM_VERITY SD_ID128_MAKE(73,86,cd,f2,20,3c,47,a9,a4,98,f2,ec,ce,45,a2,d6)
#define GPT_ROOT_ARM_64_VERITY SD_ID128_MAKE(df,33,00,ce,d6,9f,4c,92,97,8c,9b,fb,0f,38,d8,20) #define GPT_ROOT_ARM_64_VERITY SD_ID128_MAKE(df,33,00,ce,d6,9f,4c,92,97,8c,9b,fb,0f,38,d8,20)
#define GPT_ROOT_IA64_VERITY SD_ID128_MAKE(86,ed,10,d5,b6,07,45,bb,89,57,d3,50,f2,3d,05,71) #define GPT_ROOT_IA64_VERITY SD_ID128_MAKE(86,ed,10,d5,b6,07,45,bb,89,57,d3,50,f2,3d,05,71)
#define GPT_ROOT_RISCV32_VERITY SD_ID128_MAKE(ae,02,53,be,11,67,40,07,ac,68,43,92,6c,14,c5,de)
#define GPT_ROOT_RISCV64_VERITY SD_ID128_MAKE(b6,ed,55,82,44,0b,42,09,b8,da,5f,f7,c4,19,ea,3d)
#define GPT_USR_X86_VERITY SD_ID128_MAKE(8f,46,1b,0d,14,ee,4e,81,9a,a9,04,9b,6f,b9,7a,bd) #define GPT_USR_X86_VERITY SD_ID128_MAKE(8f,46,1b,0d,14,ee,4e,81,9a,a9,04,9b,6f,b9,7a,bd)
#define GPT_USR_X86_64_VERITY SD_ID128_MAKE(77,ff,5f,63,e7,b6,46,33,ac,f4,15,65,b8,64,c0,e6) #define GPT_USR_X86_64_VERITY SD_ID128_MAKE(77,ff,5f,63,e7,b6,46,33,ac,f4,15,65,b8,64,c0,e6)
#define GPT_USR_ARM_VERITY SD_ID128_MAKE(c2,15,d7,51,7b,cd,46,49,be,90,66,27,49,0a,4c,05) #define GPT_USR_ARM_VERITY SD_ID128_MAKE(c2,15,d7,51,7b,cd,46,49,be,90,66,27,49,0a,4c,05)
#define GPT_USR_ARM_64_VERITY SD_ID128_MAKE(6e,11,a4,e7,fb,ca,4d,ed,b9,e9,e1,a5,12,bb,66,4e) #define GPT_USR_ARM_64_VERITY SD_ID128_MAKE(6e,11,a4,e7,fb,ca,4d,ed,b9,e9,e1,a5,12,bb,66,4e)
#define GPT_USR_IA64_VERITY SD_ID128_MAKE(6a,49,1e,03,3b,e7,45,45,8e,38,83,32,0e,0e,a8,80) #define GPT_USR_IA64_VERITY SD_ID128_MAKE(6a,49,1e,03,3b,e7,45,45,8e,38,83,32,0e,0e,a8,80)
#define GPT_USR_RISCV32_VERITY SD_ID128_MAKE(cb,1e,e4,e3,8c,d0,41,36,a0,a4,aa,61,a3,2e,87,30)
#define GPT_USR_RISCV64_VERITY SD_ID128_MAKE(8f,10,56,be,9b,05,47,c4,81,d6,be,53,12,8e,5b,54)
#if defined(__x86_64__) #if defined(__x86_64__)
# define GPT_ROOT_NATIVE GPT_ROOT_X86_64 # define GPT_ROOT_NATIVE GPT_ROOT_X86_64
@ -82,6 +90,20 @@
# define GPT_USR_NATIVE_VERITY GPT_USR_ARM_VERITY # define GPT_USR_NATIVE_VERITY GPT_USR_ARM_VERITY
#endif #endif
#if defined(__riscv)
#if (__riscv_xlen == 32)
# define GPT_ROOT_NATIVE GPT_ROOT_RISCV32
# define GPT_ROOT_NATIVE_VERITY GPT_ROOT_RISCV32_VERITY
# define GPT_USR_NATIVE GPT_USR_RISCV32
# define GPT_USR_NATIVE_VERITY GPT_USR_RISCV32_VERITY
#elif (__riscv_xlen == 64)
# define GPT_ROOT_NATIVE GPT_ROOT_RISCV64
# define GPT_ROOT_NATIVE_VERITY GPT_ROOT_RISCV64_VERITY
# define GPT_USR_NATIVE GPT_USR_RISCV64
# define GPT_USR_NATIVE_VERITY GPT_USR_RISCV64_VERITY
#endif
#endif
#define GPT_FLAG_REQUIRED_PARTITION (1ULL << 0) #define GPT_FLAG_REQUIRED_PARTITION (1ULL << 0)
#define GPT_FLAG_NO_BLOCK_IO_PROTOCOL (1ULL << 1) #define GPT_FLAG_NO_BLOCK_IO_PROTOCOL (1ULL << 1)
#define GPT_FLAG_LEGACY_BIOS_BOOTABLE (1ULL << 2) #define GPT_FLAG_LEGACY_BIOS_BOOTABLE (1ULL << 2)

View File

@ -104,43 +104,18 @@ static int specifier_last_component(char specifier, const void *data, const void
} }
int install_full_printf(const UnitFileInstallInfo *i, const char *format, char **ret) { int install_full_printf(const UnitFileInstallInfo *i, const char *format, char **ret) {
/* This is similar to unit_full_printf() but does not support /* This is similar to unit_name_printf() */
* anything path-related.
*
* %n: the full id of the unit (foo@bar.waldo)
* %N: the id of the unit without the suffix (foo@bar)
* %p: the prefix (foo)
* %i: the instance (bar)
* %U the UID of the running user
* %u the username of running user
* %m the machine ID of the running system
* %H the hostname of the running system
* %b the boot ID of the running system
* %v `uname -r` of the running system
*/
const Specifier table[] = { const Specifier table[] = {
{ 'i', specifier_instance, NULL },
{ 'j', specifier_last_component, NULL },
{ 'n', specifier_name, NULL }, { 'n', specifier_name, NULL },
{ 'N', specifier_prefix_and_instance, NULL }, { 'N', specifier_prefix_and_instance, NULL },
{ 'p', specifier_prefix, NULL }, { 'p', specifier_prefix, NULL },
{ 'i', specifier_instance, NULL },
{ 'j', specifier_last_component, NULL },
{ 'g', specifier_group_name, NULL }, COMMON_SYSTEM_SPECIFIERS,
{ 'G', specifier_group_id, NULL },
{ 'U', specifier_user_id, NULL },
{ 'u', specifier_user_name, NULL },
{ 'm', specifier_machine_id, NULL }, COMMON_CREDS_SPECIFIERS,
{ 'b', specifier_boot_id, NULL },
{ 'H', specifier_host_name, NULL },
{ 'v', specifier_kernel_release, NULL },
{ 'a', specifier_architecture, NULL },
{ 'o', specifier_os_id, NULL },
{ 'w', specifier_os_version_id, NULL },
{ 'B', specifier_os_build_id, NULL },
{ 'W', specifier_os_variant_id, NULL },
{} {}
}; };

View File

@ -348,10 +348,7 @@ static int output_timestamp_monotonic(FILE *f, sd_journal *j, const char *monoto
static int output_timestamp_realtime(FILE *f, sd_journal *j, OutputMode mode, OutputFlags flags, const char *realtime) { static int output_timestamp_realtime(FILE *f, sd_journal *j, OutputMode mode, OutputFlags flags, const char *realtime) {
char buf[MAX(FORMAT_TIMESTAMP_MAX, 64U)]; char buf[MAX(FORMAT_TIMESTAMP_MAX, 64U)];
struct tm *(*gettime_r)(const time_t *, struct tm *);
struct tm tm;
uint64_t x; uint64_t x;
time_t t;
int r; int r;
assert(f); assert(f);
@ -376,9 +373,9 @@ static int output_timestamp_realtime(FILE *f, sd_journal *j, OutputMode mode, Ou
"Failed to format timestamp: %" PRIu64, x); "Failed to format timestamp: %" PRIu64, x);
} else { } else {
char usec[7]; struct tm tm;
time_t t;
gettime_r = (flags & OUTPUT_UTC) ? gmtime_r : localtime_r;
t = (time_t) (x / USEC_PER_SEC); t = (time_t) (x / USEC_PER_SEC);
switch (mode) { switch (mode) {
@ -388,24 +385,29 @@ static int output_timestamp_realtime(FILE *f, sd_journal *j, OutputMode mode, Ou
break; break;
case OUTPUT_SHORT_ISO: case OUTPUT_SHORT_ISO:
if (strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%S%z", gettime_r(&t, &tm)) <= 0) if (strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%S%z",
localtime_or_gmtime_r(&t, &tm, flags & OUTPUT_UTC)) <= 0)
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Failed to format ISO time"); "Failed to format ISO time");
break; break;
case OUTPUT_SHORT_ISO_PRECISE: case OUTPUT_SHORT_ISO_PRECISE: {
char usec[7];
/* No usec in strftime, so we leave space and copy over */ /* No usec in strftime, so we leave space and copy over */
if (strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%S.xxxxxx%z", gettime_r(&t, &tm)) <= 0) if (strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%S.xxxxxx%z",
localtime_or_gmtime_r(&t, &tm, flags & OUTPUT_UTC)) <= 0)
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Failed to format ISO-precise time"); "Failed to format ISO-precise time");
xsprintf(usec, "%06"PRI_USEC, x % USEC_PER_SEC); xsprintf(usec, "%06"PRI_USEC, x % USEC_PER_SEC);
memcpy(buf + 20, usec, 6); memcpy(buf + 20, usec, 6);
break; break;
}
case OUTPUT_SHORT: case OUTPUT_SHORT:
case OUTPUT_SHORT_PRECISE: case OUTPUT_SHORT_PRECISE:
if (strftime(buf, sizeof(buf), "%b %d %H:%M:%S", gettime_r(&t, &tm)) <= 0) if (strftime(buf, sizeof(buf), "%b %d %H:%M:%S",
localtime_or_gmtime_r(&t, &tm, flags & OUTPUT_UTC)) <= 0)
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Failed to format syslog time"); "Failed to format syslog time");

View File

@ -232,7 +232,7 @@ static int loop_configure(
* ioctl can return EAGAIN in case we change the lo_offset field, if someone else is accessing the * ioctl can return EAGAIN in case we change the lo_offset field, if someone else is accessing the
* block device while we try to reconfigure it. This is a pretty common case, since udev might * block device while we try to reconfigure it. This is a pretty common case, since udev might
* instantly start probing the device as soon as we attach an fd to it. Hence handle it in two ways: * instantly start probing the device as soon as we attach an fd to it. Hence handle it in two ways:
* first, let's take the BSD lock that that ensures that udev will not step in between the point in * first, let's take the BSD lock to ensure that udev will not step in between the point in
* time where we attach the fd and where we reconfigure the device. Secondly, let's wait 50ms on * time where we attach the fd and where we reconfigure the device. Secondly, let's wait 50ms on
* EAGAIN and retry. The former should be an efficient mechanism to avoid we have to wait 50ms * EAGAIN and retry. The former should be an efficient mechanism to avoid we have to wait 50ms
* needlessly if we are just racing against udev. The latter is protection against all other cases, * needlessly if we are just racing against udev. The latter is protection against all other cases,

View File

@ -282,6 +282,7 @@ const SyscallFilterSet syscall_filter_sets[_SYSCALL_FILTER_SET_MAX] = {
.name = "@default", .name = "@default",
.help = "System calls that are always permitted", .help = "System calls that are always permitted",
.value = .value =
"brk\0"
"cacheflush\0" "cacheflush\0"
"clock_getres\0" "clock_getres\0"
"clock_getres_time64\0" "clock_getres_time64\0"
@ -319,6 +320,9 @@ const SyscallFilterSet syscall_filter_sets[_SYSCALL_FILTER_SET_MAX] = {
"getuid\0" "getuid\0"
"getuid32\0" "getuid32\0"
"membarrier\0" "membarrier\0"
"mmap\0"
"mmap2\0"
"munmap\0"
"nanosleep\0" "nanosleep\0"
"pause\0" "pause\0"
"prlimit64\0" "prlimit64\0"
@ -468,9 +472,6 @@ const SyscallFilterSet syscall_filter_sets[_SYSCALL_FILTER_SET_MAX] = {
"mkdirat\0" "mkdirat\0"
"mknod\0" "mknod\0"
"mknodat\0" "mknodat\0"
"mmap\0"
"mmap2\0"
"munmap\0"
"newfstatat\0" "newfstatat\0"
"oldfstat\0" "oldfstat\0"
"oldlstat\0" "oldlstat\0"
@ -844,7 +845,6 @@ const SyscallFilterSet syscall_filter_sets[_SYSCALL_FILTER_SET_MAX] = {
"@signal\0" "@signal\0"
"@sync\0" "@sync\0"
"@timer\0" "@timer\0"
"brk\0"
"capget\0" "capget\0"
"capset\0" "capset\0"
"copy_file_range\0" "copy_file_range\0"
@ -1394,9 +1394,6 @@ int seccomp_restrict_address_families(Set *address_families, bool allow_list) {
case SCMP_ARCH_X32: case SCMP_ARCH_X32:
case SCMP_ARCH_ARM: case SCMP_ARCH_ARM:
case SCMP_ARCH_AARCH64: case SCMP_ARCH_AARCH64:
case SCMP_ARCH_PPC:
case SCMP_ARCH_PPC64:
case SCMP_ARCH_PPC64LE:
case SCMP_ARCH_MIPSEL64N32: case SCMP_ARCH_MIPSEL64N32:
case SCMP_ARCH_MIPS64N32: case SCMP_ARCH_MIPS64N32:
case SCMP_ARCH_MIPSEL64: case SCMP_ARCH_MIPSEL64:
@ -1413,6 +1410,9 @@ int seccomp_restrict_address_families(Set *address_families, bool allow_list) {
case SCMP_ARCH_X86: case SCMP_ARCH_X86:
case SCMP_ARCH_MIPSEL: case SCMP_ARCH_MIPSEL:
case SCMP_ARCH_MIPS: case SCMP_ARCH_MIPS:
case SCMP_ARCH_PPC:
case SCMP_ARCH_PPC64:
case SCMP_ARCH_PPC64LE:
default: default:
/* These we either know we don't support (i.e. are the ones that do use socketcall()), or we /* These we either know we don't support (i.e. are the ones that do use socketcall()), or we
* don't know */ * don't know */

View File

@ -36,6 +36,54 @@ int specifier_user_shell(char specifier, const void *data, const void *userdata,
int specifier_tmp_dir(char specifier, const void *data, const void *userdata, char **ret); int specifier_tmp_dir(char specifier, const void *data, const void *userdata, char **ret);
int specifier_var_tmp_dir(char specifier, const void *data, const void *userdata, char **ret); int specifier_var_tmp_dir(char specifier, const void *data, const void *userdata, char **ret);
/* Typically, in places where one of the above specifier is to be resolved the other similar ones are to be
* resolved, too. Hence let's define common macros for the relevant array entries.
*
* COMMON_SYSTEM_SPECIFIERS:
* %a: the native userspace architecture
* %b: the boot ID of the running system
* %B: the OS build ID, according to /etc/os-release
* %H: the hostname of the running system
* %l: the short hostname of the running system
* %m: the machine ID of the running system
* %o: the OS ID according to /etc/os-release
* %v: the kernel version
* %w: the OS version ID, according to /etc/os-release
* %W: the OS variant ID, according to /etc/os-release
*
* COMMON_CREDS_SPECIFIERS:
* %g: the groupname of the running user
* %G: the GID of the running user
* %u: the username of the running user
* %U: the UID of the running user
*
* COMMON_TMP_SPECIFIERS:
* %T: the temporary directory (e.g. /tmp, or $TMPDIR, $TEMP, $TMP)
* %V: the temporary directory for large, persistent stuff (e.g. /var/tmp, or $TMPDIR, $TEMP, $TMP)
*/
#define COMMON_SYSTEM_SPECIFIERS \
{ 'a', specifier_architecture, NULL }, \
{ 'b', specifier_boot_id, NULL }, \
{ 'B', specifier_os_build_id, NULL }, \
{ 'H', specifier_host_name, NULL }, \
{ 'l', specifier_short_host_name, NULL }, \
{ 'm', specifier_machine_id, NULL }, \
{ 'o', specifier_os_id, NULL }, \
{ 'v', specifier_kernel_release, NULL }, \
{ 'w', specifier_os_version_id, NULL }, \
{ 'W', specifier_os_variant_id, NULL }
#define COMMON_CREDS_SPECIFIERS \
{ 'g', specifier_group_name, NULL }, \
{ 'G', specifier_group_id, NULL }, \
{ 'u', specifier_user_name, NULL }, \
{ 'U', specifier_user_id, NULL }
#define COMMON_TMP_SPECIFIERS \
{ 'T', specifier_tmp_dir, NULL }, \
{ 'V', specifier_var_tmp_dir, NULL }
static inline char* specifier_escape(const char *string) { static inline char* specifier_escape(const char *string) {
return strreplace(string, "%", "%%"); return strreplace(string, "%", "%%");
} }

View File

@ -2062,7 +2062,7 @@ bool user_record_compatible(UserRecord *a, UserRecord *b) {
assert(a); assert(a);
assert(b); assert(b);
/* If either lacks a the regular section, we can't really decide, let's hence say they are /* If either lacks the regular section, we can't really decide, let's hence say they are
* incompatible. */ * incompatible. */
if (!(a->mask & b->mask & USER_RECORD_REGULAR)) if (!(a->mask & b->mask & USER_RECORD_REGULAR))
return false; return false;

View File

@ -232,8 +232,8 @@ static void sync_with_progress(void) {
BLOCK_SIGNALS(SIGCHLD); BLOCK_SIGNALS(SIGCHLD);
/* Due to the possibility of the sync operation hanging, we fork a child process and monitor the progress. If /* Due to the possibility of the sync operation hanging, we fork a child process and monitor
* the timeout lapses, the assumption is that that particular sync stalled. */ * the progress. If the timeout lapses, the assumption is that the particular sync stalled. */
r = asynchronous_sync(&pid); r = asynchronous_sync(&pid);
if (r < 0) { if (r < 0) {

View File

@ -514,10 +514,8 @@ static int remount_with_timeout(MountPoint *m, int umount_log_level) {
assert(m); assert(m);
/* Due to the possibility of a remount operation hanging, we /* Due to the possibility of a remount operation hanging, we fork a child process and set a
* fork a child process and set a timeout. If the timeout * timeout. If the timeout lapses, the assumption is that the particular remount failed. */
* lapses, the assumption is that that particular remount
* failed. */
r = safe_fork("(sd-remount)", FORK_RESET_SIGNALS|FORK_CLOSE_ALL_FDS|FORK_LOG|FORK_REOPEN_LOG, &pid); r = safe_fork("(sd-remount)", FORK_RESET_SIGNALS|FORK_CLOSE_ALL_FDS|FORK_LOG|FORK_REOPEN_LOG, &pid);
if (r < 0) if (r < 0)
return r; return r;
@ -552,10 +550,8 @@ static int umount_with_timeout(MountPoint *m, int umount_log_level) {
assert(m); assert(m);
/* Due to the possibility of a umount operation hanging, we /* Due to the possibility of a umount operation hanging, we fork a child process and set a
* fork a child process and set a timeout. If the timeout * timeout. If the timeout lapses, the assumption is that the particular umount failed. */
* lapses, the assumption is that that particular umount
* failed. */
r = safe_fork("(sd-umount)", FORK_RESET_SIGNALS|FORK_CLOSE_ALL_FDS|FORK_LOG|FORK_REOPEN_LOG, &pid); r = safe_fork("(sd-umount)", FORK_RESET_SIGNALS|FORK_CLOSE_ALL_FDS|FORK_LOG|FORK_REOPEN_LOG, &pid);
if (r < 0) if (r < 0)
return r; return r;

View File

@ -90,6 +90,7 @@ static int get_unit_list_recursive(
static int output_units_list(const UnitInfo *unit_infos, unsigned c) { static int output_units_list(const UnitInfo *unit_infos, unsigned c) {
_cleanup_(table_unrefp) Table *table = NULL; _cleanup_(table_unrefp) Table *table = NULL;
unsigned job_count = 0;
int r; int r;
table = table_new("", "unit", "load", "active", "sub", "job", "description"); table = table_new("", "unit", "load", "active", "sub", "job", "description");
@ -108,8 +109,7 @@ static int output_units_list(const UnitInfo *unit_infos, unsigned c) {
(void) table_set_empty_string(table, "-"); (void) table_set_empty_string(table, "-");
int job_count = 0; for (const UnitInfo *u = unit_infos; unit_infos && u - unit_infos < c; u++) {
for (const UnitInfo *u = unit_infos; unit_infos && u < unit_infos + c; u++) {
_cleanup_free_ char *j = NULL; _cleanup_free_ char *j = NULL;
const char *on_underline = "", *on_loaded = "", *on_active = ""; const char *on_underline = "", *on_loaded = "", *on_active = "";
const char *on_circle = "", *id; const char *on_circle = "", *id;
@ -156,7 +156,7 @@ static int output_units_list(const UnitInfo *unit_infos, unsigned c) {
TABLE_STRING, u->sub_state, TABLE_STRING, u->sub_state,
TABLE_SET_BOTH_COLORS, on_active, TABLE_SET_BOTH_COLORS, on_active,
TABLE_STRING, u->job_id ? u->job_type: "", TABLE_STRING, u->job_id ? u->job_type: "",
TABLE_SET_BOTH_COLORS, u->job_id ? on_underline : "", TABLE_SET_BOTH_COLORS, on_underline,
TABLE_STRING, u->description, TABLE_STRING, u->description,
TABLE_SET_BOTH_COLORS, on_underline); TABLE_SET_BOTH_COLORS, on_underline);
if (r < 0) if (r < 0)
@ -186,7 +186,8 @@ static int output_units_list(const UnitInfo *unit_infos, unsigned c) {
"LOAD = Reflects whether the unit definition was properly loaded.\n" "LOAD = Reflects whether the unit definition was properly loaded.\n"
"ACTIVE = The high-level unit activation state, i.e. generalization of SUB.\n" "ACTIVE = The high-level unit activation state, i.e. generalization of SUB.\n"
"SUB = The low-level unit activation state, values depend on unit type."); "SUB = The low-level unit activation state, values depend on unit type.");
puts(job_count ? "JOB = Pending job for the unit.\n" : ""); if (job_count > 0)
puts("JOB = Pending job for the unit.\n");
on = ansi_highlight(); on = ansi_highlight();
off = ansi_normal(); off = ansi_normal();
} else { } else {

View File

@ -58,17 +58,21 @@ if add_languages('cpp', required : false)
opts += [['c++'], opts += [['c++'],
['c++', '-std=c++98'], ['c++', '-std=c++98'],
['c++', '-std=c++11']] ['c++', '-std=c++11']]
if cc.has_argument('-std=c++14') if cxx.has_argument('-std=c++14')
opts += [['c++', '-std=c++14']] opts += [['c++', '-std=c++14']]
endif endif
if cc.has_argument('-std=c++17') if cxx.has_argument('-std=c++17')
opts += [['c++', '-std=c++17']] opts += [['c++', '-std=c++17']]
endif endif
if cxx.has_argument('-std=c++20')
opts += [['c++', '-std=c++20']]
endif
endif endif
foreach header : _systemd_headers + _not_installed_headers + ['../libudev/libudev.h'] foreach header : _systemd_headers + _not_installed_headers + [libudev_h_path]
foreach opt : opts foreach opt : opts
name = ''.join(['cc-', header.split('/')[-1], '_'] + opt) std_name = opt.length() == 2 ? '_'.join(opt[1].split(':')) : ''
name = ''.join(['cc-', header.split('/')[-1], '_', opt[0], std_name])
if want_tests != 'false' if want_tests != 'false'
test(name, test(name,
check_compilation_sh, check_compilation_sh,

View File

@ -1391,18 +1391,8 @@ static bool item_equal(Item *a, Item *b) {
static int parse_line(const char *fname, unsigned line, const char *buffer) { static int parse_line(const char *fname, unsigned line, const char *buffer) {
static const Specifier specifier_table[] = { static const Specifier specifier_table[] = {
{ 'm', specifier_machine_id, NULL }, COMMON_SYSTEM_SPECIFIERS,
{ 'b', specifier_boot_id, NULL }, COMMON_TMP_SPECIFIERS,
{ 'H', specifier_host_name, NULL },
{ 'l', specifier_short_host_name, NULL },
{ 'v', specifier_kernel_release, NULL },
{ 'a', specifier_architecture, NULL },
{ 'o', specifier_os_id, NULL },
{ 'w', specifier_os_version_id, NULL },
{ 'B', specifier_os_build_id, NULL },
{ 'W', specifier_os_variant_id, NULL },
{ 'T', specifier_tmp_dir, NULL },
{ 'V', specifier_var_tmp_dir, NULL },
{} {}
}; };

Some files were not shown because too many files have changed in this diff Show More