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
PenaltyReturnTypeOnItsOwnLine: 100
SpaceAfterCStyleCast: true
SpaceBeforeParens: ControlStatementsExceptForEachMacros
SpacesInAngles: true
TabWidth: 8
UseCRLF: false

View File

@ -103,7 +103,7 @@ for args in "${ARGS[@]}"; do
SECONDS=0
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"
fi

View File

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

141
NEWS
View File

@ -1,8 +1,8 @@
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
change was made, systemd-udevd was only minimally updated to handle
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
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
RootImage= and RootDirectory= are used, which means that with those
two settings /proc/, /sys/ and /dev/ are automatically properly set
@ -457,20 +484,32 @@ CHANGES WITH 247 in spe:
discipline in the [FlowQueuePIE] sections.
* systemd-networkd's .netdev files may now be used to create "BareUDP"
tunnels, configured in the new [BareUDP] setting. VXLAN tunnels may
now be marked to be independent of any underlying network interface
via the new Independent= boolean setting.
tunnels, configured in the new [BareUDP] setting.
* systemd-networkd's Gateway= setting in .network files now accepts the
special values _dhcp4 and _ipv6ra to configure additional, locally
defined, explicit routes to the gateway acquired via DHCP or IPv6
Router Advertisements.
special values "_dhcp4" and "_ipv6ra" to configure additional,
locally defined, explicit routes to the gateway acquired via DHCP or
IPv6 Router Advertisements. The old setting "_dhcp" is deprecated,
but still accepted for backwards compatibility.
* systemd-networkd's [IPv6PrefixDelegation] section and
IPv6PrefixDelegation= options have been renamed as [IPv6SendRA] and
IPv6SendRA= (the old names are still accepted for backwards
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
"service-log-target" may be used on services that implement the
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
"kill" and "log" actions, in addition to arbitrary error number
specifications as before. If "kill" the the processes are killed on
the event, if "log" the offending system call is audit logged.
specifications as before. If "kill" the processes are killed on the
event, if "log" the offending system call is audit logged.
* A new SystemCallLog= unit file setting has been added that accepts a
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
information reported by the kernel, and kills processes when memory
or swap pressure is above configured limits. This service is only
enabled in developer mode (see below) and should be considered a
preview in this release. Behaviour details and option names are
subject to change without the usual backwards-compatibility promises.
enabled by default in developer mode (see below) and should be
considered a preview in this release. Behaviour details and option
names are subject to change without the usual backwards-compatibility
promises.
* A new helper oomctl has been added to introspect systemd-oomd state.
If also is only available in developer mode and should be considered
a preview without the usual backwards-compatibility promises.
It is only enabled by default in developer mode and should be
considered a preview without the usual backwards-compatibility
promises.
* New meson option -Dcompat-mutable-uid-boundaries= has been added. If
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
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
Ross, Amitanand Chikorde, Andrew Hangsleben, Anita Zhang, Ansgar
Burchardt, Arian van Putten, Aurelien Jarno, Axel Rasmussen, bauen1,
Beniamino Galvani, Benjamin Berg, Bjørn Mork, brainrom, Chandradeep
Dey, Charles Lee, Chris Down, Christian Göttsche, Clemens Gruber, Daan
De Meyer, Daniele Medri, Daniel Mack, Daniel Rusek, Dan Streetman,
David Tardon, Dimitri John Ledkov, Dmitry Borodaenko, Elias Probst,
Elisei Roca, ErrantSpore, Etienne Doms, Fabrice Fontaine, fangxiuning,
Felix Riemann, Florian Klink, Franck Bui, Frantisek Sumsal, fwSmit,
George Rawlinson, germanztz, Gibeom Gwon, Glen Whitney, Gogo Gogsi,
Göran Uddeborg, Grant Mathews, Hans de Goede, Hans Ulrich Niedermann,
Haochen Tong, Harald Seiler, huangyong, Hubert Kario, Ikey Doherty, Jan
Chren, Jan Schlüter, Jérémy Nouhaud, Jian-Hong Pan, Joerg Behrmann,
Jonathan Lebon, Josh Brobst, Juergen Hoetzel, Julien Humbert, Kai-Chuan
Hsieh, Kairui Song, Kamil Dudka, Kir Kolyshkin, Kristijan Gjoshev, Kyle
Huey, Kyle Russell, Lennart Poettering, lichangze, Luca Boccassi, Lucas
Werkmeister, Luca Weiss, Marc Kleine-Budde, Marco Wang, Martin Wilck,
Marti Raudsepp, masmullin2000, Máté Pozsgay, Matt Fenwick, Michael
Biebl, Michael Scherer, Michal Koutný, Michal Sekletár, Michal
Suchanek, Mikael Szreder, Milo Casagrande, mirabilos, Mitsuha_QuQ,
mog422, Muhammet Kara, Nazar Vinnichuk, Nicholas Narsing, Nicolas
Fella, Njibhu, nl6720, Oğuz Ersen, Olivier Le Moal, Ondrej Kozina,
onlybugreports, Pass Automated Testing Suite, Pat Coulthard, Pedro
Ruiz, Peter Hutterer, Phaedrus Leeds, PhoenixDiscord, Piotr Drąg, Plan
C, Purushottam choudhary, Rasmus Villemoes, Renaud Métrich, Robert
Marko, Ronan Pigott, Roy Chen (陳彥廷), RussianNeuroMancer, Samanta
Navarro, Samuel BF, scootergrisen, Sorin Ionescu, Steve Dodd, Susant
Sahani, Timo Rothenpieler, Tobias Hunger, Tobias Kaufmann, Topi
Miettinen, Vito Caputo, Weblate, Wen Yang, williamvds, Yu, Li-Yu, Yuri
Chornoivan, Yu Watanabe, Zbigniew Jędrzejewski-Szmek, Zmicer Turok,
Дамјан Георгиевски
Dey, Charles Lee, Chris Down, Christian Göttsche, Christof Efkemann,
Christoph Ruegge, Clemens Gruber, Daan De Meyer, Daniele Medri, Daniel
Mack, Daniel Rusek, Dan Streetman, David Tardon, Dimitri John Ledkov,
Dmitry Borodaenko, Elias Probst, Elisei Roca, ErrantSpore, Etienne
Doms, Fabrice Fontaine, fangxiuning, Felix Riemann, Florian Klink,
Franck Bui, Frantisek Sumsal, fwSmit, George Rawlinson, germanztz,
Gibeom Gwon, Glen Whitney, Gogo Gogsi, Göran Uddeborg, Grant Mathews,
Hans de Goede, Hans Ulrich Niedermann, Haochen Tong, Harald Seiler,
huangyong, Hubert Kario, igo95862, Ikey Doherty, Insun Pyo, Jan Chren,
Jan Schlüter, Jérémy Nouhaud, Jian-Hong Pan, Joerg Behrmann, Jonathan
Lebon, Jörg Thalheim, Josh Brobst, Juergen Hoetzel, Julien Humbert,
Kai-Chuan Hsieh, Kairui Song, Kamil Dudka, Kir Kolyshkin, Kristijan
Gjoshev, Kyle Huey, Kyle Russell, Lee Whalen, Lennart Poettering,
lichangze, Luca Boccassi, Lucas Werkmeister, Luca Weiss, Marc
Kleine-Budde, Marco Wang, Martin Wilck, Marti Raudsepp, masmullin2000,
Máté Pozsgay, Matt Fenwick, Michael Biebl, Michael Scherer, Michal
Koutný, Michal Sekletár, Michal Suchanek, Mikael Szreder, Milo
Casagrande, mirabilos, Mitsuha_QuQ, mog422, Muhammet Kara, Nazar
Vinnichuk, Nicholas Narsing, Nicolas Fella, Njibhu, nl6720, Oğuz Ersen,
Olivier Le Moal, Ondrej Kozina, onlybugreports, Pass Automated Testing
Suite, Pat Coulthard, Pavel Sapezhko, Pedro Ruiz, perry_yuan, Peter
Hutterer, Phaedrus Leeds, PhoenixDiscord, Piotr Drąg, Plan C,
Purushottam choudhary, Rasmus Villemoes, Renaud Métrich, Robert Marko,
Roman Beranek, Ronan Pigott, Roy Chen (陳彥廷), RussianNeuroMancer,
Samanta Navarro, Samuel BF, scootergrisen, Sorin Ionescu, Steve Dodd,
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:

14
TODO
View File

@ -20,6 +20,18 @@ Janitorial Clean-ups:
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
tried because idle.
@ -634,7 +646,7 @@ Features:
parameters
* 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
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

View File

@ -30,3 +30,12 @@ expression e;
+ return
log_LEVEL_errno(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]+$";
expression list args;
@@
- return log_LEVEL_errno(ERRNO, args);
+ return log_LEVEL_errno(SYNTHETIC_ERRNO(ERRNO), args);
- log_LEVEL_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
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
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
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.
@ -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
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
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
everybody. However, that's a systemd-specific interface and other init systems
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 |
| `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 |
| `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. |
| `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 |
| `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 |
| `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. |
| `8484680c-9521-48c6-9c11-b0720656f69e` | _`/usr/` Partition (x86-64)_ | 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 |
| `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. |
| `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 |
| `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 |
| `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`. |
| `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`. |

View File

@ -517,7 +517,7 @@ _packed_ struct HashTableObject {
```
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
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.
@ -651,15 +651,15 @@ look up the FIELD object and follow the chain of links to all DATA it includes.
### Writing
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
it should be appended and added to the data hash table. When a field data
object is added the field hash table should be checked for the field name of
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,
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
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
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.
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
2. Update the contributors list in NEWS (`ninja -C build git-contrib`)
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`
6. Tag the release: `version=vXXX-rcY && git tag -s "${version}" -m "systemd ${version}"`
7. Do `ninja -C build`
8. Make sure that the version string and package string match: `build/systemctl --version`
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.
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`)
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 2020-11-10 14:13:39.264693047 +0100
--- 20-acpi-vendor.hwdb.base 2020-11-26 13:49:35.243482590 +0100
+++ 20-acpi-vendor.hwdb 2020-11-26 13:49:35.260482675 +0100
@@ -3,6 +3,8 @@
# Data imported from:
# https://uefi.org/uefi-pnp-export

View File

@ -380,6 +380,12 @@ pci:v*d*sv*sd*bc08sc06*
pci:v*d*sv*sd*bc08sc80*
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*
ID_PCI_CLASS_FROM_DATABASE=Input device controller

View File

@ -122,6 +122,9 @@ pci:v0000018Ad00000106*
pci:v000001DE*
ID_VENDOR_FROM_DATABASE=Oxide Computer Company
pci:v00000200*
ID_VENDOR_FROM_DATABASE=Dell (wrong ID)
pci:v0000021B*
ID_VENDOR_FROM_DATABASE=Compaq Computer Corporation
@ -7979,6 +7982,9 @@ pci:v00001002d00006820sv000017AAsd00003801*
pci:v00001002d00006820sv000017AAsd00003824*
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*
ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M / R9 M270X/M370X]
@ -10025,6 +10031,9 @@ pci:v00001002d00006939sv0000148Csd00009380*
pci:v00001002d00006939sv0000174Bsd0000E308*
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*
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]
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*
ID_MODEL_FROM_DATABASE=Navi 23
ID_MODEL_FROM_DATABASE=Navi 22
pci:v00001002d000073DF*
ID_MODEL_FROM_DATABASE=Navi 22
pci:v00001002d000073FF*
ID_MODEL_FROM_DATABASE=Navi 23
pci:v00001002d00007833*
ID_MODEL_FROM_DATABASE=RS350 Host Bridge
@ -28023,7 +28035,7 @@ pci:v000010DEd000000F4*
ID_MODEL_FROM_DATABASE=NV43 [GeForce 6600 LE]
pci:v000010DEd000000F5*
ID_MODEL_FROM_DATABASE=G71 [GeForce 7800 GS AGP]
ID_MODEL_FROM_DATABASE=G70/G71 [GeForce 7800 GS AGP]
pci:v000010DEd000000F6*
ID_MODEL_FROM_DATABASE=NV43 [GeForce 6800 GS/XT]
@ -34682,6 +34694,9 @@ pci:v000010DEd0000128B*
pci:v000010DEd0000128Bsv00001043sd000085F7*
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*
ID_MODEL_FROM_DATABASE=GK208B
@ -35859,13 +35874,13 @@ pci:v000010DEd00002204*
ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3090]
pci:v000010DEd00002206*
ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3080 10GB / 20GB]
ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3080]
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*
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*
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]
pci:v000010DEd00002484*
ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070 8GB / 16GB]
ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070]
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*
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*
ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3060 Ti]
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*
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]
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*
ID_MODEL_FROM_DATABASE=GA106 [GeForce RTX 3060 Engineering Sample]
@ -36608,6 +36626,9 @@ pci:v000010ECd00005289*
pci:v000010ECd00005289sv00001043sd00001457*
ID_MODEL_FROM_DATABASE=RTL8411 PCI Express Card Reader (K55A Laptop)
pci:v000010ECd00005762*
ID_MODEL_FROM_DATABASE=RTS5763DL NVMe SSD Controller
pci:v000010ECd00008029*
ID_MODEL_FROM_DATABASE=RTL-8029(AS)
@ -57917,6 +57938,9 @@ pci:v000014F1d00008800sv00000070sd00007801*
pci:v000014F1d00008800sv00000070sd00009001*
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*
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*
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*
ID_MODEL_FROM_DATABASE=WD Black 2019/PC SN750 NVMe SSD
@ -60020,6 +60050,9 @@ pci:v000015B7d00005009*
pci:v000015B7d00005009sv000015B7sd00005009*
ID_MODEL_FROM_DATABASE=WD Blue SN550 NVMe SSD
pci:v000015B7d0000500D*
ID_MODEL_FROM_DATABASE=WD Ultrastar DC SN340 NVMe SSD
pci:v000015B8*
ID_VENDOR_FROM_DATABASE=ADDI-DATA GmbH
@ -64328,6 +64361,12 @@ pci:v000018F4d000001A5*
pci:v000018F4d000001C5*
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*
ID_VENDOR_FROM_DATABASE=NextIO
@ -65459,6 +65498,9 @@ pci:v0000197Bd00000260*
pci:v0000197Bd00000368*
ID_MODEL_FROM_DATABASE=JMB368 IDE controller
pci:v0000197Bd00000585*
ID_MODEL_FROM_DATABASE=JMB58x AHCI SATA controller
pci:v0000197Bd00002360*
ID_MODEL_FROM_DATABASE=JMB360 AHCI Controller
@ -65877,7 +65919,7 @@ pci:v000019E5d00001710*
ID_MODEL_FROM_DATABASE=iBMA Virtual Network Adapter
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*
ID_MODEL_FROM_DATABASE=Hi1822 Family (4*25GE)
@ -66176,8 +66218,8 @@ pci:v00001A4Ad00001000*
pci:v00001A4Ad00001010*
ID_MODEL_FROM_DATABASE=AMC EVR - Stockholm Timing Board
pci:v00001A4Ad00001020*
ID_MODEL_FROM_DATABASE=Cluster On Board (COB) Ethernet Switch
pci:v00001A4Ad00001030*
ID_MODEL_FROM_DATABASE=PGPCard - Gen3 GIGe Interface
pci:v00001A4Ad00002000*
ID_MODEL_FROM_DATABASE=PGPCard - 4 Lane
@ -66188,12 +66230,24 @@ pci:v00001A4Ad00002001*
pci:v00001A4Ad00002010*
ID_MODEL_FROM_DATABASE=PCI-Express EVR
pci:v00001A4Ad00002011*
ID_MODEL_FROM_DATABASE=PCI-Express EVR - TPR Version
pci:v00001A4Ad00002020*
ID_MODEL_FROM_DATABASE=PGP-GEN3 PCIe
ID_MODEL_FROM_DATABASE=PGP-GEN3 PCIe - 8 Lane Plus EVR
pci:v00001A4Ad00002030*
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*
ID_VENDOR_FROM_DATABASE=Hectronic AB
@ -66692,6 +66746,9 @@ pci:v00001B1A*
pci:v00001B1Ad00000E70*
ID_MODEL_FROM_DATABASE=GRAPE
pci:v00001B1C*
ID_VENDOR_FROM_DATABASE=Corsair
pci:v00001B21*
ID_VENDOR_FROM_DATABASE=ASMedia Technology Inc.
@ -66704,6 +66761,9 @@ pci:v00001B21d00000612*
pci:v00001B21d00000612sv00001849sd00000612*
ID_MODEL_FROM_DATABASE=ASM1062 Serial ATA Controller (Motherboard)
pci:v00001B21d00001040*
ID_MODEL_FROM_DATABASE=ASM1040 XHCI Controller
pci:v00001B21d00001042*
ID_MODEL_FROM_DATABASE=ASM1042 SuperSpeed USB Host Controller
@ -66935,6 +66995,12 @@ pci:v00001B4Bd00000640*
pci:v00001B4Bd00002241*
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*
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*
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*
ID_VENDOR_FROM_DATABASE=XAVi Technologies Corp.
@ -67760,6 +67856,9 @@ pci:v00001CD2d00000305*
pci:v00001CD2d00000306*
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*
ID_VENDOR_FROM_DATABASE=Nanjing Magewell Electronics Co., Ltd.
@ -68279,6 +68378,9 @@ pci:v00001D78d00001512sv00001D78sd00003107*
pci:v00001D7C*
ID_VENDOR_FROM_DATABASE=Aerotech, Inc.
pci:v00001D7Cd00000001*
ID_MODEL_FROM_DATABASE=HyperWire Adapter
pci:v00001D82*
ID_VENDOR_FROM_DATABASE=NETINT Technologies Inc.
@ -68423,6 +68525,9 @@ pci:v00001DA1*
pci:v00001DA2*
ID_VENDOR_FROM_DATABASE=Sapphire Technology Limited
pci:v00001DA2d0000E26A*
ID_MODEL_FROM_DATABASE=Radeon R7 250
pci:v00001DA3*
ID_VENDOR_FROM_DATABASE=Habana Labs Ltd.
@ -68831,6 +68936,12 @@ pci:v00001E0Fd00000007sv00001028sd00002110*
pci:v00001E0Fd00000007sv00001E0Fsd00000001*
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*
ID_VENDOR_FROM_DATABASE=Arnold & Richter Cine Technik GmbH & Co. Betriebs KG
@ -68867,12 +68978,99 @@ pci:v00001E36*
pci:v00001E36d00000001*
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*
ID_VENDOR_FROM_DATABASE=Blaize, Inc
pci:v00001E38d00000102*
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*
ID_VENDOR_FROM_DATABASE=Burlywood, Inc
@ -68948,6 +69146,9 @@ pci:v00001E94*
pci:v00001E95*
ID_VENDOR_FROM_DATABASE=Solid State Storage Technology Corporation
pci:v00001EAB*
ID_VENDOR_FROM_DATABASE=Hefei DATANG Storage Technology Co.,LTD.
pci:v00001EAE*
ID_VENDOR_FROM_DATABASE=XFX Limited
@ -69195,7 +69396,7 @@ pci:v00002646*
ID_VENDOR_FROM_DATABASE=Kingston Technology Company, Inc.
pci:v00002646d00002263*
ID_MODEL_FROM_DATABASE=A2000, M.2, 500GB
ID_MODEL_FROM_DATABASE=A2000 NVMe SSD
pci:v0000270B*
ID_VENDOR_FROM_DATABASE=Xantel Corporation
@ -73016,6 +73217,12 @@ pci:v00008086d00000A55sv00001028sd00001FE8*
pci:v00008086d00000A55sv00001028sd00001FE9*
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*
ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Beta Rock Controller]
@ -76127,6 +76334,18 @@ pci:v00008086d00001240*
pci:v00008086d0000124B*
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*
ID_MODEL_FROM_DATABASE=430HX - 82439HX TXC [Triton II]
@ -76280,6 +76499,9 @@ pci:v00008086d0000151C*
pci:v00008086d0000151Csv0000108Esd00007B13*
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*
ID_MODEL_FROM_DATABASE=I350 Ethernet Controller Virtual Function
@ -79466,6 +79688,9 @@ pci:v00008086d00001F27*
pci:v00008086d00001F2C*
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*
ID_MODEL_FROM_DATABASE=Atom processor C2000 RAID SATA2 Controller
@ -81977,6 +82202,15 @@ pci:v00008086d00002520*
pci:v00008086d00002521*
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*
ID_MODEL_FROM_DATABASE=Wireless-AC 9260
@ -92663,12 +92897,21 @@ pci:v00008086d00009A13*
pci:v00008086d00009A14*
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*
ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt NHI #0
pci:v00008086d00009A1D*
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*
ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt PCI Express Root Port #0
@ -92681,11 +92924,23 @@ pci:v00008086d00009A27*
pci:v00008086d00009A29*
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*
ID_MODEL_FROM_DATABASE=Tiger Lake Trace Hub
pci:v00008086d00009A49*
ID_MODEL_FROM_DATABASE=UHD Graphics
ID_MODEL_FROM_DATABASE=Iris Xe Graphics
pci:v00008086d00009B41*
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
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_01=1159:4700:53
EVDEV_ABS_35=1232:5711:51
EVDEV_ABS_36=1159:4700:53
EVDEV_ABS_00=1232:5711:51:13
EVDEV_ABS_01=1159:4700:53:13
EVDEV_ABS_35=1232:5711:51:13
EVDEV_ABS_36=1159:4700:53:13
# Lenovo ThinkPad X140e
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_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.
evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO*:pvrThinkPadX1Carbon4th:*
EVDEV_ABS_00=1262:5679:44

View File

@ -373,7 +373,11 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnDell*:pnXPS12-9Q33*:*
evdev:name:Dell WMI hotkeys:dmi:bvn*:bvr*:bd*:svnDell*:pnLatitude*:*
# Dell Precision microphone mute
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
@ -484,7 +488,7 @@ evdev:input:b0003v0458p0708*
###########################################################
evdev:name:Intel HID events:dmi:bvn*:bvr*:bd*:svnHP*:pn*:*
KEYBOARD_KEY_8=unknown # Use hp-wireless instead
KEYBOARD_KEY_8=unknown # Use hp-wireless instead
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*:*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pn*:*
@ -859,7 +863,7 @@ evdev:atkbd:dmi:bvn*:bvr*:svnLENOVO:pn81Q7*:pvrLenovoYogaS940:*
# Lenovo Y50-70
evdev:atkbd:dmi:bvn*:bvr*:svnLENOVO*:pn*20378*:*
KEYBOARD_KEY_f3=f21 # Fn+F6 (toggle touchpad)
KEYBOARD_KEY_f3=f21 # Fn+F6 (toggle touchpad)
# V480
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*Lenovo*V480*:*
@ -890,53 +894,54 @@ evdev:input:b0003v04B3p301B*
# logitech custom consumer usage-page codes. The mappings below are the most
# common, but some mapping may differ, especially the Fn F1-F12 mappings
evdev:input:b0003v046Dp00*
KEYBOARD_KEY_c0183=media # HUT:config, kbd:Media/Music player button
KEYBOARD_KEY_c1001=chat # Messenger button
KEYBOARD_KEY_c1002=camera # Webcam button
KEYBOARD_KEY_c1003=audio # Music Browser button
KEYBOARD_KEY_c1004=video # Video Browser button
KEYBOARD_KEY_c1005=images # Image Browser button
KEYBOARD_KEY_c100a=documents # Document Browser button
KEYBOARD_KEY_c100b=rewind # Rewind button
KEYBOARD_KEY_c100c=fastforward # Fast Forward button
KEYBOARD_KEY_c100f=f14 # Track 1 button → f14 → XF86Launch5
KEYBOARD_KEY_c1010=f15 # Track 2 button → f15 → XF86Launch6
KEYBOARD_KEY_c1011=channeldown # Playlist back button
KEYBOARD_KEY_c1012=channelup # Playlist advance button
KEYBOARD_KEY_c1013=camera # Webcam button
KEYBOARD_KEY_c1014=coffee # Status button
KEYBOARD_KEY_c1015=record # Record symbol button
KEYBOARD_KEY_c1016=sound # Flame/CD burning → sound → XF86AudioPreset
KEYBOARD_KEY_c1017=ejectcd # Eject button
KEYBOARD_KEY_c1018=config # Remote-control ico
KEYBOARD_KEY_c1019=f14 # Preset 1 → f14 → XF86Launch5
KEYBOARD_KEY_c101a=f15 # Preset 2 → f15 → XF86Launch6
KEYBOARD_KEY_c101b=f16 # Preset 3 → f16 → XF86Launch7
KEYBOARD_KEY_c101c=cyclewindows # 2 overlapping windows icon
KEYBOARD_KEY_c101f=zoomout # zoom - button / - side of zoomrocker
KEYBOARD_KEY_c1020=zoomin # zoom + button / + side off zoom rocker
KEYBOARD_KEY_c1021=zoomreset # 100% symbol on kbd left side
KEYBOARD_KEY_c1023=close # [x] symbol on kbd left side
KEYBOARD_KEY_c1027=menu # Hamburger menu icon
KEYBOARD_KEY_c1028=angle # Rotate button
KEYBOARD_KEY_c1029=shuffle # Shuffle button
KEYBOARD_KEY_c102a=back # Back button
KEYBOARD_KEY_c102b=cyclewindows # Empty window icon
KEYBOARD_KEY_c102d=www # www text + magnifierglass icon
KEYBOARD_KEY_c1031=connect # Pickup phone button → connect → XF86Go
KEYBOARD_KEY_c1032=cancel # Hangup phone button → cancel → Cancel
KEYBOARD_KEY_c1041=help # Help text or icon (Fn + F1)
KEYBOARD_KEY_c1042=wordprocessor # Word icon (Fn + F2)
KEYBOARD_KEY_c1043=spreadsheet # Excel icon (Fn + F3)
KEYBOARD_KEY_c1044=presentation # Presentation icon (Fn + F4)
KEYBOARD_KEY_c1045=undo # Undo Icon (Fn + F5)
KEYBOARD_KEY_c1046=redo # Redo Icon (Fn + F6)
KEYBOARD_KEY_c1047=print # Printer Icon (Fn + F7)
KEYBOARD_KEY_c1048=save # Floppy Icon (Fn + F8)
KEYBOARD_KEY_c1049=prog1 # Smartkey A (Fn + F9) → XF86Launch1
KEYBOARD_KEY_c104a=prog2 # Smartkey B (Fn + F10) → XF86Launch2
KEYBOARD_KEY_c104b=prog3 # Smartkey C (Fn + F11) → XF86Launch3
KEYBOARD_KEY_c104c=prog4 # Smartkey D (Fn + F12) → XF86Launch4
KEYBOARD_KEY_c0183=media # HUT:config, kbd:Media/Music player button
KEYBOARD_KEY_c1001=chat # Messenger button
KEYBOARD_KEY_c1002=camera # Webcam button
KEYBOARD_KEY_c1003=audio # Music Browser button
KEYBOARD_KEY_c1004=video # Video Browser button
KEYBOARD_KEY_c1005=images # Image Browser button
KEYBOARD_KEY_c100a=documents # Document Browser button
KEYBOARD_KEY_c100b=rewind # Rewind button
KEYBOARD_KEY_c100c=fastforward # Fast Forward button
KEYBOARD_KEY_c100f=f14 # Track 1 button → f14 → XF86Launch5
KEYBOARD_KEY_c1010=f15 # Track 2 button → f15 → XF86Launch6
KEYBOARD_KEY_c1011=channeldown # Playlist back button
KEYBOARD_KEY_c1012=channelup # Playlist advance button
KEYBOARD_KEY_c1013=camera # Webcam button
KEYBOARD_KEY_c1014=coffee # Status button
KEYBOARD_KEY_c1015=record # Record symbol button
KEYBOARD_KEY_c1016=sound # Flame/CD burning → sound → XF86AudioPreset
KEYBOARD_KEY_c1017=ejectcd # Eject button
KEYBOARD_KEY_c1018=config # Remote-control ico
KEYBOARD_KEY_c1019=f14 # Preset 1 → f14 → XF86Launch5
KEYBOARD_KEY_c101a=f15 # Preset 2 → f15 → XF86Launch6
KEYBOARD_KEY_c101b=f16 # Preset 3 → f16 → XF86Launch7
KEYBOARD_KEY_c101c=cyclewindows # 2 overlapping windows icon
KEYBOARD_KEY_c101f=zoomout # zoom - button / - side of zoomrocker
KEYBOARD_KEY_c1020=zoomin # zoom + button / + side off zoom rocker
KEYBOARD_KEY_c1021=zoomreset # 100% symbol on kbd left side
KEYBOARD_KEY_c1023=close # [x] symbol on kbd left side
KEYBOARD_KEY_c1027=menu # Hamburger menu icon
KEYBOARD_KEY_c1028=angle # Rotate button
KEYBOARD_KEY_c1029=shuffle # Shuffle button
KEYBOARD_KEY_c102a=back # Back button
KEYBOARD_KEY_c102b=cyclewindows # Empty window icon
KEYBOARD_KEY_c102c=fn # Fn key
KEYBOARD_KEY_c102d=www # www text + magnifierglass icon
KEYBOARD_KEY_c1031=connect # Pickup phone button → connect → XF86Go
KEYBOARD_KEY_c1032=cancel # Hangup phone button → cancel → Cancel
KEYBOARD_KEY_c1041=help # Help text or icon (Fn + F1)
KEYBOARD_KEY_c1042=wordprocessor # Word icon (Fn + F2)
KEYBOARD_KEY_c1043=spreadsheet # Excel icon (Fn + F3)
KEYBOARD_KEY_c1044=presentation # Presentation icon (Fn + F4)
KEYBOARD_KEY_c1045=undo # Undo Icon (Fn + F5)
KEYBOARD_KEY_c1046=redo # Redo Icon (Fn + F6)
KEYBOARD_KEY_c1047=print # Printer Icon (Fn + F7)
KEYBOARD_KEY_c1048=save # Floppy Icon (Fn + F8)
KEYBOARD_KEY_c1049=prog1 # Smartkey A (Fn + F9) → XF86Launch1
KEYBOARD_KEY_c104a=prog2 # Smartkey B (Fn + F10) → XF86Launch2
KEYBOARD_KEY_c104b=prog3 # Smartkey C (Fn + F11) → XF86Launch3
KEYBOARD_KEY_c104c=prog4 # Smartkey D (Fn + F12) → XF86Launch4
# Cordless Access Keyboard (27 MHz, modelnumber Y-RH35)
evdev:input:b0003v046Dp0042*
@ -966,7 +971,7 @@ evdev:input:b0003v046Dp0045*
# S510 keyboard (27 MHz, modelnumber Y-RAK73)
evdev:input:b0003v046Dp0056*
KEYBOARD_KEY_c1041=battery # Battery icon (Fn + F1)
KEYBOARD_KEY_c1041=battery # Battery icon (Fn + F1)
# MX3000 keyboard (27 MHz, modelnumber Y-RAM74)
# We ignore the scroll up / down keypress events since these buttons also
@ -975,7 +980,7 @@ evdev:input:b0003v046Dp0056*
# cleared then the scroll-wheel events for these buttons go away and then
# tilting the scrollwheel left/right starts sending c1022 / c1024 events
evdev:input:b0003v046Dp0057*
KEYBOARD_KEY_c1041=battery # Battery icon (Fn + F1)
KEYBOARD_KEY_c1041=battery # Battery icon (Fn + F1)
#KEYBOARD_KEY_c101d=scrolldown # Button below scrollwheel (see note above)
#KEYBOARD_KEY_c101e=scrollup # Button above scrollwheel (see note above)
@ -984,69 +989,82 @@ evdev:input:b0003v046Dp0057*
# MX3200 keyboard (27 MHz, modelnumber Y-RAV80)
evdev:input:b0003v046Dp005C*
KEYBOARD_KEY_c1001=phone # VOIP button
KEYBOARD_KEY_c1016=record # Record button
KEYBOARD_KEY_c1041=wordprocessor # Word icon (Fn + F1)
KEYBOARD_KEY_c1042=spreadsheet # Excel icon (Fn + F2)
KEYBOARD_KEY_c1043=calendar # Calendar icon (Fn + F3)
KEYBOARD_KEY_c1044=documents # My Documents icon (Fn + F4)
KEYBOARD_KEY_c1045=prog1 # Smartkey A (Fn + F5) → XF86Launch1
KEYBOARD_KEY_c1046=prog2 # Smartkey B (Fn + F6) → XF86Launch2
KEYBOARD_KEY_c1047=prog3 # Smartkey C (Fn + F7) → XF86Launch3
KEYBOARD_KEY_c1048=prog4 # Smartkey D (Fn + F8) → XF86Launch4
KEYBOARD_KEY_c1001=phone # VOIP button
KEYBOARD_KEY_c1016=record # Record button
KEYBOARD_KEY_c1041=wordprocessor # Word icon (Fn + F1)
KEYBOARD_KEY_c1042=spreadsheet # Excel icon (Fn + F2)
KEYBOARD_KEY_c1043=calendar # Calendar icon (Fn + F3)
KEYBOARD_KEY_c1044=documents # My Documents icon (Fn + F4)
KEYBOARD_KEY_c1045=prog1 # Smartkey A (Fn + F5) → XF86Launch1
KEYBOARD_KEY_c1046=prog2 # Smartkey B (Fn + F6) → XF86Launch2
KEYBOARD_KEY_c1047=prog3 # Smartkey C (Fn + F7) → XF86Launch3
KEYBOARD_KEY_c1048=prog4 # Smartkey D (Fn + F8) → XF86Launch4
# EX100 keyboard (27 MHz, modelnumber Y-RBH94)
evdev:input:b0003v046Dp0065*
KEYBOARD_KEY_c104b=battery # Battery icon (Fn + F11)
KEYBOARD_KEY_c104c=ejectcd # Eject icon (Fn + F12)
KEYBOARD_KEY_c104b=battery # Battery icon (Fn + F11)
KEYBOARD_KEY_c104c=ejectcd # Eject icon (Fn + F12)
# S520 keyboard (27 MHz, modelnumber Y-RBA97)
# Note this one uses non-standard codes for FN + F9 - Fn + F12?
evdev:input:b0003v046Dp0066*
KEYBOARD_KEY_c100e=prog4 # Smartkey D (Fn + F12) → XF86Launch4
KEYBOARD_KEY_c1019=prog1 # Smartkey A (Fn + F9) → XF86Launch1
KEYBOARD_KEY_c101a=prog2 # Smartkey B (Fn + F10) → XF86Launch2
KEYBOARD_KEY_c101b=prog3 # Smartkey C (Fn + F11) → XF86Launch3
KEYBOARD_KEY_c1041=wordprocessor # Word icon (Fn + F1)
KEYBOARD_KEY_c1042=spreadsheet # Excel icon (Fn + F2)
KEYBOARD_KEY_c1043=presentation # Presentation icon (Fn + F3)
KEYBOARD_KEY_c1044=calendar # Calendar icon (Fn + F4)
KEYBOARD_KEY_c1045=homepage # Home icon (Fn + F5)
KEYBOARD_KEY_c1046=email # Letter icon (Fn + F6)
KEYBOARD_KEY_c1047=search # Magnifying glass icon (Fn + F7)
KEYBOARD_KEY_c1048=config # Window with gear icon (Fn + F8)
KEYBOARD_KEY_c106f=battery # Battery icon
KEYBOARD_KEY_c100e=prog4 # Smartkey D (Fn + F12) → XF86Launch4
KEYBOARD_KEY_c1019=prog1 # Smartkey A (Fn + F9) → XF86Launch1
KEYBOARD_KEY_c101a=prog2 # Smartkey B (Fn + F10) → XF86Launch2
KEYBOARD_KEY_c101b=prog3 # Smartkey C (Fn + F11) → XF86Launch3
KEYBOARD_KEY_c1041=wordprocessor # Word icon (Fn + F1)
KEYBOARD_KEY_c1042=spreadsheet # Excel icon (Fn + F2)
KEYBOARD_KEY_c1043=presentation # Presentation icon (Fn + F3)
KEYBOARD_KEY_c1044=calendar # Calendar icon (Fn + F4)
KEYBOARD_KEY_c1045=homepage # Home icon (Fn + F5)
KEYBOARD_KEY_c1046=email # Letter icon (Fn + F6)
KEYBOARD_KEY_c1047=search # Magnifying glass icon (Fn + F7)
KEYBOARD_KEY_c1048=config # Window with gear icon (Fn + F8)
KEYBOARD_KEY_c106f=battery # Battery icon
# S510 remote control (27 MHz)
evdev:input:b0003v046Dp00FE*
KEYBOARD_KEY_c1018=media # Media button
KEYBOARD_KEY_c1018=media # Media button
# MX5000 keyboard (HID proxy mode and bluetooth matches)
evdev:input:b0003v046DpB305*
evdev:input:b0005v046DpB305*
KEYBOARD_KEY_c0230=zoomreset # HUT says fullscreen, kbd says 100%
KEYBOARD_KEY_c1004=send # Send and receive / sync button
KEYBOARD_KEY_c1006=coffee # Status (online/away) button
KEYBOARD_KEY_c1007=camera # Webcam button
KEYBOARD_KEY_c100c=kbd_lcd_menu1 # 1st button below the builtin LCD
KEYBOARD_KEY_c100d=kbd_lcd_menu4 # 4th button below the builtin LCD
KEYBOARD_KEY_c100e=kbd_lcd_menu2 # 2nd button below the builtin LCD
KEYBOARD_KEY_c100f=kbd_lcd_menu3 # 3th button below the builtin LCD
KEYBOARD_KEY_c1038=prog1 # Smartkey A → XF86Launch1
KEYBOARD_KEY_c1039=prog2 # Smartkey B → XF86Launch2
KEYBOARD_KEY_c103a=prog3 # Smartkey C → XF86Launch3
KEYBOARD_KEY_c103b=prog4 # Smartkey D → XF86Launch4
KEYBOARD_KEY_c0183=media # HUT says config, kbd says Media
KEYBOARD_KEY_c0230=zoomreset # HUT says fullscreen, kbd says 100%
KEYBOARD_KEY_c1004=send # Send and receive / sync button
KEYBOARD_KEY_c1006=coffee # Status (online/away) button
KEYBOARD_KEY_c1007=camera # Webcam button
KEYBOARD_KEY_c100c=kbd_lcd_menu1 # 1st button below the builtin LCD
KEYBOARD_KEY_c100d=kbd_lcd_menu4 # 4th button below the builtin LCD
KEYBOARD_KEY_c100e=kbd_lcd_menu2 # 2nd button below the builtin LCD
KEYBOARD_KEY_c100f=kbd_lcd_menu3 # 3th button below the builtin LCD
KEYBOARD_KEY_c1038=prog1 # Smartkey A → XF86Launch1
KEYBOARD_KEY_c1039=prog2 # Smartkey B → XF86Launch2
KEYBOARD_KEY_c103a=prog3 # Smartkey C → XF86Launch3
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)
evdev:input:b0003v046DpB30B*
evdev:input:b0005v046DpB30B*
KEYBOARD_KEY_c0183=media # HUT says consumer control configuration, kbd says Media Center
KEYBOARD_KEY_c100e=images # Camera icon, "Photo Gallery"
KEYBOARD_KEY_c100f=config # Window with gear icon
KEYBOARD_KEY_c1038=prog1 # Smartkey A → XF86Launch1
KEYBOARD_KEY_c1039=prog2 # Smartkey B → XF86Launch2
KEYBOARD_KEY_c103a=prog3 # Smartkey C → XF86Launch3
KEYBOARD_KEY_c103b=prog4 # Smartkey D → XF86Launch4
KEYBOARD_KEY_c0183=media # HUT says consumer control configuration, kbd says Media Center
KEYBOARD_KEY_c100e=images # Camera icon, "Photo Gallery"
KEYBOARD_KEY_c100f=config # Window with gear icon
KEYBOARD_KEY_c102c=fn # Fn key
KEYBOARD_KEY_c1038=prog1 # Smartkey A → XF86Launch1
KEYBOARD_KEY_c1039=prog2 # Smartkey B → XF86Launch2
KEYBOARD_KEY_c103a=prog3 # Smartkey C → XF86Launch3
KEYBOARD_KEY_c103b=prog4 # Smartkey D → XF86Launch4
# Logitech K811
evdev:input:b0005v046DpB317*
@ -1125,22 +1143,22 @@ evdev:input:b0003v046DpC52D*
# Internet Navigator
evdev:input:b0003v046DpC309*
KEYBOARD_KEY_90001=chat # Messenger/SMS
KEYBOARD_KEY_90002=camera # webcam
KEYBOARD_KEY_90003=prog1 # iTouch
KEYBOARD_KEY_90004=shop # Shopping
KEYBOARD_KEY_c0201=new # New (F1)
KEYBOARD_KEY_c0289=reply # Reply mail (F2)
KEYBOARD_KEY_c028b=forwardmail # Forward mail (F3)
KEYBOARD_KEY_c028c=send # Send (F4)
KEYBOARD_KEY_c021a=undo # Undo (F5)
KEYBOARD_KEY_c0279=redo # Redo (F6)
KEYBOARD_KEY_c0208=print # Print (F7)
KEYBOARD_KEY_c0207=save # Save (F8)
KEYBOARD_KEY_c0194=file # My Computer (F9)
KEYBOARD_KEY_c01a7=documents # My Documents (F10)
KEYBOARD_KEY_c01b6=images # My Pictures (F11)
KEYBOARD_KEY_c01b7=audio # My Music (F12)
KEYBOARD_KEY_90001=chat # Messenger/SMS
KEYBOARD_KEY_90002=camera # webcam
KEYBOARD_KEY_90003=prog1 # iTouch
KEYBOARD_KEY_90004=shop # Shopping
KEYBOARD_KEY_c0201=new # New (F1)
KEYBOARD_KEY_c0289=reply # Reply mail (F2)
KEYBOARD_KEY_c028b=forwardmail # Forward mail (F3)
KEYBOARD_KEY_c028c=send # Send (F4)
KEYBOARD_KEY_c021a=undo # Undo (F5)
KEYBOARD_KEY_c0279=redo # Redo (F6)
KEYBOARD_KEY_c0208=print # Print (F7)
KEYBOARD_KEY_c0207=save # Save (F8)
KEYBOARD_KEY_c0194=file # My Computer (F9)
KEYBOARD_KEY_c01a7=documents # My Documents (F10)
KEYBOARD_KEY_c01b6=images # My Pictures (F11)
KEYBOARD_KEY_c01b7=audio # My Music (F12)
###########################################################
@ -1382,25 +1400,25 @@ evdev:input:b0003v05A4p9735*
KEYBOARD_KEY_c000c=stop
KEYBOARD_KEY_c0018=refresh
KEYBOARD_KEY_c00b9=search
KEYBOARD_KEY_c0006=bookmarks # Button labeled "Favorites"
KEYBOARD_KEY_c00a8=homepage # Button labeled "Web/Home"
KEYBOARD_KEY_c0006=bookmarks # Button labeled "Favorites"
KEYBOARD_KEY_c00a8=homepage # Button labeled "Web/Home"
KEYBOARD_KEY_c0010=mute
KEYBOARD_KEY_c0011=volumedown
KEYBOARD_KEY_c0014=volumeup
KEYBOARD_KEY_c000e=close
KEYBOARD_KEY_c00a7=print
KEYBOARD_KEY_c0013=documents # Button labeled "Stickies"
KEYBOARD_KEY_c000d=find # Button labeled "Sherlock2"
KEYBOARD_KEY_c0013=documents # Button labeled "Stickies"
KEYBOARD_KEY_c000d=find # Button labeled "Sherlock2"
KEYBOARD_KEY_c000f=mail
KEYBOARD_KEY_c000a=calc
KEYBOARD_KEY_c000b=sleep
KEYBOARD_KEY_c0007=previoussong # Button with standard |<< icon
KEYBOARD_KEY_c0008=playpause # Button with standad >/|| icon
KEYBOARD_KEY_c0009=nextsong # Button with standard >>| icon
KEYBOARD_KEY_c00b2=stopcd # Button with standard square box icon
KEYBOARD_KEY_c0016=prog1 # Key labeled "pf1"
KEYBOARD_KEY_c00bb=prog2 # Key labeled "pf2"
KEYBOARD_KEY_c00b8=prog3 # Key labeled "pf3"
KEYBOARD_KEY_c0007=previoussong # Button with standard |<< icon
KEYBOARD_KEY_c0008=playpause # Button with standad >/|| icon
KEYBOARD_KEY_c0009=nextsong # Button with standard >>| icon
KEYBOARD_KEY_c00b2=stopcd # Button with standard square box icon
KEYBOARD_KEY_c0016=prog1 # Key labeled "pf1"
KEYBOARD_KEY_c00bb=prog2 # Key labeled "pf2"
KEYBOARD_KEY_c00b8=prog3 # Key labeled "pf3"
###########################################################
# Pine64
@ -1418,7 +1436,7 @@ evdev:input:b0003v258Ap001E*
# Plantronics .Audio 626 DSP
evdev:input:b0003v047FpC006*
KEYBOARD_KEY_b002f=f20 # Microphone mute button; should be micmute
KEYBOARD_KEY_b002f=f20 # Microphone mute button; should be micmute
###########################################################
# Purism

View File

@ -67,11 +67,24 @@
# or 'display'. The default, when unset, is equivalent to:
# 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
#########################################
# 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:*
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
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
sensor:modalias:acpi:BMA250E*:dmi:bvnLENOVO:*:pvrLenovoMIIX3-1030:*
@ -530,10 +546,12 @@ sensor:modalias:acpi:KIOX010A*:dmi:*:svnMEDION:pnE*:*
# Medion Akoya E3222 MD62450
sensor:modalias:acpi:KIOX010A*:dmi:*:svnMEDION:pnMEDION*:*
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
ACCEL_LOCATION=display
# Medion Akoya E2221T MD60691
sensor:modalias:acpi:KIOX020A*:dmi:*:pnE2221TMD60691*:*
ACCEL_MOUNT_MATRIX=1, 0, 0; 0, 1, 0; 0, 0, 1
# Same as above, but for base sensor
sensor:modalias:acpi:KIOX020A*:dmi:*:svnMEDION:pnE*:*
sensor:modalias:acpi:KIOX020A*:dmi:*:svnMEDION:pnMEDION*:*
ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, -1
ACCEL_LOCATION=base
#########################################
@ -760,6 +778,16 @@ sensor:modalias:acpi:KIOX000A*:dmi:*:svnUMAX:pnVisionBook10WiPro:*
sensor:modalias:acpi:SMO8500*:dmi:*:svnUMAX:pnVisionBook10WiPlus:*
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
#########################################

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
#
# Version: 2020.10.25
# Date: 2020-10-25 03:15:01
# Version: 2020.11.14
# Date: 2020-11-14 03:15:02
#
# Maintained by Albert Pool, Martin Mares, and other volunteers from
# the PCI ID Project at https://pci-ids.ucw.cz/.
@ -70,6 +70,8 @@
018a LevelOne
0106 FPC-0106TX misprogrammed [RTL81xx]
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 Compaq Computer Corporation
8139 HNE-300 (RealTek RTL8139c) [iPaq Networking]
@ -2728,6 +2730,7 @@
17aa 3643 Radeon R9 A375
17aa 3801 Radeon R9 M275
17aa 3824 Radeon R9 M375
1da2 e26a Radeon R7 250
6821 Venus XT [Radeon HD 8870M / R9 M270X/M370X]
1002 031e FirePro SX4000
1028 05cc FirePro M5100
@ -3413,6 +3416,7 @@
148c 9380 Radeon R9 380
# Make naming scheme consistent
174b e308 Radeon R9 380 Nitro 4G D5
174b e315 Radeon R9 285
693b Tonga PRO GL [FirePro W7100 / Barco MXRT-7600]
694c Polaris 22 XT [Radeon RX Vega M GH]
694e Polaris 22 XL [Radeon RX Vega M GL]
@ -3586,9 +3590,10 @@
7347 Navi 14 [Radeon Pro W5500M]
734f Navi 14 [Radeon Pro W5300M]
7360 Navi 12 [Radeon Pro 5600M]
73bf Navi 21 [Radeon RX 6900 Series]
73c3 Navi 23
73bf Navi 21 [Radeon RX 6800/6800 XT / 6900 XT]
73c3 Navi 22
73df Navi 22
73ff Navi 23
7833 RS350 Host Bridge
7834 RS350 [Radeon 9100 PRO/XT IGP]
7835 RS350M [Mobility Radeon 9000 IGP]
@ -9469,7 +9474,7 @@
1682 211c GeForce 6600 256MB DDR DUAL DVI TV
00f3 NV43 [GeForce 6200]
00f4 NV43 [GeForce 6600 LE]
00f5 G71 [GeForce 7800 GS AGP]
00f5 G70/G71 [GeForce 7800 GS AGP]
00f6 NV43 [GeForce 6800 GS/XT]
1682 217e XFX GeForce 6800 XTreme 256MB DDR3 AGP
00f8 NV45GL [Quadro FX 3400/4400]
@ -11705,6 +11710,7 @@
128a GK208B
128b GK208B [GeForce GT 710]
1043 85f7 GT710-SL-1GD5
1043 8770 GT710-4H-SL-2GD5
128c GK208B
1290 GK208M [GeForce GT 730M]
103c 2afa GeForce GT 730A
@ -12097,7 +12103,7 @@
21c4 TU116 [GeForce GTX 1660 SUPER]
21d1 TU116BM [GeForce GTX 1660 Ti Mobile]
2204 GA102 [GeForce RTX 3090]
2206 GA102 [GeForce RTX 3080 10GB / 20GB]
2206 GA102 [GeForce RTX 3080]
10de 146d GA102 [GeForce RTX 3080 20GB]
1462 3892 RTX 3080 10GB GAMING X TRIO
222b GA102 [GeForce RTX 3090 Engineering Sample]
@ -12105,17 +12111,18 @@
2230 GA102GL [RTX A6000]
223f GA102GL
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 14ae GA104 [GeForce RTX 3070 16GB]
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]
24ac GA104 [GeForce RTX 30x0 Engineering Sample]
24ad GA104 [GeForce RTX 3060 Engineering Sample]
24af 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]
25af GA107 [GeForce RTX 3050 Engineering Sample]
10df Emulex Corporation
@ -12349,6 +12356,7 @@
5288 RTS5288 PCI Express Card Reader
5289 RTL8411 PCI Express Card Reader
1043 1457 K55A Laptop
5762 RTS5763DL NVMe SSD Controller
8029 RTL-8029(AS)
10b8 2011 EZ-Card (SMC1208)
10ec 8029 RTL-8029(AS)
@ -19546,6 +19554,7 @@
0070 6902 WinTV HVR-4000-HD
0070 7801 WinTV HVR-1800 MCE
0070 9001 Nova-T DVB-T
0070 9002 Nova-T DVB-T Model 909
0070 9200 Nova-SE2 DVB-S
0070 9202 Nova-S-Plus DVB-S
0070 9402 WinTV-HVR1100 DVB-T/Hybrid
@ -20255,9 +20264,12 @@
5001 WD Black NVMe SSD
5002 WD Black 2018 / PC SN720 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
5009 WD Blue SN550 NVMe SSD
15b7 5009 WD Blue SN550 NVMe SSD
500d WD Ultrastar DC SN340 NVMe SSD
15b8 ADDI-DATA GmbH
1001 APCI1516 SP controller (16 digi outputs)
1003 APCI1032 SP controller (32 digi inputs w/ opto coupler)
@ -21743,6 +21755,8 @@
0185 NT40A01 Network Adapter
01a5 NT200A01 Network Adapter
01c5 NT200A02 Network Adapter
01d5 NT50B01 Network Adapter
01e5 NT100A01 Network Adapter
18f6 NextIO
1000 [Nexsis] Switch Virtual P2P PCIe Bridge
1001 [Texsis] Switch Virtual P2P PCIe Bridge
@ -22137,6 +22151,7 @@
0250 JMC250 PCI Express Gigabit Ethernet Controller
0260 JMC260 PCI Express Fast Ethernet Controller
0368 JMB368 IDE controller
0585 JMB58x AHCI SATA controller
2360 JMB360 AHCI Controller
2361 JMB361 AHCI/IDE
1462 7235 P965 Neo MS-7235 mainboard
@ -22281,7 +22296,7 @@
19e5 d303 Hi1822 SP522 (2*8G FC)
19e5 d306 Hi1822 SP523 (2*8G FC)
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)
19e5 d129 Hi1822 SP570 (4*25GE)
19e5 d136 Hi1822 SP580 (4*25GE)
@ -22382,13 +22397,16 @@
1a4a SLAC National Accelerator Lab TID-AIR
1000 MCOR Power Supply Controller
1010 AMC EVR - Stockholm Timing Board
1020 Cluster On Board (COB) Ethernet Switch
1030 PGPCard - Gen3 GIGe Interface
2000 PGPCard - 4 Lane
2001 PGPCard - 8 Lane Plus EVR
2010 PCI-Express EVR
# PC-260-101-03
2020 PGP-GEN3 PCIe
2011 PCI-Express EVR - TPR Version
2020 PGP-GEN3 PCIe - 8 Lane Plus EVR
2030 AXI Stream DAQ PCIe card
2040 EXO PCIe TEM
3000 COB DTM V1
3001 COB DTM V2
1a51 Hectronic AB
1a55 Rohde & Schwarz DVS GmbH
0010 SDStationOEM
@ -22595,10 +22613,12 @@
1b13 Jaton Corp
1b1a K&F Computing Research Co.
0e70 GRAPE
1b1c Corsair
1b21 ASMedia Technology Inc.
0611 ASM1061 SATA IDE Controller
0612 ASM1062 Serial ATA Controller
1849 0612 Motherboard
1040 ASM1040 XHCI Controller
1042 ASM1042 SuperSpeed USB Host Controller
1043 1059 K53SM motherboard
1043 8488 P8B WS Motherboard
@ -22678,6 +22698,8 @@
1b4b Marvell Technology Group Ltd.
0640 88SE9128 SATA III 6Gb/s RAID 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 0307 ThinkSystem 7mm NVMe 2-Bay Rear RAID Enablement Kit
9120 88SE9120 SATA 6Gb/s Controller
@ -22747,6 +22769,16 @@
1b94 Signatec / Dynamic Signals Corp
e400 PX14400 Dual Xilinx Virtex5 based Digitizer
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.
1baa QNAP Systems, Inc.
1bad ReFLEX CES
@ -22985,6 +23017,7 @@
0305 Simulyzer-RT CompactPCI Serial CAN-1 card
# supports 8x CAN (-FD) interfaces
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.
0010 Pro Capture Endpoint
0014 PRO CAPTURE AIO 4K PLUS
@ -23159,6 +23192,8 @@
1d78 3105 D5457 U.2 3.2TB NVMe SSD
1d78 3107 D5457 U.2 6.4TB NVMe SSD
1d7c Aerotech, Inc.
# Fiber-optic HyperWire motion control bus from Aerotech.
0001 HyperWire Adapter
1d82 NETINT Technologies Inc.
0101 Codensity D400 SSD
0102 Codensity D408 PCIe Gen4 NVMe SSD
@ -23207,6 +23242,7 @@
0011 IO Bridge
1da1 Teko Telecom S.r.l.
1da2 Sapphire Technology Limited
e26a Radeon R7 250
1da3 Habana Labs Ltd.
0001 HL-1000 AI Inference Accelerator [Goya]
# PCIe accelerator card for Deep Learning training tasks
@ -23344,6 +23380,8 @@
1028 210f Dell Ent NVMe FIPS CM6 MU 3.2TB
1028 2110 Dell Ent NVMe FIPS CM6 MU 6.4TB
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
1e24 Squirrels Research Labs
0101 Acorn CLE-101
@ -23359,9 +23397,38 @@
1e26 Fujitsu Client Computing Limited
1e36 Shanghai Enflame Technology Co. Ltd
0001 T10 [CloudBlazer]
0002 T11 [CloudBlazer]
0003 T10s [CloudBlazer]
8011 I10 [CloudBlazer]
# nee Thinci, Inc
1e38 Blaize, Inc
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
1e49 Yangtze Memory Technologies Co.,Ltd
1e4b MAXIO Technology (Hangzhou) Ltd.
@ -23389,6 +23456,7 @@
# aka SED Systems
1e94 Calian SED
1e95 Solid State Storage Technology Corporation
1eab Hefei DATANG Storage Technology Co.,LTD.
1eae XFX Limited
1eb1 VeriSilicon Inc
1001 Video Accelerator
@ -23473,7 +23541,7 @@
2348 Racore
2010 8142 100VG/AnyLAN
2646 Kingston Technology Company, Inc.
2263 A2000, M.2, 500GB
2263 A2000 NVMe SSD
270b Xantel Corporation
270f Chaintech Computer Co. Ltd
2711 AVID Technology Inc.
@ -24895,6 +24963,8 @@
1028 1fe7 Express Flash NVMe 3.2TB 2.5" U.2 (P4600)
1028 1fe8 Express Flash NVMe 2.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]
1028 2060 NVMe SED MU U.2 1.6TB (P5600)
1028 2061 NVMe SED MU U.2 3.2TB (P5600)
@ -25933,6 +26003,10 @@
123f 82466GX Integrated Hot-Plug Controller (IHPC)
1240 82752 (752) AGP Graphics Accelerator
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]
1360 82806AA PCI64 Hub PCI Bridge
1361 82806AA PCI64 Hub Controller (HRes)
@ -25984,6 +26058,7 @@
151b CVL2510 Thunderbolt Controller [Light Peak 2C 2010]
151c 82599 10 Gigabit TN Network Connection
108e 7b13 Dual 10GBASE-T LP
151d Ethernet Connection E823-L for QSFP
1520 I350 Ethernet Controller Virtual Function
1521 I350 Gigabit Network Connection
1028 0602 Gigabit 2P I350-t LOM
@ -27055,6 +27130,7 @@
1f26 Atom processor C2000 RAID SATA2 Controller
1f27 Atom processor C2000 RAID SATA2 Controller
1f2c Atom processor C2000 USB Enhanced Host Controller
0200 1028 Atom C2338 on Dell 0K8Y0N motherboard
1f2e Atom processor C2000 RAID SATA2 Controller
1f2f Atom processor C2000 RAID SATA2 Controller
1f30 Atom processor C2000 2-Port IDE SATA3 Controller
@ -27897,6 +27973,9 @@
250f 82820 820 (Camino) Chipset AGP Bridge
2520 82805AA MTH Memory Translator Hub
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
2530 82850 850 (Tehama) Chipset Host Bridge (MCH)
1028 00c7 Dimension 8100
@ -31462,14 +31541,21 @@
9a0b Volume Management Device NVMe RAID Controller
9a13 Tiger Lake-LP Thunderbolt USB Controller
9a14 11th Gen Core Processor Host Bridge/DRAM Registers
9a17 Tiger Lake-H Thunderbolt USB Controller
9a1b Tiger Lake-LP Thunderbolt NHI #0
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
9a25 Tiger Lake-LP Thunderbolt PCI Express Root Port #1
9a27 Tiger Lake-LP Thunderbolt PCI Express Root Port #2
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
9a49 UHD Graphics
9a49 Iris Xe Graphics
9b41 UHD Graphics
9b44 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
06 IOMMU
80 System peripheral
99 Timing Card
# PTP Grandmaster Source Clock
01 TAP Timing Card
C 09 Input device controller
00 Keyboard controller
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
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.
When an empty string ("") is specified as an ID, then the corresponding EFI variable will be unset.
</para></listitem>
</varlistentry>

View File

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

View File

@ -198,6 +198,26 @@
<entry>Verity data for the ia64 root file system partition</entry>
</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>
<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>
@ -267,6 +287,28 @@
<entry><constant>usr-ia64-verity</constant></entry>
<entry>Verity data for the ia64 <filename>/usr/</filename> file system partition</entry>
</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>
</tgroup>
</table>

View File

@ -199,7 +199,7 @@
domains (TLDs) that are not known by the DNS root server. This
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>
</varlistentry>
@ -233,13 +233,11 @@
resolver is not capable of authenticating the server, so it is
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>
also maintains per-link DNSOverTLS settings. For system DNS
servers (see above), only the global DNSOverTLS setting is in
effect. For per-link DNS servers the per-link
setting is in effect, unless it is unset in which case the
global setting is used instead.</para>
also maintains per-link <varname>DNSOverTLS=</varname> settings. For system DNS servers (see above), only the global
<varname>DNSOverTLS=</varname> setting is in effect. For per-link DNS servers the per-link setting is in effect, unless
it is unset in which case the global setting is used instead.</para>
<para>Defaults to off.</para>
</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 are called. If the final callback
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
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
that if producing a reply takes too long, the method call will time out at the caller.</para>
a callback to perform any number of asynchronous operations required to construct a reply.
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
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
combination of flags, see below.</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.
<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.</para>
</listitem>
</varlistentry>
@ -404,7 +406,7 @@
<varlistentry>
<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
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

View File

@ -89,6 +89,12 @@
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>
<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
<citerefentry><refentrytitle>sd_bus_get_method_call_timeout</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
</para>

View File

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

View File

@ -44,6 +44,7 @@
<funcprototype>
<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>const char **<parameter>contents</parameter></paramdef>
</funcprototype>

View File

@ -188,9 +188,9 @@
<title>Return Value</title>
<para>
On success, <function>sd_bus_message_read_basic()</function> returns 0 or
a positive integer. On failure, it returns a negative errno-style error
code.
On success, <function>sd_bus_message_read_basic()</function> returns a positive integer.
If the end of the currently opened array has been reached, it returns 0.
On failure, it returns a negative errno-style error code.
</para>
<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
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_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

View File

@ -73,8 +73,8 @@
<refsect1>
<title>Configuration</title>
<para>For programs started by <command>systemd</command> process resource limits can be set by directive
<varname>LimitCore=</varname>, see
<para>For programs started by <command>systemd</command>, process resource limits can be set by directive
<varname>LimitCORE=</varname>, see
<citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
</para>
@ -94,10 +94,10 @@
<citerefentry><refentrytitle>systemd-sysctl</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
</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
<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>.
</para>

View File

@ -109,6 +109,18 @@
<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>
</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>
<entry>933ac7e1-2eb4-4f13-b844-0e14e2aef915</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
<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
of slice units. Defaults to 15%, which equals 4915 with the kernel's defaults on the host, but might be smaller
in OS containers.</para></listitem>
of slice units. Defaults to 15% of the sysctl setting <varname>kernel.pid_max=</varname> or root cgroup <varname>pids.max</varname>.
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>

View File

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

View File

@ -84,7 +84,7 @@
</row></thead>
<tbody>
<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>
<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>
<term><varname>Id=</varname></term>
<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>
</varlistentry>
<varlistentry>
@ -766,7 +767,7 @@
<varlistentry>
<term><varname>TOS=</varname></term>
<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>
</varlistentry>
<varlistentry>
@ -818,8 +819,9 @@
<varlistentry>
<term><varname>Independent=</varname></term>
<listitem>
<para>Takes a boolean. When true, the vxlan interface is created without underlying interfaces.
Defaults to <literal>false</literal>.</para>
<para>Takes a boolean. When true, the vxlan interface is created without any underlying network
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>
</varlistentry>
</variablelist>
@ -1276,9 +1278,10 @@
<varlistentry>
<term><varname>Independent=</varname></term>
<listitem>
<para>Takes a boolean. When true tunnel does not require .network file. Created as "tunnel@NONE".
Defaults to <literal>false</literal>.
</para>
<para>Takes a boolean. When false (the default), the tunnel is always created over some network
device, and a .network file that requests this tunnel using <varname>Tunnel=</varname> is required
for the tunnel to be created. When true, the tunnel is created independently of any network as
"tunnel@NONE".</para>
</listitem>
</varlistentry>
<varlistentry>
@ -1770,8 +1773,8 @@
<varlistentry>
<term><varname>AdActorSystem=</varname></term>
<listitem>
<para>Specifies the 802.3ad system mac address. This can not be either
<constant>NULL</constant> or <constant>Multicast</constant>.</para>
<para>Specifies the 802.3ad system MAC address. This cannot be a null or multicast address.
</para>
</listitem>
</varlistentry>
@ -1948,10 +1951,8 @@
<varlistentry>
<term><varname>Independent=</varname></term>
<listitem>
<para>Takes a boolean. If set to <literal>no</literal>, the xfrm interface should have an
underlying device which can be used for hardware offloading. Defaults to <literal>no</literal>.
See <citerefentry><refentrytitle>systemd.network</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for how to configure the underlying device.</para>
<para>Takes a boolean. If false (the default), the xfrm interface must have an underlying device
which can be used for hardware offloading.</para>
</listitem>
</varlistentry>
</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
assigned, and the prefixes will be announced through IPv6 Router Advertisement when
<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>
<term><varname>IPv6MTUBytes=</varname></term>
@ -1170,7 +1170,9 @@ IPv6Token=prefixstable:2002:da8:1::</programlisting></para>
<varlistentry>
<term><varname>FirewallMark=</varname></term>
<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>
</varlistentry>
<varlistentry>
@ -2086,9 +2088,11 @@ IPv6Token=prefixstable:2002:da8:1::</programlisting></para>
<varlistentry>
<term><varname>DHCPv6Client=</varname></term>
<listitem>
<para>Takes a boolean, or the special value <literal>always</literal>. When true (the default), the DHCPv6 client will be started when the
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
managed or other information flag in the RA.</para>
<para>Takes a boolean, or the special value <literal>always</literal>. When true or
<literal>always</literal>, the DHCPv6 client will be started when the RA has the managed or
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>
</varlistentry>
</variablelist>

View File

@ -1734,10 +1734,9 @@
</varlistentry>
</variablelist>
<para>The following specifiers are interpreted in the Install
section: %n, %N, %p, %i, %j, %g, %G, %U, %u, %m, %H, %b, %v. For their
meaning see the next section.
</para>
<para>The following specifiers are interpreted in the Install section:
%a, %b, %B, %g, %G, %H, %i, %j, %l, %m, %n, %N, %o, %p, %u, %U, %v, %w, %W, %%.
For their meaning see the next section.</para>
</refsect1>
<refsect1>
@ -1787,6 +1786,16 @@
<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>
</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>
<entry><literal>%h</literal></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>The hostname of the running system at the point in time the unit configuration is loaded.</entry>
</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>
<entry><literal>%i</literal></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>Same as <literal>%j</literal>, but with escaping undone.</entry>
</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>
<entry><literal>%L</literal></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>
</row>
<xi:include href="standard-specifiers.xml" xpointer="m"/>
<xi:include href="standard-specifiers.xml" xpointer="o"/>
<row>
<entry><literal>%n</literal></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>Same as <literal>%n</literal>, but with the type suffix removed.</entry>
</row>
<xi:include href="standard-specifiers.xml" xpointer="o"/>
<row>
<entry><literal>%p</literal></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>
</row>
<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>
<entry><literal>%u</literal></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>In <option>--user</option> mode, this is the same as <varname>$XDG_CACHE_HOME</varname>, and <filename>/var/cache</filename> otherwise.</entry>
</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>
<entry><literal>%h</literal></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>
</row>
<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>
<entry><literal>%u</literal></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
<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.
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>
</refsect2>

View File

@ -1074,6 +1074,7 @@ else
libcurl = []
endif
conf.set10('HAVE_LIBCURL', have)
conf.set10('CURL_NO_OLDIES', get_option('mode') == 'developer')
want_libidn = get_option('libidn')
want_libidn2 = get_option('libidn2')
@ -1419,7 +1420,7 @@ if have == 'auto'
else
have = have == 'true'
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
conf.set10('ENABLE_OOMD', have)
@ -1594,6 +1595,7 @@ generate_gperfs = find_program('tools/generate-gperfs.py')
subdir('po')
subdir('catalog')
subdir('src/libudev')
subdir('src/systemd')
subdir('src/basic')
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.
public_programs = []
subdir('src/libudev')
subdir('src/shared')
subdir('src/core')
subdir('src/shutdown')
@ -3438,7 +3439,7 @@ endif
fuzzer_exes = []
if get_option('tests') != 'false'
if fuzz_tests or fuzzer_build
foreach tuple : fuzzers
sources = tuple[0]
link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
@ -3560,7 +3561,7 @@ foreach tuple : sanitizers
if name != prev
if want_tests == 'false'
message('Not compiling @0@ because tests is set to false'.format(name))
elif slow_tests or fuzz_tests
elif fuzz_tests
exe = custom_target(
name,
output : name,
@ -3570,12 +3571,12 @@ foreach tuple : sanitizers
'@OUTPUT@'],
build_by_default : true)
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
prev = name
if want_tests != 'false' and (slow_tests or fuzz_tests)
if fuzz_tests
test('@0@:@1@:@2@'.format(b, c, sanitizer),
env,
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.
# Jeff Bai <jeffbai@aosc.xyz>, 2016.
# Charles Lee <lchopn@gmail.com>, 2020.
# Whired Planck <fungdaat31@outlook.com>, 2020.
msgid ""
msgstr ""
"Project-Id-Version: systemd\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-08-19 18:02+0200\n"
"PO-Revision-Date: 2020-09-24 04:29+0000\n"
"Last-Translator: Charles Lee <lchopn@gmail.com>\n"
"PO-Revision-Date: 2020-11-26 11:35+0000\n"
"Last-Translator: Whired Planck <fungdaat31@outlook.com>\n"
"Language-Team: Chinese (Simplified) <https://translate.fedoraproject.org/"
"projects/systemd/master/zh_CN/>\n"
"Language: zh_CN\n"
@ -20,7 +21,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\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
msgid "Send passphrase back to system"
@ -67,70 +68,56 @@ msgstr "重新载入 systemd 状态需要认证。"
#: src/home/org.freedesktop.home1.policy:13
msgid "Create a home area"
msgstr ""
msgstr "创建一个家区域"
#: 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."
msgstr "重新载入 systemd 状态需要认证。"
msgstr "创建用户家区域需要认证。"
#: src/home/org.freedesktop.home1.policy:23
msgid "Remove a home area"
msgstr ""
msgstr "移除一个家区域"
#: 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."
msgstr "重新载入 systemd 状态需要认证。"
msgstr "移除用户家区域需要认证。"
#: src/home/org.freedesktop.home1.policy:33
msgid "Check credentials of a home area"
msgstr ""
msgstr "检查家区域凭证"
#: src/home/org.freedesktop.home1.policy:34
#, fuzzy
#| msgid ""
#| "Authentication is required to manage active sessions, users and seats."
msgid ""
"Authentication is required to check credentials against a user's home area."
msgstr "管理活动会话、用户与会话座位需要认证。"
msgstr "根据用户家区域检查凭证需要认证。"
#: src/home/org.freedesktop.home1.policy:43
msgid "Update a home area"
msgstr ""
msgstr "更新一个家区域"
# Pay attention to the concept of "seat".
#
# To fully understand the meaning, please refer to session management in old ConsoleKit and new systemd-logind.
#: 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."
msgstr "允许将设备附加至某个会话座位需要认证。"
msgstr "更新用户家区域需要认证。"
#: src/home/org.freedesktop.home1.policy:53
msgid "Resize a home area"
msgstr ""
msgstr "调整家区域大小"
#: 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."
msgstr "设置 wall 消息需要认证。"
msgstr "调整家区域大小需要认证。"
#: src/home/org.freedesktop.home1.policy:63
msgid "Change password of a home area"
msgstr ""
msgstr "更改家区域的密码"
#: src/home/org.freedesktop.home1.policy:64
#, fuzzy
#| msgid ""
#| "Authentication is required to manage active sessions, users and seats."
msgid ""
"Authentication is required to change the password of a user's home area."
msgstr "管理活动会话、用户与会话座位需要认证。"
msgstr "更改家区域密码需要认证。"
#: src/hostname/org.freedesktop.hostname1.policy:20
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
#: src/hostname/org.freedesktop.hostname1.policy:31
#, fuzzy
msgid ""
"Authentication is required to set the statically configured local hostname, "
"as well as the pretty hostname."
msgstr "设静态本地主机名或美观主机名需要认证。"
msgstr "设静态本地主机名或美观主机名需要认证。"
#: src/hostname/org.freedesktop.hostname1.policy:41
msgid "Set machine information"
@ -164,13 +150,11 @@ msgstr "设置本地机器信息需要认证。"
#: src/hostname/org.freedesktop.hostname1.policy:51
msgid "Get product UUID"
msgstr ""
msgstr "获取产品 UUID"
#: src/hostname/org.freedesktop.hostname1.policy:52
#, fuzzy
#| msgid "Authentication is required to reload '$(unit)'."
msgid "Authentication is required to get product UUID."
msgstr "重新载入“$(unit)”需要认证。"
msgstr "获取产品 UUID 需要认证。"
#: src/import/org.freedesktop.import1.policy:22
msgid "Import a VM or container image"
@ -300,10 +284,8 @@ msgid "Allow non-logged-in user to run programs"
msgstr "允许未登录用户运行程序"
#: 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."
msgstr "允许未登录用户运行程序需要认证。"
msgstr "要以未登录用户运行程序,需要明确请求。"
#: src/login/org.freedesktop.login1.policy:127
msgid "Allow non-logged-in users to run programs"
@ -389,10 +371,8 @@ msgid ""
msgstr "在其它应用程序阻止重启时重启系统需要认证。"
#: src/login/org.freedesktop.login1.policy:224
#, fuzzy
#| msgid "Hibernate the system"
msgid "Halt the system"
msgstr "休眠系统"
msgstr "停止系统"
#: src/login/org.freedesktop.login1.policy:225
msgid "Authentication is required to halt the system."
@ -492,13 +472,11 @@ msgstr "对活动会话进行锁定或解锁需要认证。"
#: src/login/org.freedesktop.login1.policy:341
msgid "Set the reboot \"reason\" in the kernel"
msgstr ""
msgstr "在内核中设定重启“原因”"
#: 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."
msgstr "设置系统时区需要认证。"
msgstr "在内核中设定重启“原因”需要认证。"
#: src/login/org.freedesktop.login1.policy:352
msgid "Indicate to the firmware to boot to setup interface"
@ -512,31 +490,23 @@ msgstr "向固件发出启动时进入设置界面的指令需要认证。"
#: src/login/org.freedesktop.login1.policy:363
msgid "Indicate to the boot loader to boot to the boot loader menu"
msgstr ""
msgstr "指示引导加载程序启动至引导加载程序菜单"
#: src/login/org.freedesktop.login1.policy:364
#, fuzzy
#| msgid ""
#| "Authentication is required to indicate to the firmware to boot to setup "
#| "interface."
msgid ""
"Authentication is required to indicate to the boot loader to boot to the "
"boot loader menu."
msgstr "向固件发出启动时进入设置界面的指令需要认证。"
msgstr "指示引导加载程序启动至引导加载程序菜单需要认证。"
#: src/login/org.freedesktop.login1.policy:374
msgid "Indicate to the boot loader to boot a specific entry"
msgstr ""
msgstr "指示引导加载程序启动指定条目"
#: src/login/org.freedesktop.login1.policy:375
#, fuzzy
#| msgid ""
#| "Authentication is required to indicate to the firmware to boot to setup "
#| "interface."
msgid ""
"Authentication is required to indicate to the boot loader to boot into a "
"specific boot loader entry."
msgstr "向固件发出启动时进入设置界面的指令需要认证。"
msgstr "指示引导加载程序启动入指定引导加载条目需要认证。"
#: src/login/org.freedesktop.login1.policy:385
msgid "Set a wall message"
@ -548,13 +518,11 @@ msgstr "设置 wall 消息需要认证。"
#: src/login/org.freedesktop.login1.policy:395
msgid "Change Session"
msgstr ""
msgstr "更改会话"
#: 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."
msgstr "设置本地主机名需要认证。"
msgstr "更改虚拟终端需要认证。"
#: src/machine/org.freedesktop.machine1.policy:22
msgid "Log into a local container"
@ -629,10 +597,8 @@ msgid "Set NTP servers"
msgstr "设置 NTP 服务器"
#: 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."
msgstr "设置系统时间需要认证。"
msgstr "设定 NTP 服务器需要认证。"
#: src/network/org.freedesktop.network1.policy:33
#: src/resolve/org.freedesktop.resolve1.policy:44
@ -641,10 +607,8 @@ msgstr "设置 DNS 服务器"
#: src/network/org.freedesktop.network1.policy:34
#: 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."
msgstr "设置系统时间需要认证。"
msgstr "设定 DNS 服务器需要认证。"
#: src/network/org.freedesktop.network1.policy:44
#: src/resolve/org.freedesktop.resolve1.policy:55
@ -653,10 +617,8 @@ msgstr "设置域名"
#: src/network/org.freedesktop.network1.policy:45
#: src/resolve/org.freedesktop.resolve1.policy:56
#, fuzzy
#| msgid "Authentication is required to stop '$(unit)'."
msgid "Authentication is required to set domains."
msgstr "停止“$(unit)”需要认证。"
msgstr "设定域需要认证。"
#: src/network/org.freedesktop.network1.policy:55
#: src/resolve/org.freedesktop.resolve1.policy:66
@ -665,51 +627,43 @@ msgstr "设置默认路由"
#: src/network/org.freedesktop.network1.policy:56
#: 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."
msgstr "设置本地主机名需要认证。"
msgstr "设定默认路由需要认证。"
#: src/network/org.freedesktop.network1.policy:66
#: src/resolve/org.freedesktop.resolve1.policy:77
msgid "Enable/disable LLMNR"
msgstr ""
msgstr "启用/禁用 LLMNR"
#: src/network/org.freedesktop.network1.policy:67
#: 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."
msgstr "休眠系统需要认证。"
msgstr "启用或禁用 LLMNR 需要认证。"
#: src/network/org.freedesktop.network1.policy:77
#: src/resolve/org.freedesktop.resolve1.policy:88
msgid "Enable/disable multicast DNS"
msgstr ""
msgstr "启用/禁用多播 DNS"
#: src/network/org.freedesktop.network1.policy:78
#: 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."
msgstr "登入本地主机需要认证。"
msgstr "启用或禁用多播 DNS 需要认证。"
#: src/network/org.freedesktop.network1.policy:88
#: src/resolve/org.freedesktop.resolve1.policy:99
msgid "Enable/disable DNS over TLS"
msgstr ""
msgstr "启用/禁用 DNS over TLS"
#: src/network/org.freedesktop.network1.policy:89
#: 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."
msgstr "设置本地主机名需要认证。"
msgstr "启用或禁用 DNS over TLS 需要认证。"
#: src/network/org.freedesktop.network1.policy:99
#: src/resolve/org.freedesktop.resolve1.policy:110
msgid "Enable/disable DNSSEC"
msgstr ""
msgstr "启用/禁用 DNSSEC"
#: src/network/org.freedesktop.network1.policy:100
#: 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.
for keyserver in "" "keys.gnupg.net" "keys.openpgp.org" "keyserver.ubuntu.com"; 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))
done
done
@ -86,7 +86,7 @@ EOF
# disable autopkgtests which are not for upstream
sed -i '/# NOUPSTREAM/ q' debian/tests/control
# 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
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)
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;
return 0;
}
@ -348,6 +349,7 @@ static int read_brightness(sd_device *device, unsigned max_brightness, unsigned
goto use_brightness;
}
log_device_debug(device, "Current actual_brightness is %u", brightness);
*ret_brightness = brightness;
return 0;
}
@ -366,6 +368,7 @@ use_brightness:
"brightness=%u is larger than max_brightness=%u",
brightness, max_brightness);
log_device_debug(device, "Current brightness is %u", brightness);
*ret_brightness = brightness;
return 0;
}
@ -456,10 +459,11 @@ static int run(int argc, char *argv[]) {
if (r > 0) {
r = safe_atou(value, &brightness);
if (r < 0) {
log_error_errno(r, "Failed to parse saved brightness '%s', removing %s.",
value, saved);
log_warning_errno(r, "Failed to parse saved brightness '%s', removing %s.",
value, saved);
(void) unlink(saved);
} else {
log_debug("Using saved brightness %u.", brightness);
if (clamp)
(void) clamp_brightness(device, true, max_brightness, &brightness);

View File

@ -50,6 +50,9 @@ int capability_from_name(const char *name) {
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) {
return (int) ELEMENTSOF(capability_names);
}

View File

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

View File

@ -1103,7 +1103,7 @@ int copy_file_atomic_full(
assert(from);
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
* 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

View File

@ -16,7 +16,7 @@
/* 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
* output is ever used in interactive mode. */
#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
* 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
* 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;
if (!GREEDY_REALLOC(iovw->iovec, iovw->size_bytes, iovw->count + 1))
return log_oom();
return -ENOMEM;
iovw->iovec[iovw->count++] = IOVEC_MAKE(data, len);
return 0;
@ -303,7 +303,7 @@ int iovw_put_string_field(struct iovec_wrapper *iovw, const char *field, const c
x = strjoin(field, value);
if (!x)
return log_oom();
return -ENOMEM;
r = iovw_put(iovw, x, strlen(x));
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) {
struct msghdr mh = {
mh.msg_iov = (struct iovec*) iovec,
mh.msg_iovlen = n,
.msg_iov = (struct iovec*) iovec,
.msg_iovlen = n,
};
ssize_t k;

View File

@ -16,9 +16,23 @@
#endif
#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
#define systemd_SC_arch_bias(x) (x)
# define systemd_SC_arch_bias(x) (x)
#endif
#include "missing_keyctl.h"
@ -51,13 +65,11 @@ static inline int missing_pivot_root(const char *new_root, const char *put_old)
# define systemd_NR_memfd_create 350
#elif defined _MIPS_SIM
# if _MIPS_SIM == _MIPS_SIM_ABI32
# define systemd_NR_memfd_create 4354
# endif
# if _MIPS_SIM == _MIPS_SIM_NABI32
# define systemd_NR_memfd_create 6318
# endif
# if _MIPS_SIM == _MIPS_SIM_ABI64
# define systemd_NR_memfd_create 5314
# define systemd_NR_memfd_create systemd_SC_arch_bias(354)
# elif _MIPS_SIM == _MIPS_SIM_NABI32
# define systemd_NR_memfd_create systemd_SC_arch_bias(318)
# elif _MIPS_SIM == _MIPS_SIM_ABI64
# define systemd_NR_memfd_create systemd_SC_arch_bias(314)
# endif
#elif defined __i386__
# 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__)
# define systemd_NR_getrandom 278
#elif defined(__ia64__)
# define systemd_NR_getrandom 1339
# define systemd_NR_getrandom systemd_SC_arch_bias(318)
#elif defined(__m68k__)
# define systemd_NR_getrandom 352
#elif defined(__s390x__)
@ -114,13 +126,11 @@ static inline int missing_memfd_create(const char *name, unsigned int flags) {
# define systemd_NR_getrandom 359
#elif defined _MIPS_SIM
# if _MIPS_SIM == _MIPS_SIM_ABI32
# define systemd_NR_getrandom 4353
# endif
# if _MIPS_SIM == _MIPS_SIM_NABI32
# define systemd_NR_getrandom 6317
# endif
# if _MIPS_SIM == _MIPS_SIM_ABI64
# define systemd_NR_getrandom 5313
# define systemd_NR_getrandom systemd_SC_arch_bias(353)
# elif _MIPS_SIM == _MIPS_SIM_NABI32
# define systemd_NR_getrandom systemd_SC_arch_bias(317)
# elif _MIPS_SIM == _MIPS_SIM_ABI64
# define systemd_NR_getrandom systemd_SC_arch_bias(313)
# endif
#elif defined(__arc__)
# define systemd_NR_getrandom 278
@ -186,6 +196,14 @@ static inline pid_t missing_gettid(void) {
# define systemd_NR_name_to_handle_at 335
#elif defined(__arc__)
# 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
# warning "name_to_handle_at number is not defined"
#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
#elif defined(__arc__)
# 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
# warning "setns() syscall number unknown for your architecture"
#endif
@ -290,13 +316,11 @@ static inline pid_t raw_getpid(void) {
# define systemd_NR_renameat2 276
#elif defined _MIPS_SIM
# if _MIPS_SIM == _MIPS_SIM_ABI32
# define systemd_NR_renameat2 4351
# endif
# if _MIPS_SIM == _MIPS_SIM_NABI32
# define systemd_NR_renameat2 6315
# endif
# if _MIPS_SIM == _MIPS_SIM_ABI64
# define systemd_NR_renameat2 5311
# define systemd_NR_renameat2 systemd_SC_arch_bias(351)
# elif _MIPS_SIM == _MIPS_SIM_NABI32
# define systemd_NR_renameat2 systemd_SC_arch_bias(315)
# elif _MIPS_SIM == _MIPS_SIM_ABI64
# define systemd_NR_renameat2 systemd_SC_arch_bias(311)
# endif
#elif defined __i386__
# 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
#elif defined __arc__
# 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
# warning "copy_file_range() syscall number unknown for your architecture"
#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
#elif defined __tilegx__
# 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
# warning "bpf() syscall number unknown for your architecture"
#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
# elif defined _MIPS_SIM
# if _MIPS_SIM == _MIPS_SIM_ABI32
# define systemd_NR_pkey_mprotect 4363
# endif
# if _MIPS_SIM == _MIPS_SIM_NABI32
# define systemd_NR_pkey_mprotect 6327
# endif
# if _MIPS_SIM == _MIPS_SIM_ABI64
# define systemd_NR_pkey_mprotect 5323
# define systemd_NR_pkey_mprotect systemd_SC_arch_bias(363)
# elif _MIPS_SIM == _MIPS_SIM_NABI32
# define systemd_NR_pkey_mprotect systemd_SC_arch_bias(327)
# elif _MIPS_SIM == _MIPS_SIM_ABI64
# define systemd_NR_pkey_mprotect systemd_SC_arch_bias(323)
# endif
# else
# 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
#elif defined __x86_64__
# 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
# warning "statx() syscall number unknown for your architecture"
#endif
@ -634,23 +680,7 @@ static inline long missing_get_mempolicy(int *mode, unsigned long *nodemask,
/* ======================================================================= */
/* 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)
#endif
#define systemd_NR_pidfd_send_signal systemd_SC_arch_bias(424)
/* may be (invalid) negative number due to libseccomp, see PR 13319 */
#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
/* 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)
#endif
#define systemd_NR_pidfd_open systemd_SC_arch_bias(434)
/* may be (invalid) negative number due to libseccomp, see PR 13319 */
#if defined __NR_pidfd_open && __NR_pidfd_open >= 0

View File

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

View File

@ -1144,7 +1144,7 @@ static int mount_start(Unit *u) {
return -EAGAIN;
/* Already on it! */
if (m->state == MOUNT_MOUNTING)
if (IN_SET(m->state, MOUNT_MOUNTING, MOUNT_MOUNTING_DONE))
return 0;
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);
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:
break;
}

View File

@ -8,6 +8,7 @@
#include "dbus-unit.h"
#include "load-dropin.h"
#include "log.h"
#include "process-util.h"
#include "scope.h"
#include "serialize.h"
#include "special.h"
@ -235,8 +236,18 @@ static int scope_coldplug(Unit *u) {
if (r < 0)
return r;
if (!IN_SET(s->deserialized_state, SCOPE_DEAD, SCOPE_FAILED))
(void) unit_enqueue_rewatch_pids(u);
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);
}
bus_scope_track_controller(s);
@ -366,6 +377,10 @@ static int scope_start(Unit *u) {
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;
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) {
Scope *s = SCOPE(u);
void *pidp;
assert(s);
assert(f);
@ -438,6 +454,9 @@ static int scope_serialize(Unit *u, FILE *f, FDSet *fds) {
if (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;
}
@ -473,6 +492,20 @@ static int scope_deserialize_item(Unit *u, const char *key, const char *value, F
if (r < 0)
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
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
* safe for inclusion in unit names):
*
* %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)
* %n: the full id of the unit (foo-aaa@bar.waldo)
* %N: the id of the unit without the suffix (foo-aaa@bar)
* %p: the prefix (foo-aaa)
* %i: the instance (bar)
*
* %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
* %j: the last componet of the prefix (aaa)
*/
const Specifier table[] = {
{ 'i', specifier_string, u->instance },
{ 'j', specifier_last_component, NULL },
{ 'n', specifier_string, u->id },
{ 'N', specifier_prefix_and_instance, NULL },
{ 'p', specifier_prefix, NULL },
{ 'i', specifier_string, u->instance },
{ 'j', specifier_last_component, NULL },
{ 'g', specifier_group_name, NULL },
{ 'G', specifier_group_id, NULL },
{ 'U', specifier_user_id, NULL },
{ 'u', specifier_user_name, NULL },
COMMON_SYSTEM_SPECIFIERS,
{ 'm', specifier_machine_id, NULL },
{ '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 },
COMMON_CREDS_SPECIFIERS,
{}
};
@ -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: 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)
* %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)
* %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)
* %L: the log directory root (e.g. /var/log or $XDG_CONFIG_HOME/log)
* %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
* %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
* 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.
@ -260,40 +233,35 @@ int unit_full_printf(const Unit *u, const char *format, char **ret) {
assert(ret);
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_instance_unescaped, NULL },
{ 'j', specifier_last_component, 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 },
{ 'c', specifier_cgroup, NULL },
{ 'r', specifier_cgroup_slice, 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) },
{ 'L', specifier_special_directory, UINT_TO_PTR(EXEC_DIRECTORY_LOGS) },
{ 'E', specifier_special_directory, UINT_TO_PTR(EXEC_DIRECTORY_CONFIGURATION) },
{ 'T', specifier_tmp_dir, NULL },
{ 'V', specifier_var_tmp_dir, NULL },
{ 'L', specifier_special_directory, UINT_TO_PTR(EXEC_DIRECTORY_LOGS) },
{ '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 },
{ 's', specifier_user_shell, NULL },
{ 'm', specifier_machine_id, NULL },
{ 'H', specifier_host_name, NULL },
{ 'l', specifier_short_host_name, NULL },
{ 'b', specifier_boot_id, NULL },
{ 'v', specifier_kernel_release, NULL },
COMMON_SYSTEM_SPECIFIERS,
COMMON_CREDS_SPECIFIERS,
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 */
if (asprintf(&device, "/dev/mapper/%s", label) < 0)
device = strjoin("/dev/mapper/", label);
if (!device)
return NULL;
f = setmntent(fstab_path(), "re");
@ -447,10 +448,9 @@ static int get_password(
assert(strv_length(passwords2) == 1);
if (!streq(passwords[0], passwords2[0])) {
log_warning("Passwords did not match, retrying.");
return -EAGAIN;
}
if (!streq(passwords[0], passwords2[0]))
return log_warning_errno(SYNTHETIC_ERRNO(EAGAIN),
"Passwords did not match, retrying.");
}
strv_uniq(passwords);

View File

@ -625,6 +625,15 @@ static int acquire_home(
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);
if (r < 0) {
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;
}
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;
CurlGlue *g = userdata;
uint32_t events = 0;
@ -178,7 +178,7 @@ CurlGlue *curl_glue_unref(CurlGlue *g) {
int curl_glue_new(CurlGlue **glue, sd_event *event) {
_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;
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);
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);

View File

@ -2019,13 +2019,12 @@ static int verify(sd_journal *j) {
#endif
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. */
return k;
} else if (k < 0) {
log_warning_errno(k, "FAIL: %s (%m)", f->path);
r = k;
} else {
else if (k < 0)
r = log_warning_errno(k, "FAIL: %s (%m)", f->path);
else {
char a[FORMAT_TIMESTAMP_MAX], b[FORMAT_TIMESTAMP_MAX], c[FORMAT_TIMESPAN_MAX];
log_info("PASS: %s", f->path);
@ -2374,10 +2373,8 @@ int main(int argc, char *argv[]) {
int q;
q = journal_directory_vacuum(d->path, arg_vacuum_size, arg_vacuum_n_files, arg_vacuum_time, NULL, !arg_quiet);
if (q < 0) {
log_error_errno(q, "Failed to vacuum %s: %m", d->path);
r = q;
}
if (q < 0)
r = log_error_errno(q, "Failed to vacuum %s: %m", d->path);
}
goto finish;

View File

@ -20,7 +20,7 @@ MACHINE_ID=$KERNEL_INSTALL_MACHINE_ID
BOOT_ROOT=${ENTRY_DIR_ABS%/$MACHINE_ID/$KERNEL_VERSION}
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
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(addr, -EINVAL);
assert_return(addr_len > 0 && addr_len <= MAX_MAC_ADDR_LEN, -EINVAL);
assert_return(arp_type > 0, -EINVAL);
assert_return(addr_len <= MAX_MAC_ADDR_LEN, -EINVAL);
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);
else if (arp_type == ARPHRD_INFINIBAND)
assert_return(addr_len == INFINIBAND_ALEN, -EINVAL);
else
return -EINVAL;
else {
client->arp_type = ARPHRD_NONE;
client->mac_addr_len = 0;
return 0;
}
if (client->mac_addr_len == addr_len &&
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",
client->information_request? "Information request":
"Managed");
client->information_request ? "Information request" : "Managed");
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);
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) {
_cleanup_(sd_device_unrefp) sd_device *device = NULL;
@ -743,16 +744,12 @@ static int enumerator_scan_devices_all(sd_device_enumerator *enumerator) {
int k;
k = enumerator_scan_dir(enumerator, "bus", "devices", NULL);
if (k < 0) {
log_debug_errno(k, "sd-device-enumerator: Failed to scan /sys/bus: %m");
r = k;
}
if (k < 0)
r = log_debug_errno(k, "sd-device-enumerator: Failed to scan /sys/bus: %m");
k = enumerator_scan_dir(enumerator, "class", NULL, NULL);
if (k < 0) {
log_debug_errno(k, "sd-device-enumerator: Failed to scan /sys/class: %m");
r = k;
}
if (k < 0)
r = log_debug_errno(k, "sd-device-enumerator: Failed to scan /sys/class: %m");
}
return r;
@ -870,10 +867,8 @@ int device_enumerator_scan_subsystems(sd_device_enumerator *enumerator) {
/* modules */
if (match_subsystem(enumerator, "module")) {
k = enumerator_scan_dir_and_add_devices(enumerator, "module", NULL, NULL);
if (k < 0) {
log_debug_errno(k, "sd-device-enumerator: Failed to scan modules: %m");
r = k;
}
if (k < 0)
r = log_debug_errno(k, "sd-device-enumerator: Failed to scan modules: %m");
}
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) */
if (match_subsystem(enumerator, "subsystem")) {
k = enumerator_scan_dir_and_add_devices(enumerator, subsysdir, NULL, NULL);
if (k < 0) {
log_debug_errno(k, "sd-device-enumerator: Failed to scan subsystems: %m");
r = k;
}
if (k < 0)
r = log_debug_errno(k, "sd-device-enumerator: Failed to scan subsystems: %m");
}
/* subsystem drivers */
if (match_subsystem(enumerator, "drivers")) {
k = enumerator_scan_dir(enumerator, subsysdir, "drivers", "drivers");
if (k < 0) {
log_debug_errno(k, "sd-device-enumerator: Failed to scan drivers: %m");
r = k;
}
if (k < 0)
r = log_debug_errno(k, "sd-device-enumerator: Failed to scan drivers: %m");
}
typesafe_qsort(enumerator->devices, enumerator->n_devices, device_compare);

View File

@ -8,9 +8,19 @@
#include "set.h"
#include "time-util.h"
#define LATEST_UDEV_DATABASE_VERSION 1
struct sd_device {
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;
sd_device *parent;
@ -88,7 +98,9 @@ struct sd_device {
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_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_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;
/* 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);
if (r < 0)
return r;
@ -944,6 +948,10 @@ int device_update_db(sd_device *device) {
SET_FOREACH(tag, device->current_tags)
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);

View File

@ -128,10 +128,6 @@ int device_add_property_aux(sd_device *device, const char *_key, const char *_va
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) {
_cleanup_free_ char *syspath = NULL;
const char *devpath;
@ -1208,6 +1204,12 @@ static int handle_db_line(sd_device *device, char key, const char *value) {
if (r < 0)
return r;
break;
case 'V':
r = safe_atou(value, &device->database_version);
if (r < 0)
return r;
break;
default:
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;
}
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) {
void *v;
assert_return(device, NULL);
if (!device_database_supports_current_tags(device))
return sd_device_get_tag_first(device);
(void) device_read_db(device);
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);
if (!device_database_supports_current_tags(device))
return sd_device_get_tag_next(device);
(void) device_read_db(device);
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(tag, -EINVAL);
if (!device_database_supports_current_tags(device))
return sd_device_has_tag(device, tag);
(void) device_read_db(device);
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)) {
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);
return 0;
}

View File

@ -649,7 +649,7 @@ int netdev_join(NetDev *netdev, Link *link, link_netlink_message_handler_t callb
return r;
break;
default:
assert_not_reached("Can not join independent netdev");
assert_not_reached("Cannot join independent netdev");
}
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) {
if (link->network->duid.type != _DUID_TYPE_INVALID)
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
return &link->manager->duid;
}

View File

@ -1163,13 +1163,17 @@ static int ndisc_router_handler(Link *link, sd_ndisc_router *rt) {
if (r < 0)
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)
r = dhcp6_request_address(link, false);
else
if (flags & (ND_RA_FLAG_MANAGED | ND_RA_FLAG_OTHER))
/* (re)start DHCPv6 client in stateful or stateless mode according to RA flags */
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)
return log_link_error_errno(link, r, "Could not acquire DHCPv6 lease on NDisc request: %m");
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_route_table = RT_TABLE_MAIN,
.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_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(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->memory_min == 0);
assert_se(ctx->memory_low == 0);

View File

@ -918,16 +918,7 @@ static int config_parse_type(
}
static const Specifier specifier_table[] = {
{ 'm', specifier_machine_id, NULL },
{ '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 },
COMMON_SYSTEM_SPECIFIERS,
{}
};

View File

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

View File

@ -145,13 +145,12 @@ static void print_source(uint64_t flags, usec_t rtt) {
printf("\n%s-- Information acquired via", ansi_grey());
if (flags != 0)
printf(" protocol%s%s%s%s%s",
flags & SD_RESOLVED_DNS ? " DNS" :"",
flags & SD_RESOLVED_LLMNR_IPV4 ? " LLMNR/IPv4" : "",
flags & SD_RESOLVED_LLMNR_IPV6 ? " LLMNR/IPv6" : "",
flags & SD_RESOLVED_MDNS_IPV4 ? " mDNS/IPv4" : "",
flags & SD_RESOLVED_MDNS_IPV6 ? " mDNS/IPv6" : "");
printf(" protocol%s%s%s%s%s",
flags & SD_RESOLVED_DNS ? " DNS" :"",
flags & SD_RESOLVED_LLMNR_IPV4 ? " LLMNR/IPv4" : "",
flags & SD_RESOLVED_LLMNR_IPV6 ? " LLMNR/IPv6" : "",
flags & SD_RESOLVED_MDNS_IPV4 ? " mDNS/IPv4" : "",
flags & SD_RESOLVED_MDNS_IPV6 ? " mDNS/IPv6" : "");
assert_se(format_timespan(rtt_str, sizeof(rtt_str), rtt, 100));

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_(sd_bus_track_unrefp) sd_bus_track *bus_track = NULL;
_cleanup_free_ char *path = NULL;
_cleanup_free_ char *instance_name = NULL;
Manager *m = userdata;
DnssdService *s = NULL;
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))
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);
if (!service->name)
return log_oom();
@ -1851,6 +1848,10 @@ static int bus_method_register_service(sd_bus_message *message, void *userdata,
if (!service->type)
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}");
if (r < 0)
return r;

View File

@ -229,7 +229,20 @@ int config_parse_dnssd_service_name(
void *data,
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;
_cleanup_free_ char *name = NULL;
int r;
assert(filename);
@ -242,20 +255,21 @@ int config_parse_dnssd_service_name(
return 0;
}
r = dnssd_render_instance_name(rvalue, NULL);
if (r == -ENOMEM)
return log_oom();
r = specifier_printf(rvalue, specifier_table, NULL, &name);
if (r < 0) {
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;
}
r = free_and_strdup(&s->name_template, rvalue);
if (r < 0)
return log_oom();
if (!dns_service_name_is_valid(name)) {
log_syntax(unit, LOG_WARNING, filename, line, 0,
"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(

View File

@ -1380,7 +1380,7 @@ static int nsec3_hashed_domain_make(DnsResourceRecord *nsec3, const char *domain
* matches the wildcard domain.
*
* 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
* 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) {

View File

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

View File

@ -2117,7 +2117,7 @@ int dns_transaction_request_dnssec_keys(DnsTransaction *t) {
return r;
if (r == 0) {
/* 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. */
r = dns_answer_match_key(t->answer, t->key, NULL);

View File

@ -155,33 +155,35 @@ static int specifier_dnssd_host_name(char specifier, const void *data, const voi
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[] = {
{ '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 },
{ 'o', specifier_os_id, NULL },
{ 'w', specifier_os_version_id, NULL },
{ 'b', specifier_boot_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 },
{}
};
_cleanup_free_ char *name = NULL;
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)
return r;
return log_debug_errno(r, "Failed to replace specifiers: %m");
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;
}
@ -225,7 +227,7 @@ int dnssd_update_rrs(DnssdService *s) {
LIST_FOREACH(items, txt_data, s->txt_data_items)
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)
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(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_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);

View File

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

View File

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

View File

@ -35,7 +35,7 @@ typedef enum ConfigParseFlags {
/* Prototype for a parser for a specific configuration setting */
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
* prototypes on the same screen) */
#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_IA64, "root-ia64" },
{ 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
{ GPT_ROOT_NATIVE, "root" },
{ 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_IA64, "usr-ia64" },
{ 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
{ GPT_USR_NATIVE, "usr" },
{ 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_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_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_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_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_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_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)
@ -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_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_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_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_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_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__)
# define GPT_ROOT_NATIVE GPT_ROOT_X86_64
@ -82,6 +90,20 @@
# define GPT_USR_NATIVE_VERITY GPT_USR_ARM_VERITY
#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_NO_BLOCK_IO_PROTOCOL (1ULL << 1)
#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) {
/* This is similar to unit_full_printf() but does not support
* 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
*/
/* This is similar to unit_name_printf() */
const Specifier table[] = {
{ 'i', specifier_instance, NULL },
{ 'j', specifier_last_component, NULL },
{ 'n', specifier_name, NULL },
{ 'N', specifier_prefix_and_instance, NULL },
{ 'p', specifier_prefix, NULL },
{ 'i', specifier_instance, NULL },
{ 'j', specifier_last_component, NULL },
{ 'g', specifier_group_name, NULL },
{ 'G', specifier_group_id, NULL },
{ 'U', specifier_user_id, NULL },
{ 'u', specifier_user_name, NULL },
COMMON_SYSTEM_SPECIFIERS,
{ 'm', specifier_machine_id, NULL },
{ '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 },
COMMON_CREDS_SPECIFIERS,
{}
};

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) {
char buf[MAX(FORMAT_TIMESTAMP_MAX, 64U)];
struct tm *(*gettime_r)(const time_t *, struct tm *);
struct tm tm;
uint64_t x;
time_t t;
int r;
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);
} 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);
switch (mode) {
@ -388,24 +385,29 @@ static int output_timestamp_realtime(FILE *f, sd_journal *j, OutputMode mode, Ou
break;
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),
"Failed to format ISO time");
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 */
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),
"Failed to format ISO-precise time");
xsprintf(usec, "%06"PRI_USEC, x % USEC_PER_SEC);
memcpy(buf + 20, usec, 6);
break;
}
case OUTPUT_SHORT:
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),
"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
* 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:
* 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
* 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,

View File

@ -282,6 +282,7 @@ const SyscallFilterSet syscall_filter_sets[_SYSCALL_FILTER_SET_MAX] = {
.name = "@default",
.help = "System calls that are always permitted",
.value =
"brk\0"
"cacheflush\0"
"clock_getres\0"
"clock_getres_time64\0"
@ -319,6 +320,9 @@ const SyscallFilterSet syscall_filter_sets[_SYSCALL_FILTER_SET_MAX] = {
"getuid\0"
"getuid32\0"
"membarrier\0"
"mmap\0"
"mmap2\0"
"munmap\0"
"nanosleep\0"
"pause\0"
"prlimit64\0"
@ -468,9 +472,6 @@ const SyscallFilterSet syscall_filter_sets[_SYSCALL_FILTER_SET_MAX] = {
"mkdirat\0"
"mknod\0"
"mknodat\0"
"mmap\0"
"mmap2\0"
"munmap\0"
"newfstatat\0"
"oldfstat\0"
"oldlstat\0"
@ -844,7 +845,6 @@ const SyscallFilterSet syscall_filter_sets[_SYSCALL_FILTER_SET_MAX] = {
"@signal\0"
"@sync\0"
"@timer\0"
"brk\0"
"capget\0"
"capset\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_ARM:
case SCMP_ARCH_AARCH64:
case SCMP_ARCH_PPC:
case SCMP_ARCH_PPC64:
case SCMP_ARCH_PPC64LE:
case SCMP_ARCH_MIPSEL64N32:
case SCMP_ARCH_MIPS64N32:
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_MIPSEL:
case SCMP_ARCH_MIPS:
case SCMP_ARCH_PPC:
case SCMP_ARCH_PPC64:
case SCMP_ARCH_PPC64LE:
default:
/* These we either know we don't support (i.e. are the ones that do use socketcall()), or we
* 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_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) {
return strreplace(string, "%", "%%");
}

View File

@ -2062,7 +2062,7 @@ bool user_record_compatible(UserRecord *a, UserRecord *b) {
assert(a);
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. */
if (!(a->mask & b->mask & USER_RECORD_REGULAR))
return false;

View File

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

View File

@ -514,10 +514,8 @@ static int remount_with_timeout(MountPoint *m, int umount_log_level) {
assert(m);
/* Due to the possibility of a remount operation hanging, we
* fork a child process and set a timeout. If the timeout
* lapses, the assumption is that that particular remount
* failed. */
/* Due to the possibility of a remount operation hanging, we fork a child process and set a
* timeout. If the timeout lapses, the assumption is that the particular remount failed. */
r = safe_fork("(sd-remount)", FORK_RESET_SIGNALS|FORK_CLOSE_ALL_FDS|FORK_LOG|FORK_REOPEN_LOG, &pid);
if (r < 0)
return r;
@ -552,10 +550,8 @@ static int umount_with_timeout(MountPoint *m, int umount_log_level) {
assert(m);
/* Due to the possibility of a umount operation hanging, we
* fork a child process and set a timeout. If the timeout
* lapses, the assumption is that that particular umount
* failed. */
/* Due to the possibility of a umount operation hanging, we fork a child process and set a
* timeout. If the timeout lapses, the assumption is that the particular umount failed. */
r = safe_fork("(sd-umount)", FORK_RESET_SIGNALS|FORK_CLOSE_ALL_FDS|FORK_LOG|FORK_REOPEN_LOG, &pid);
if (r < 0)
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) {
_cleanup_(table_unrefp) Table *table = NULL;
unsigned job_count = 0;
int r;
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, "-");
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;
const char *on_underline = "", *on_loaded = "", *on_active = "";
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_SET_BOTH_COLORS, on_active,
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_SET_BOTH_COLORS, on_underline);
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"
"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.");
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();
off = ansi_normal();
} else {

View File

@ -58,17 +58,21 @@ if add_languages('cpp', required : false)
opts += [['c++'],
['c++', '-std=c++98'],
['c++', '-std=c++11']]
if cc.has_argument('-std=c++14')
if cxx.has_argument('-std=c++14')
opts += [['c++', '-std=c++14']]
endif
if cc.has_argument('-std=c++17')
if cxx.has_argument('-std=c++17')
opts += [['c++', '-std=c++17']]
endif
if cxx.has_argument('-std=c++20')
opts += [['c++', '-std=c++20']]
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
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'
test(name,
check_compilation_sh,

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