import CS systemd-252-51.el9

This commit is contained in:
eabdullin 2025-03-11 08:15:07 +00:00
parent a34de4e57d
commit 6cd67ea240
70 changed files with 873014 additions and 24 deletions

View File

@ -0,0 +1,33 @@
From ebb65ff6498d81a846aa9d583b9a970562c3ae02 Mon Sep 17 00:00:00 2001
From: Lukas Nykryn <lnykryn@redhat.com>
Date: Tue, 1 Oct 2024 11:30:18 +0200
Subject: [PATCH] man: using WantedBy=default.target is not a good idea
We had several users, that wrote their unit files with
WantedBy=default.target because it should be started "every time".
But for example in Fedora/CentOS/RHEL, this often breaks for
example selinux relabels (where we just want to do a relabel and reboot).
(cherry picked from commit 67b6404b80cf8078f3d9ec6d4c2f34ac25b15077)
Resolves: RHEL-36531
---
man/systemd.special.xml | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/man/systemd.special.xml b/man/systemd.special.xml
index 1620895511..0c1f03ecf3 100644
--- a/man/systemd.special.xml
+++ b/man/systemd.special.xml
@@ -229,6 +229,11 @@
names like <varname>single</varname>, <varname>rescue</varname>, <varname>1</varname>,
<varname>3</varname>, <varname>5</varname>, …; see
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>.</para>
+
+ <para>For typical unit files please set <literal>WantedBy=</literal> to a regular target (like
+ <filename>multi-user.target</filename> or <filename>graphical.target</filename>),
+ instead of <filename>default.target</filename>, since such a service will also be run on special
+ boots like on system update, emergency boot…</para>
</listitem>
</varlistentry>
<varlistentry>

View File

@ -0,0 +1,47 @@
From 855452031835240ca981fe74faa3fce8f32642b7 Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Thu, 4 Jan 2024 13:40:00 +0100
Subject: [PATCH] logind: tighten for which classes of sessions we do
stop-on-idle
We only want to do this for fully set up, interactive sessions, i.e.
user and user-early, but not for any others, hence restrict the rules a
bit.
Follow-up for: 508b4786e8592e82eb4832549f74aaa54335d14c
(cherry picked from commit ad23439eae718ac3634f260be0d29e01445983a8)
Related: RHEL-24340
---
src/login/logind-session.c | 2 +-
src/login/logind-session.h | 3 +++
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/login/logind-session.c b/src/login/logind-session.c
index af5817e2b6..8c8dd0d43e 100644
--- a/src/login/logind-session.c
+++ b/src/login/logind-session.c
@@ -735,7 +735,7 @@ static int session_setup_stop_on_idle_timer(Session *s) {
assert(s);
- if (s->manager->stop_idle_session_usec == USEC_INFINITY || IN_SET(s->class, SESSION_GREETER, SESSION_LOCK_SCREEN))
+ if (s->manager->stop_idle_session_usec == USEC_INFINITY || !SESSION_CLASS_CAN_STOP_ON_IDLE(s->class))
return 0;
r = sd_event_add_time_relative(
diff --git a/src/login/logind-session.h b/src/login/logind-session.h
index 4c28607986..5ee059aa4f 100644
--- a/src/login/logind-session.h
+++ b/src/login/logind-session.h
@@ -27,6 +27,9 @@ typedef enum SessionClass {
_SESSION_CLASS_INVALID = -EINVAL,
} SessionClass;
+/* Which sessions classes should be subject to stop-in-idle */
+#define SESSION_CLASS_CAN_STOP_ON_IDLE(class) (IN_SET((class), SESSION_USER))
+
typedef enum SessionType {
SESSION_UNSPECIFIED,
SESSION_TTY,

View File

@ -0,0 +1,35 @@
From bb607f5183dd812ccd3645cf6ca8f5dfad2cb7cd Mon Sep 17 00:00:00 2001
From: packit-public-repos-bot
<125959684+packit-public-repos-bot@users.noreply.github.com>
Date: Wed, 11 Dec 2024 11:57:20 +0100
Subject: [PATCH] Fix configuration for Packit 1.0.0
This commit fixes the configuration for the forthcoming Packit 1.0.0.
See [our blog post](https://packit.dev/posts/packit_1_0_0_action_required) for more details.
- Job type `build` has been changed to `copr_build`.
- Job type `production_build` has been changed to `upstream_koji_build`.
- Key `upstream_project_name` has been changed to `upstream_package_name`.
- Key `synced_files` has been changed to `files_to_sync`.
Please review and merge me before January 2025 otherwise packit-service jobs will fail because of an invalid configuration.
rhel-only: ci
Resolves: RHEL-70884
---
.packit.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.packit.yml b/.packit.yml
index 9697a0df84..17bc9d1db8 100644
--- a/.packit.yml
+++ b/.packit.yml
@@ -4,7 +4,7 @@
# Docs: https://packit.dev/docs/
specfile_path: .packit_rpm/systemd.spec
-synced_files:
+files_to_sync:
- .packit.yaml
- src: .packit_rpm/systemd.spec
dest: systemd.spec

View File

@ -0,0 +1,55 @@
From faf449e8176b05f281d69ce013d9aedf3a22eb21 Mon Sep 17 00:00:00 2001
From: Jan Macku <jamacku@redhat.com>
Date: Fri, 3 Jan 2025 09:33:26 +0100
Subject: [PATCH] udev/net_id: introduce naming scheme for RHEL-9.6
rhel-only: policy
Resolves: RHEL-25515
---
man/systemd.net-naming-scheme.xml | 6 ++++++
src/shared/netif-naming-scheme.c | 1 +
src/shared/netif-naming-scheme.h | 1 +
3 files changed, 8 insertions(+)
diff --git a/man/systemd.net-naming-scheme.xml b/man/systemd.net-naming-scheme.xml
index 83293e5636..f2077ed02d 100644
--- a/man/systemd.net-naming-scheme.xml
+++ b/man/systemd.net-naming-scheme.xml
@@ -513,6 +513,12 @@
</listitem>
</varlistentry>
+ <varlistentry>
+ <term><constant>rhel-9.6</constant></term>
+
+ <listitem><para>Same as naming scheme <constant>rhel-9.5</constant>.</para></listitem>
+ </varlistentry>
+
</variablelist>
<para>By default <constant>rhel-9.0</constant> is used.</para>
diff --git a/src/shared/netif-naming-scheme.c b/src/shared/netif-naming-scheme.c
index 9f0c783300..360a603581 100644
--- a/src/shared/netif-naming-scheme.c
+++ b/src/shared/netif-naming-scheme.c
@@ -45,6 +45,7 @@ static const NamingScheme naming_schemes[] = {
{ "rhel-9.3", NAMING_RHEL_9_3 },
{ "rhel-9.4", NAMING_RHEL_9_4 },
{ "rhel-9.5", NAMING_RHEL_9_5 },
+ { "rhel-9.6", NAMING_RHEL_9_6 },
/* … add more schemes here, as the logic to name devices is updated … */
EXTRA_NET_NAMING_MAP
diff --git a/src/shared/netif-naming-scheme.h b/src/shared/netif-naming-scheme.h
index 5bc071f8db..c533d0f37f 100644
--- a/src/shared/netif-naming-scheme.h
+++ b/src/shared/netif-naming-scheme.h
@@ -74,6 +74,7 @@ typedef enum NamingSchemeFlags {
NAMING_RHEL_9_3 = NAMING_RHEL_9_0 | NAMING_SR_IOV_R,
NAMING_RHEL_9_4 = NAMING_RHEL_9_3,
NAMING_RHEL_9_5 = NAMING_RHEL_9_4 & ~NAMING_BRIDGE_MULTIFUNCTION_SLOT,
+ NAMING_RHEL_9_6 = NAMING_RHEL_9_5,
EXTRA_NET_NAMING_SCHEMES

View File

@ -0,0 +1,24 @@
From b037a49a6b4946a1b006a4ca7326cf421833e549 Mon Sep 17 00:00:00 2001
From: Renan Guilherme <japareaggae@gmail.com>
Date: Wed, 7 Aug 2024 18:57:18 -0400
Subject: [PATCH] hwdb: Fix accelerometer mount matrix for ASUS T100TAS
(cherry picked from commit 3a576084e2dcac9ecdace7afb89231b819bc100e)
Resolves: RHEL-49810
---
hwdb.d/60-sensor.hwdb | 1 +
1 file changed, 1 insertion(+)
diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb
index 1e3af6f358..80547834d2 100644
--- a/hwdb.d/60-sensor.hwdb
+++ b/hwdb.d/60-sensor.hwdb
@@ -152,6 +152,7 @@ sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pnM80TA:*
sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pnT100TA:*
sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pnT100TAF:*
sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pnT100TAM:*
+sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pnT100TAS:*
sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:pnT200TA:*
ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1

View File

@ -0,0 +1,31 @@
From b124550f352c2cb197686117f576f7c4042c20aa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Filip=20Lewi=C5=84ski?= <filip.lewinski@3mdeb.com>
Date: Wed, 28 Aug 2024 19:33:43 +0200
Subject: [PATCH] hwdb.d/60-keyboard.hwdb: add Clevo mic mute quirk for V5x
dGPU
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Filip Lewiński <filip.lewinski@3mdeb.com>
(cherry picked from commit 8c7b1401640bcda13ece799a063782e0a608476e)
Resolves: RHEL-49810
---
hwdb.d/60-keyboard.hwdb | 3 +++
1 file changed, 3 insertions(+)
diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
index 15c0d4ca31..a5e170adb9 100644
--- a/hwdb.d/60-keyboard.hwdb
+++ b/hwdb.d/60-keyboard.hwdb
@@ -341,6 +341,9 @@ evdev:atkbd:dmi:bvn*:bvr*:svnNotebook:pnV54x_6x_TU:*
KEYBOARD_KEY_f7=f21 # Touchpad Toggle
KEYBOARD_KEY_f8=f21 # Touchpad Toggle
+evdev:atkbd:dmi:bvn*:bvr*:svnNotebook:pnV5xTNC_TND_TNE:*
+ KEYBOARD_KEY_81=f20 # Fn+4; Mic Mute
+
###########################################################
# Compal
###########################################################

View File

@ -0,0 +1,32 @@
From edd50c274cfec926764f87d5d5552d3da5028474 Mon Sep 17 00:00:00 2001
From: Yu Watanabe <watanabe.yu+github@gmail.com>
Date: Fri, 30 Aug 2024 13:08:40 +0900
Subject: [PATCH] hwdb: add entry for Dell AlpsPS/2 ALPS DualPoint TouchPad
Closes #34133.
(cherry picked from commit 16d70515e11697d24f9b12fd803f51386b6183d2)
Resolves: RHEL-49810
---
hwdb.d/60-evdev.hwdb | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/hwdb.d/60-evdev.hwdb b/hwdb.d/60-evdev.hwdb
index 0b70a82093..372ae682ed 100644
--- a/hwdb.d/60-evdev.hwdb
+++ b/hwdb.d/60-evdev.hwdb
@@ -255,6 +255,13 @@ evdev:input:b0003v0ED1p7821*
# Dell
#########################################
+# Dell AlpsPS/2 ALPS DualPoint TouchPad
+evdev:name:AlpsPS/2 ALPS DualPoint TouchPad:dmi:*:svnDellInc.*:pnLatitudeE7440*:
+ EVDEV_ABS_00=:::28
+ EVDEV_ABS_01=:::28
+ EVDEV_ABS_35=:::28
+ EVDEV_ABS_36=:::28
+
# Dell Vostro 1510
evdev:name:AlpsPS/2 ALPS GlidePoint*:dmi:bvn*:bvr*:bd*:svnDellInc.:pnVostro1510:*
EVDEV_ABS_00=::14

View File

@ -0,0 +1,42 @@
From 09c1776dd1b3d87dd9c5873634ab95b48ee20b65 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Thu, 5 Sep 2024 15:09:58 +0200
Subject: [PATCH] hwdb: Mark Apple Wireless keyboards as not having NumLock LED
Mark those Apple Wireless keyboards as not having a NumLock key:
https://en.wikipedia.org/wiki/Apple_Wireless_Keyboard
You can see that they don't have a NumLock LED because they didn't even
have a NumLock in the first place:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0fea6fe7d5ef1b5fa5f78048d4729f85181c04ca
(cherry picked from commit 5a11437e2e39a0dfff53cc5b48f6637177e64fc5)
Resolves: RHEL-49810
---
hwdb.d/60-keyboard.hwdb | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
index a5e170adb9..a72f619e7c 100644
--- a/hwdb.d/60-keyboard.hwdb
+++ b/hwdb.d/60-keyboard.hwdb
@@ -2291,6 +2291,18 @@ evdev:input:b0003v05FEp1010*
#
# Presence of a LED is implicit when the property is absent.
+# Apple Wireless keyboards
+evdev:input:b0005v05aCp022C*
+evdev:input:b0005v05aCp022D*
+evdev:input:b0005v05aCp022E*
+evdev:input:b0005v05aCp0239*
+evdev:input:b0005v05aCp023A*
+evdev:input:b0005v05aCp023B*
+evdev:input:b0005v05aCp0255*
+evdev:input:b0005v05aCp0256*
+evdev:input:b0005v05aCp0257*
+ KEYBOARD_LED_NUMLOCK=0
+
# Logitech K750
evdev:input:b0003v046Dp4002*
KEYBOARD_LED_NUMLOCK=0

View File

@ -0,0 +1,27 @@
From 9ce665e76a78d2995496253cae30750bb00a0557 Mon Sep 17 00:00:00 2001
From: Yanqing Jing <michael.origin.j@gmail.com>
Date: Mon, 9 Sep 2024 20:18:40 +0800
Subject: [PATCH] update keyboard hwdb to add acer Predator PHN16-72
(cherry picked from commit d8b4be38ddc5e7cb1dc5e6da9b6e247d6a3d9ffd)
Resolves: RHEL-49810
---
hwdb.d/60-keyboard.hwdb | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
index a72f619e7c..3bf4860e1d 100644
--- a/hwdb.d/60-keyboard.hwdb
+++ b/hwdb.d/60-keyboard.hwdb
@@ -231,6 +231,10 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnPredatorPHN16-71:*
KEYBOARD_KEY_f5=prog1 # "predator sense" button
KEYBOARD_KEY_66=micmute # Microphone mute button
+# Predator PHN16-72
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnPredatorPHN16-72:*
+ KEYBOARD_KEY_66=micmute # Microphone mute button
+
# Nitro AN515-58
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnNitro*AN*515-58:pvr*
KEYBOARD_KEY_8a=f20 # Microphone mute button

View File

@ -0,0 +1,102 @@
From 7944aaf1e79888ed511b8d036af1be4f3f654139 Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Tue, 10 Sep 2024 10:09:24 +0200
Subject: [PATCH] hwdb: death to tabs!
Some tabs snuck in here, but we don't like tabs in our codebase. Fix
them.
(cherry picked from commit 5446e39e0eb48274d78e09555bc4f0e9b20f110b)
Resolves: RHEL-49810
---
hwdb.d/60-keyboard.hwdb | 30 +++++++++++++++---------------
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
index 3bf4860e1d..5a08931636 100644
--- a/hwdb.d/60-keyboard.hwdb
+++ b/hwdb.d/60-keyboard.hwdb
@@ -223,7 +223,7 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnPackard*Bell*:pn*:*
# Swift SF314-511
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnSwiftSF314-511:pvr*
- KEYBOARD_KEY_8a=f20 # Fn+F12, microphone mute
+ KEYBOARD_KEY_8a=f20 # Fn+F12, microphone mute
# Predator PHN16-71
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnPredatorPHN16-71:*
@@ -263,7 +263,7 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAlienware*:pnM17xR3:*
# Aquarius Cmp NS483
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAquarius*:pnCmp*NS483*:*
KEYBOARD_KEY_56=backslash
- KEYBOARD_KEY_76=f21 # Touchpad Toggle
+ KEYBOARD_KEY_76=f21 # Touchpad Toggle
###########################################################
# Asus
@@ -980,7 +980,7 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnJP-IK:pnLEAPW502:pvr*
# LE14U/LE15U
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnKVADRA*:pn*LE1*U*:*
- KEYBOARD_KEY_76=f21 # Fn+F1 Toggle touchpad, sends meta+ctrl+toggle
+ KEYBOARD_KEY_76=f21 # Fn+F1 Toggle touchpad, sends meta+ctrl+toggle
###########################################################
# Lenovo
@@ -1908,9 +1908,9 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700T*:*
# Galaxy Book (2021) NP750XDA-KD4SE
evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn750XDA:pvr*
KEYBOARD_KEY_81=!esc
- KEYBOARD_KEY_ce=!prog1 # Fn+F1 launch settings
- KEYBOARD_KEY_ae=!volumedown # Fn+F7 volume down
- KEYBOARD_KEY_b0=!volumeup # Fn+F8 volume up
+ KEYBOARD_KEY_ce=!prog1 # Fn+F1 launch settings
+ KEYBOARD_KEY_ae=!volumedown # Fn+F7 volume down
+ KEYBOARD_KEY_b0=!volumeup # Fn+F8 volume up
###########################################################
@@ -2035,13 +2035,13 @@ evdev:name:Toshiba*input*device:dmi:bvn*:bvr*:bd*:svnTOSHIBA*:pnSatellite*P75-A:
# Portege Z830 ACPI quickstart buttons
evdev:name:Quickstart Button 1:dmi:bvn*:bvr*:bd*:svnTOSHIBA*:pnPORTEGEZ830:*
- KEYBOARD_KEY_1=prog1 # TOSHIBA eco button
+ KEYBOARD_KEY_1=prog1 # TOSHIBA eco button
evdev:name:Quickstart Button 2:dmi:bvn*:bvr*:bd*:svnTOSHIBA*:pnPORTEGEZ830:*
- KEYBOARD_KEY_1=prog2 # TOSHIBA Presentation button
+ KEYBOARD_KEY_1=prog2 # TOSHIBA Presentation button
evdev:name:Quickstart Button 3:dmi:bvn*:bvr*:bd*:svnTOSHIBA*:pnPORTEGEZ830:*
- KEYBOARD_KEY_1=f21 # Touchpad toggle
+ KEYBOARD_KEY_1=f21 # Touchpad toggle
###########################################################
# VIA
@@ -2074,11 +2074,11 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnINET:pnP325J:*
# Home: LeftCtrl + Esc -> LeftMeta (ignore LeftCtrl, map Esc to LeftMeta)
# Back: Backspace -> back (map backspace to back)
evdev:name:FTSC1000:00 2808:509C Keyboard:dmi:*:svnXiaomiInc:pnMipad2:*
- KEYBOARD_KEY_700e0=unknown # LeftCtrl -> ignore
- KEYBOARD_KEY_700e3=unknown # LeftMeta -> ignore
- KEYBOARD_KEY_70016=menu # S -> menu
- KEYBOARD_KEY_70029=leftmeta # Esc -> LeftMeta (Windows key / Win8 tablets home)
- KEYBOARD_KEY_7002a=back # Backspace -> back
+ KEYBOARD_KEY_700e0=unknown # LeftCtrl -> ignore
+ KEYBOARD_KEY_700e3=unknown # LeftMeta -> ignore
+ KEYBOARD_KEY_70016=menu # S -> menu
+ KEYBOARD_KEY_70029=leftmeta # Esc -> LeftMeta (Windows key / Win8 tablets home)
+ KEYBOARD_KEY_7002a=back # Backspace -> back
###########################################################
# Zepto
@@ -2190,7 +2190,7 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnViewSonic:pnVPAD10:*
evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:bvr*:bd*:svnPositivoBahia-VAIO:pnVJPW1[12]F11X*:pvr*:*
# Vaio FE14 (VJFE41F11X, VJE42F11X, VJFE44F11X, VJFE54F11X)
evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:bvr*:bd*:svnPositivoBahia-VAIO:pnVJFE*:pvr*:*
- KEYBOARD_KEY_76=f21 # Fn+F1 toggle touchpad
+ KEYBOARD_KEY_76=f21 # Fn+F1 toggle touchpad
###########################################################
# Positivo

View File

@ -0,0 +1,38 @@
From c333e0d4f173f7a6a31ff554ebc3e254aa7a8a70 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Filip=20Lewi=C5=84ski?= <filip.lewinski@3mdeb.com>
Date: Fri, 30 Aug 2024 09:38:46 +0200
Subject: [PATCH] hwdb.d/60-keyboard.hwdb: add Clevo mic mute quirk for V5x
iGPU, NV41PZ
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Filip Lewiński <filip.lewinski@3mdeb.com>
(cherry picked from commit c3563dc6d999cbc0da30c15e6e9d109021d2bd8e)
Resolves: RHEL-49810
---
hwdb.d/60-keyboard.hwdb | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
index 5a08931636..27be239bc6 100644
--- a/hwdb.d/60-keyboard.hwdb
+++ b/hwdb.d/60-keyboard.hwdb
@@ -340,12 +340,14 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnNotebook:pnW65_67SZ:*
evdev:atkbd:dmi:bvn*:bvr*:svnNotebook:pnNS50_70MU:*
evdev:atkbd:dmi:bvn*:bvr*:svnNotebook:pnNV4XMB,ME,MZ:*
evdev:atkbd:dmi:bvn*:bvr*:svnNotebook:pnNS5x_NS7xPU:*
-evdev:atkbd:dmi:bvn*:bvr*:svnNotebook:pnNV4xPZ:*
-evdev:atkbd:dmi:bvn*:bvr*:svnNotebook:pnV54x_6x_TU:*
KEYBOARD_KEY_f7=f21 # Touchpad Toggle
KEYBOARD_KEY_f8=f21 # Touchpad Toggle
evdev:atkbd:dmi:bvn*:bvr*:svnNotebook:pnV5xTNC_TND_TNE:*
+evdev:atkbd:dmi:bvn*:bvr*:svnNotebook:pnNV4xPZ:*
+evdev:atkbd:dmi:bvn*:bvr*:svnNotebook:pnV54x_6x_TU:*
+ KEYBOARD_KEY_f7=f21 # Touchpad Toggle
+ KEYBOARD_KEY_f8=f21 # Touchpad Toggle
KEYBOARD_KEY_81=f20 # Fn+4; Mic Mute
###########################################################

View File

@ -0,0 +1,27 @@
From baf1f8ef3c3e3ba2650f6ce0a8ee243f9cc18fd2 Mon Sep 17 00:00:00 2001
From: Gregory Arenius <gregory@arenius.com>
Date: Fri, 13 Sep 2024 16:13:58 -0700
Subject: [PATCH] Add ACCEL_MOUNT_MATRIX for Chuwi Hi10 Max.
(cherry picked from commit 3f3dc6ab84e1f3cc5371d48ed910044d39f5c033)
Resolves: RHEL-49810
---
hwdb.d/60-sensor.hwdb | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb
index 80547834d2..d88aea4928 100644
--- a/hwdb.d/60-sensor.hwdb
+++ b/hwdb.d/60-sensor.hwdb
@@ -299,6 +299,10 @@ sensor:modalias:acpi:KIOX000A*:dmi:*:svnCHUWIInnovationAndTechnology*:pnHi10X:*
sensor:modalias:acpi:MXC6655*:dmi:*:svnCHUWIINNOVATIONLIMITED:pnHi10Go:*
ACCEL_MOUNT_MATRIX=-1, 0, 0; 0,-1, 0; 0, 0, 1
+# Chuwi Hi10 Max
+sensor:modalias:acpi:MXC6655*:dmi:*:svnCHUWIInnovationAndTechnology*:pnHi10Max:*
+ ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
+
# Chuwi Hi12
sensor:modalias:acpi:BOSC0200*:dmi:*:svnHampoo:pnP02BD6_HI-122LP:*
sensor:modalias:acpi:BOSC0200*:dmi:*:svnDefaultstring:pnDefaultstring:*

View File

@ -0,0 +1,32 @@
From a18ab708f0525334e123f64a039b6e44fccc64d7 Mon Sep 17 00:00:00 2001
From: Matthieu CHARETTE <matthieu.charette@gmail.com>
Date: Sat, 14 Sep 2024 16:36:13 +0200
Subject: [PATCH] Add HUAWEI MateBook D 15 AMD ACCEL properties
(cherry picked from commit 8ee3d4df80369eee1210dcec680a03994c08a217)
Resolves: RHEL-49810
---
hwdb.d/60-sensor.hwdb | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb
index d88aea4928..3e32c327e6 100644
--- a/hwdb.d/60-sensor.hwdb
+++ b/hwdb.d/60-sensor.hwdb
@@ -607,6 +607,15 @@ sensor:modalias:i2c:bmc150_accel:dmi:*:svnHewlett-Packard:pnHPPavilionx2Detachab
sensor:modalias:i2c:bmc150_accel:dmi:*:svnHewlett-Packard:pnHPProTablet408:*:rn8048:*
ACCEL_MOUNT_MATRIX=0, 1, 0; -1, 0, 0; 0, 0, 1
+#########################################
+# HUAWEI
+#########################################
+
+# HUAWEI MateBook D 15 AMD
+sensor:modalias:acpi:SMO8840*:dmi:*:svnHUAWEI:pnBOHK-WAX9X:*
+ ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
+ ACCEL_LOCATION=base
+
#########################################
# I.T.Works
#########################################

View File

@ -0,0 +1,33 @@
From 95ac4e7be856343240147eda6d1479a61e0e020f Mon Sep 17 00:00:00 2001
From: Celeste Liu <CoelacanthusHex@gmail.com>
Date: Mon, 16 Sep 2024 00:31:41 +0800
Subject: [PATCH] hwdb: add Kensington SlimBlade Pro trackball (Bluetooth mode)
Wired and 2.4G dongle connectivity is covered by general trackball rule,
but with Bluetooth connectivity Kensington SlimBlade Pro uses the name
"SlimBlade Pro" which doesn't contain "[Tt]rack[Bb]all". We need to
process it specially.
Signed-off-by: Celeste Liu <CoelacanthusHex@gmail.com>
(cherry picked from commit 6573f0c82c09001b5f24e44df2cbe40f6f584624)
Resolves: RHEL-49810
---
hwdb.d/70-mouse.hwdb | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/hwdb.d/70-mouse.hwdb b/hwdb.d/70-mouse.hwdb
index 20079d6350..fcd9acd2b4 100644
--- a/hwdb.d/70-mouse.hwdb
+++ b/hwdb.d/70-mouse.hwdb
@@ -310,6 +310,10 @@ mouse:bluetooth:v047dp8019:name:Expert Wireless TB Mouse:*
ID_INPUT_TRACKBALL=1
MOUSE_DPI=400@125
+# Kensington SlimBlade Pro trackball (via Bluetooth)
+mouse:bluetooth:v047dp80d4:name:SlimBlade Pro:*
+ ID_INPUT_TRACKBALL=1
+
##########################################
# Lenovo
##########################################

View File

@ -0,0 +1,29 @@
From 463403b1c7eb8499dfe4c3bdf91255cc461db650 Mon Sep 17 00:00:00 2001
From: Marius Hoch <mail@mariushoch.de>
Date: Wed, 18 Sep 2024 12:07:00 +0200
Subject: [PATCH] hwdb: Add accel orientation quirk for the IdeaPad Duet 3
10IGL5-LTE
Signed-off-by: Marius Hoch <mail@mariushoch.de>
(cherry picked from commit ff831e7c50350f92a86848b881fa320d528c1bd7)
Resolves: RHEL-49810
---
hwdb.d/60-sensor.hwdb | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb
index 3e32c327e6..2adc5abc1f 100644
--- a/hwdb.d/60-sensor.hwdb
+++ b/hwdb.d/60-sensor.hwdb
@@ -760,8 +760,9 @@ sensor:modalias:i2c:bmc150_accel:dmi:*:svnLENOVO:*:pvrLenovoYoga300-11IBR:*
sensor:modalias:acpi:ACCL0001*:dmi:*:svnLENOVO:pn60072:pvr851*:*
ACCEL_MOUNT_MATRIX=0, 1, 0; -1, 0, 0; 0, 0, 1
-# IdeaPad Duet 3 10IGL5 (82AT)
+# IdeaPad Duet 3 10IGL5 (82AT) and 10IGL5-LTE (82HK)
sensor:modalias:acpi:SMO8B30*:dmi:*:svnLENOVO*:pn82AT:*
+sensor:modalias:acpi:SMO8B30*:dmi:*:svnLENOVO*:pn82HK:*
ACCEL_MOUNT_MATRIX=0, 1, 0; -1, 0, 0; 0, 0, 1
#########################################

View File

@ -0,0 +1,31 @@
From 0b19839b5097be84b2948f7e5d96b08de7269a5c Mon Sep 17 00:00:00 2001
From: JoseskVolpe <78318343+JoseskVolpe@users.noreply.github.com>
Date: Thu, 19 Sep 2024 19:36:44 +0000
Subject: [PATCH] hwdb: add keymaps for Acer Nitro 5 AN515-47 (#34493)
This fixes the microphone mute key and NitroSense key for Acer Nitro 5 AN515-47,
so they can be recognized by desktop environments.
(cherry picked from commit 3135a21be422f3c33e445bf249dc5df1a74f9dc0)
Resolves: RHEL-49810
---
hwdb.d/60-keyboard.hwdb | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
index 27be239bc6..56bae850e1 100644
--- a/hwdb.d/60-keyboard.hwdb
+++ b/hwdb.d/60-keyboard.hwdb
@@ -235,6 +235,11 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnPredatorPHN16-71:*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnPredatorPHN16-72:*
KEYBOARD_KEY_66=micmute # Microphone mute button
+# Nitro AN515-47
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnNitro*AN*515-47:pvr*
+ KEYBOARD_KEY_66=micmute # Microphone mute button
+ KEYBOARD_KEY_f5=prog1 # NitroSense button
+
# Nitro AN515-58
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnNitro*AN*515-58:pvr*
KEYBOARD_KEY_8a=f20 # Microphone mute button

View File

@ -0,0 +1,31 @@
From 385756ed56a52c189d5378c2d509b615d3ee4aad Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Tue, 1 Oct 2024 18:15:28 +0200
Subject: [PATCH] hwdb: make key map match comment for one laptop
No idea what the right fix is here, the commnt says "touchpad off" but
uses "f22" which is touchpad "on".
let's trust the comment, because it's more literal, and assume this was
a mistake.
(cherry picked from commit d8b1d43758d2815a34b24ade858b98d4cbb048f6)
Resolves: RHEL-49810
---
hwdb.d/60-keyboard.hwdb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
index 56bae850e1..038ce29da2 100644
--- a/hwdb.d/60-keyboard.hwdb
+++ b/hwdb.d/60-keyboard.hwdb
@@ -674,7 +674,7 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHP*Pavilion*dv7*Notebook*PC:
# Pavilion 13 x360 (Tablet mode and SYSRQ key)
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*[pP][aA][vV][iI][lL][iI][oO][nN]*13*x360*:*
- KEYBOARD_KEY_d7=!f22 # touchpad off
+ KEYBOARD_KEY_d7=!f23 # touchpad off
KEYBOARD_KEY_d9=unknown
KEYBOARD_KEY_d2=sysrq # Fn+Print = SYSRQ

View File

@ -0,0 +1,50 @@
From a842b197e797c8faa54485f8f937f9d811b0aa84 Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Tue, 10 Sep 2024 16:57:41 +0200
Subject: [PATCH] hwdb: there's KEY_BRIGHTNESS_AUTO these days, hence hook it
up where a FIXME suggests that
(cherry picked from commit 81f1aad8ce42a16b1e80ac3525501eb18d32238a)
Resolves: RHEL-49810
---
hwdb.d/60-keyboard.hwdb | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
index 038ce29da2..7afc13ebc6 100644
--- a/hwdb.d/60-keyboard.hwdb
+++ b/hwdb.d/60-keyboard.hwdb
@@ -408,12 +408,12 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnDell*:pn*:*
KEYBOARD_KEY_89=ejectclosecd # Fn+F10 Eject CD
KEYBOARD_KEY_8a=suspend # Fn+F1 hibernate
KEYBOARD_KEY_8b=switchvideomode # Fn+F8 CRT/LCD (high keycode: "displaytoggle")
- KEYBOARD_KEY_8c=unknown # Fn+Right Auto Brightness
+ KEYBOARD_KEY_8c=brightness_auto # Fn+Right Auto Brightness
KEYBOARD_KEY_8f=switchvideomode # Fn+F7 aspect ratio
KEYBOARD_KEY_90=previoussong # Front panel previous song
KEYBOARD_KEY_91=prog1 # Wi-Fi Catcher (Dell-specific)
KEYBOARD_KEY_92=media # MediaDirect button (house icon)
- KEYBOARD_KEY_93=unknown # FIXME Fn+Left Auto Brightness
+ KEYBOARD_KEY_93=brightness_auto # Fn+Left Auto Brightness
KEYBOARD_KEY_95=camera # Shutter button - Takes a picture if optional camera available
KEYBOARD_KEY_97=email # Tablet email button
KEYBOARD_KEY_98=f21 # FIXME: Tablet screen rotation
@@ -644,7 +644,7 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pn*:*
KEYBOARD_KEY_8c=media # music
KEYBOARD_KEY_8e=dvd
KEYBOARD_KEY_b1=help
- KEYBOARD_KEY_b3=unknown # FIXME: Auto brightness
+ KEYBOARD_KEY_b3=brightness_auto # Auto brightness
KEYBOARD_KEY_d7=wlan
KEYBOARD_KEY_92=brightnessdown # Fn+F7 (Fn+F9 on 6730b)
KEYBOARD_KEY_97=brightnessup # Fn+F8 (Fn+F10 on 6730b)
@@ -747,7 +747,7 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*2760p*:*
KEYBOARD_KEY_97=brightnessup
KEYBOARD_KEY_d8=!f23 # touchpad off
KEYBOARD_KEY_d9=!f22 # touchpad on
- KEYBOARD_KEY_b3=unknown # FIXME: Auto brightness
+ KEYBOARD_KEY_b3=brightness_auto # Auto brightness
# TX2
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*[tT][xX]2*:*

View File

@ -0,0 +1,80 @@
From be90d03e498266e6a60986536fbd24843a07b16f Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Tue, 10 Sep 2024 17:14:52 +0200
Subject: [PATCH] hwdb: use KEY_ROTATE_DISPLAY for various cases of display
rotation keys
The keycode is reletively new. Let's fix some "FIXMEs" and actually make
use of the keycode wherever it appears appropriate according to
commentary.
(cherry picked from commit 427403baa6c3ff256c2cbb855d68c3d01776949d)
Resolves: RHEL-49810
---
hwdb.d/60-keyboard.hwdb | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
index 7afc13ebc6..c9baa1ebf8 100644
--- a/hwdb.d/60-keyboard.hwdb
+++ b/hwdb.d/60-keyboard.hwdb
@@ -190,7 +190,7 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMateB311RN-31*:pvr*
# Travelmate C300
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*C3[01]0*:*
- KEYBOARD_KEY_67=f24 # FIXME: rotate screen
+ KEYBOARD_KEY_67=rotate_display # rotate screen
KEYBOARD_KEY_68=up
KEYBOARD_KEY_69=down
KEYBOARD_KEY_6b=fn
@@ -416,7 +416,7 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnDell*:pn*:*
KEYBOARD_KEY_93=brightness_auto # Fn+Left Auto Brightness
KEYBOARD_KEY_95=camera # Shutter button - Takes a picture if optional camera available
KEYBOARD_KEY_97=email # Tablet email button
- KEYBOARD_KEY_98=f21 # FIXME: Tablet screen rotation
+ KEYBOARD_KEY_98=rotate_display # Tablet screen rotation
KEYBOARD_KEY_99=nextsong # Front panel next song
KEYBOARD_KEY_9a=setup # Tablet tools button
KEYBOARD_KEY_9b=switchvideomode # Display toggle button
@@ -486,7 +486,7 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnDellInc.:pnDellSystemXPSL702X:*
# Dell XPS12 9Q33
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnDell*:pnXPS12-9Q33*:*
KEYBOARD_KEY_88=wlan
- KEYBOARD_KEY_65=direction # Screen Rotate
+ KEYBOARD_KEY_65=rotate_display # Screen Rotate
# Dell Pro Rugged microphone mute
evdev:name:Dell WMI hotkeys:dmi:bvn*:bvr*:bd*:svnDell*:pnDellProRugged*:*
@@ -1068,11 +1068,11 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*:pvrThinkPad*X2*T*:rvn*
KEYBOARD_KEY_66=screenlock
KEYBOARD_KEY_67=cyclewindows # bezel circular arrow
KEYBOARD_KEY_68=setup # bezel setup / menu
- KEYBOARD_KEY_6c=direction # rotate screen
+ KEYBOARD_KEY_6c=rotate_display # rotate screen
# ThinkPad X6 Tablet
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*:pvrThinkPad*X6*Tablet*:rvn*
- KEYBOARD_KEY_6c=direction # rotate
+ KEYBOARD_KEY_6c=rotate_display # rotate
KEYBOARD_KEY_68=leftmeta # toolbox
KEYBOARD_KEY_6b=esc # escape
KEYBOARD_KEY_6d=right # right on d-pad
@@ -1083,7 +1083,7 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*:pvrThinkPad*X6*Tablet*:rvn*
# ThinkPad X41 Tablet
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnIBM*:pn18666TU:*
- KEYBOARD_KEY_6c=direction # rotate
+ KEYBOARD_KEY_6c=rotate_display # rotate
KEYBOARD_KEY_68=leftmeta # toolbox
KEYBOARD_KEY_6b=esc # escape
KEYBOARD_KEY_69=enter # enter on d-pad
@@ -1551,7 +1551,7 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMICRO-STAR*:pnU90/U100:*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMicro-Star*:pn*Prestige*:*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMicro-Star*:pn*Modern*:*
KEYBOARD_KEY_91=prog1 # Fn+F7 Creation Center, sometime F7
- KEYBOARD_KEY_f2=prog2 # Fn+F12 Screen rotation
+ KEYBOARD_KEY_f2=rotate_display # Fn+F12 Screen rotation
KEYBOARD_KEY_8d=prog3 # Fn+A Change True Color selections
KEYBOARD_KEY_8c=prog4 # Fn+Z Launch True Color
KEYBOARD_KEY_f5=fn_esc # Fn+esc Toggle the behaviour of Fn keys

View File

@ -0,0 +1,69 @@
From d6816303fd9e6a3e70b6939e263729feb72dfcb2 Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Tue, 10 Sep 2024 17:19:12 +0200
Subject: [PATCH] hwbd: use newer KEY_PICKUP_PHONE, KEY_HANGUP_PHONE,
KEY_SELECTIVE_SCREENSHOT, KEY_NOTIFICATION_CENTER keycodes where appropriate
According to kernel commit cd80ec795156346236e9b1cd9f5cbff5a9bbd212
these were added expressly for these thinkpads, hence use them now.
(cherry picked from commit ca5f27037b262143ab387ad9916edccfaad2c780)
Resolves: RHEL-49810
---
hwdb.d/60-keyboard.hwdb | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
index c9baa1ebf8..b4848fafd8 100644
--- a/hwdb.d/60-keyboard.hwdb
+++ b/hwdb.d/60-keyboard.hwdb
@@ -804,8 +804,8 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPZBook*:*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPZBookStudioG5*:*
KEYBOARD_KEY_64=calendar # Calendar icon (Fn + F12)
KEYBOARD_KEY_6d=displaytoggle # Display icon
- KEYBOARD_KEY_66=connect # Pickup phone button → connect → XF86Go
- KEYBOARD_KEY_65=cancel # Hangup phone button → cancel → Cancel
+ KEYBOARD_KEY_66=pickup_phone # Pickup phone button
+ KEYBOARD_KEY_65=hangup_phone # Hangup phone button
# HP ZBook 15 G2
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHPZBook15G2:*
@@ -869,8 +869,8 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPProBook11G2*:pvr*
evdev:atkbd:dmi:bvn*:bvr*:svnHP*:pnHP*mt44*Mobile*Thin*Client*:*
KEYBOARD_KEY_64=calendar # Calendar icon (Fn + F12)
KEYBOARD_KEY_6d=displaytoggle # Display icon
- KEYBOARD_KEY_66=connect # Pickup phone button → connect → XF86Go
- KEYBOARD_KEY_65=cancel # Hangup phone button → cancel → Cancel
+ KEYBOARD_KEY_66=pickup_phone # Pickup phone button
+ KEYBOARD_KEY_65=hangup_phone # Hangup phone button
KEYBOARD_KEY_81=f20 # Fn+F8; Microphone mute button, should be micmute
KEYBOARD_KEY_85=unknown # lid close; also reported via special evdev
KEYBOARD_KEY_f8=wlan # Wireless HW switch button
@@ -1013,11 +1013,11 @@ evdev:name:ThinkPad Extra Buttons:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*:*
KEYBOARD_KEY_17=prog1
KEYBOARD_KEY_1a=f20 # Microphone mute button; should be micmute
KEYBOARD_KEY_45=bookmarks
- KEYBOARD_KEY_46=prog2 # Fn + PrtSc, on Windows: Snipping tool
+ KEYBOARD_KEY_46=selective_screenshot # Fn + PrtSc, on Windows: Snipping tool
KEYBOARD_KEY_4a=prog3 # Fn + Right shift, on Windows: No idea
- KEYBOARD_KEY_4b=chat # Fn + F9, on Windows: Notifications panel key
- KEYBOARD_KEY_4c=connect # Fn + F10, on Windows: Answer (Teams) call
- KEYBOARD_KEY_4d=cancel # Fn + F11, on Windows: Hangup/decline (Teams) call
+ KEYBOARD_KEY_4b=notification_center # Fn + F9, on Windows: Notifications panel key
+ KEYBOARD_KEY_4c=pickup_phone # Fn + F10, on Windows: Answer (Teams) call
+ KEYBOARD_KEY_4d=hangup_phone # Fn + F11, on Windows: Hangup/decline (Teams) call
# ThinkPad Keyboard with TrackPoint
evdev:input:b0003v17EFp6009*
@@ -1203,8 +1203,8 @@ evdev:input:b0003v046Dp00*
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_c1031=pickup_phone # Pickup phone button
+ KEYBOARD_KEY_c1032=hangup_phone # Hangup phone button
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)

View File

@ -0,0 +1,53 @@
From 6c22ed6cc2a08c7b70e21cb219b3d831ebde414c Mon Sep 17 00:00:00 2001
From: Joshua Grisham <josh@joshuagrisham.com>
Date: Mon, 7 Oct 2024 03:41:30 +0200
Subject: [PATCH] hwdb: add SCAI SKU prefix for Samsung keyboard mapping
(#34648)
(cherry picked from commit db7903e4d40d7a7a0815e6c12d8e4c9aeaa56680)
Resolves: RHEL-49810
---
hwdb.d/60-keyboard.hwdb | 21 +++++++++++----------
1 file changed, 11 insertions(+), 10 deletions(-)
diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
index b4848fafd8..798529cd10 100644
--- a/hwdb.d/60-keyboard.hwdb
+++ b/hwdb.d/60-keyboard.hwdb
@@ -1844,11 +1844,6 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*550P*:*
KEYBOARD_KEY_a8=! # Fn Lock - Function lock on
KEYBOARD_KEY_a9=! # Fn Lock - Function lock off
-evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*550X*:*
- KEYBOARD_KEY_ce=!prog1 # Fn+F1 launch settings
- KEYBOARD_KEY_ae=!volumedown # Fn+F7 volume up
- KEYBOARD_KEY_b0=!volumeup # Fn+F8 volume down
-
# Series 7 / 9
evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*350V*:*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*670Z*:*
@@ -1912,12 +1907,18 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*SX20S*:*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700T*:*
KEYBOARD_KEY_ad=leftmeta
-# Galaxy Book (2021) NP750XDA-KD4SE
-evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn750XDA:pvr*
+# Notebook and Galaxy Book series (SKU Number: SCAI-*)
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:sku*SCAI*:*
KEYBOARD_KEY_81=!esc
- KEYBOARD_KEY_ce=!prog1 # Fn+F1 launch settings
- KEYBOARD_KEY_ae=!volumedown # Fn+F7 volume down
- KEYBOARD_KEY_b0=!volumeup # Fn+F8 volume up
+ KEYBOARD_KEY_ce=!prog1 # Fn+F1 launch settings
+ KEYBOARD_KEY_76=f21 # Fn+F5 Touchpad toggle
+ KEYBOARD_KEY_ae=!volumedown # Fn+F7 volume down
+ KEYBOARD_KEY_b0=!volumeup # Fn+F8 volume up
+ KEYBOARD_KEY_ac=unknown # Fn+F9 multi-level keyboard backlight toggle - handled by samsung-galaxybook
+ KEYBOARD_KEY_9f=unknown # Fn+F10 Camera and microphone toggle - handled by samsung-galaxybook
+ KEYBOARD_KEY_a8=!unknown # Fn+F12 Fn lock On - handled by hardware
+ KEYBOARD_KEY_a9=!unknown # Fn+F12 Fn lock Off - handled by hardware
+ KEYBOARD_KEY_8f=!battery # Notification that battery has met charge control end threshold
###########################################################

View File

@ -0,0 +1,519 @@
From cd96f11f946868f1339ef2d6572659f42fe084ac Mon Sep 17 00:00:00 2001
From: Yu Watanabe <watanabe.yu+github@gmail.com>
Date: Mon, 7 Oct 2024 12:47:57 +0900
Subject: [PATCH] tree-wide: drop doubled empty lines
(cherry picked from commit f769518c9ac6ca6bef063092ddc0e1718a67f540)
Resolves: RHEL-49810
---
hwdb.d/60-keyboard.hwdb | 2 --
src/analyze/analyze-plot.c | 1 -
src/basic/confidential-virt.c | 1 -
src/basic/filesystems.c | 1 -
src/basic/recurse-dir.c | 1 -
src/basic/xattr-util.h | 1 -
src/core/load-fragment.c | 1 -
src/core/socket.c | 1 -
src/cryptenroll/cryptenroll.c | 1 -
src/home/homectl.c | 1 -
src/home/homed-manager.c | 1 -
src/home/homework-fscrypt.c | 1 -
src/hostname/hostnamectl.c | 1 -
src/integritysetup/integrity-util.c | 1 -
src/integritysetup/integrity-util.h | 1 -
src/libsystemd-network/sd-dhcp-client.c | 1 -
src/libsystemd/sd-bus/bus-message.c | 1 -
src/libsystemd/sd-event/sd-event.c | 1 -
src/network/netdev/ipoib.c | 1 -
src/network/networkd-neighbor.c | 1 -
src/nss-systemd/userdb-glue.c | 1 -
src/partition/repart.c | 1 -
src/resolve/resolved-dns-answer.c | 1 -
src/resolve/resolved-dns-question.c | 2 --
src/resolve/resolved-dns-rr.c | 1 -
src/resolve/resolved-mdns.c | 1 -
src/resolve/test-dnssec.c | 1 -
src/shared/bpf-compat.h | 1 -
src/shared/bpf-program.c | 1 -
src/shared/creds-util.c | 1 -
src/shared/id128-print.c | 1 -
src/shared/userdb.c | 1 -
src/systemctl/systemctl-util.c | 1 -
src/sysupdate/sysupdate.c | 1 -
src/test/test-barrier.c | 1 -
src/test/test-bpf-devices.c | 1 -
src/test/test-execute.c | 1 -
src/test/test-install-root.c | 1 -
38 files changed, 40 deletions(-)
diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
index 798529cd10..4d5f6b4beb 100644
--- a/hwdb.d/60-keyboard.hwdb
+++ b/hwdb.d/60-keyboard.hwdb
@@ -1435,7 +1435,6 @@ evdev:input:b0003v046DpC309*
KEYBOARD_KEY_c01b6=images # My Pictures (F11)
KEYBOARD_KEY_c01b7=audio # My Music (F12)
-
###########################################################
# Maxdata
###########################################################
@@ -1920,7 +1919,6 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:sku*SCAI*:*
KEYBOARD_KEY_a9=!unknown # Fn+F12 Fn lock Off - handled by hardware
KEYBOARD_KEY_8f=!battery # Notification that battery has met charge control end threshold
-
###########################################################
# SONY
###########################################################
diff --git a/src/analyze/analyze-plot.c b/src/analyze/analyze-plot.c
index 8aca691b3d..151d715c06 100644
--- a/src/analyze/analyze-plot.c
+++ b/src/analyze/analyze-plot.c
@@ -28,7 +28,6 @@
svg("</text>\n"); \
} while (false)
-
typedef struct HostInfo {
char *hostname;
char *kernel_name;
diff --git a/src/basic/confidential-virt.c b/src/basic/confidential-virt.c
index 0929e0e745..30ecd20317 100644
--- a/src/basic/confidential-virt.c
+++ b/src/basic/confidential-virt.c
@@ -16,7 +16,6 @@
#include "string-table.h"
#include "utf8.h"
-
#if defined(__x86_64__)
static void cpuid(uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx) {
diff --git a/src/basic/filesystems.c b/src/basic/filesystems.c
index 0f71f8e07c..fd6007cd8b 100644
--- a/src/basic/filesystems.c
+++ b/src/basic/filesystems.c
@@ -12,7 +12,6 @@ const char *fs_type_to_string(statfs_f_type_t magic) {
return NULL;
}
-
int fs_type_from_string(const char *name, const statfs_f_type_t **ret) {
const struct FilesystemMagic *fs_magic;
diff --git a/src/basic/recurse-dir.c b/src/basic/recurse-dir.c
index d16ca98f67..8b9f3df7d5 100644
--- a/src/basic/recurse-dir.c
+++ b/src/basic/recurse-dir.c
@@ -420,7 +420,6 @@ int recurse_dir(
statx_mask != 0 ? &sx : NULL, /* only pass sx if user asked for it */
userdata);
-
if (r == RECURSE_DIR_LEAVE_DIRECTORY)
break;
if (!IN_SET(r, RECURSE_DIR_SKIP_ENTRY, RECURSE_DIR_CONTINUE))
diff --git a/src/basic/xattr-util.h b/src/basic/xattr-util.h
index 0eb745a7a3..5c4bc02bc8 100644
--- a/src/basic/xattr-util.h
+++ b/src/basic/xattr-util.h
@@ -25,7 +25,6 @@ static inline int fd_getcrtime(int fd, usec_t *ret) {
return fd_getcrtime_at(fd, NULL, 0, ret);
}
-
int listxattr_at_malloc(int fd, const char *path, int flags, char **ret);
static inline int listxattr_malloc(const char *path, char **ret) {
return listxattr_at_malloc(AT_FDCWD, path, AT_SYMLINK_FOLLOW, ret);
diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
index 0b5c8acee4..26f42a9cf6 100644
--- a/src/core/load-fragment.c
+++ b/src/core/load-fragment.c
@@ -170,7 +170,6 @@ int config_parse_cpu_shares(
assert(lvalue);
assert(rvalue);
-
log_syntax(unit, LOG_WARNING, filename, line, 0,
"Unit uses %s=; please use CPUWeight= instead. Support for %s= will be removed soon.",
lvalue, lvalue);
diff --git a/src/core/socket.c b/src/core/socket.c
index 2a8aa54f7f..65b07e70fd 100644
--- a/src/core/socket.c
+++ b/src/core/socket.c
@@ -641,7 +641,6 @@ static void socket_dump(Unit *u, FILE *f, const char *prefix) {
"%sFlushPending: %s\n",
prefix, yes_no(s->flush_pending));
-
if (s->priority >= 0)
fprintf(f,
"%sPriority: %i\n",
diff --git a/src/cryptenroll/cryptenroll.c b/src/cryptenroll/cryptenroll.c
index d2fffdad24..3f57b125ea 100644
--- a/src/cryptenroll/cryptenroll.c
+++ b/src/cryptenroll/cryptenroll.c
@@ -360,7 +360,6 @@ static int parse_argv(int argc, char *argv[]) {
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Multiple operations specified at once, refusing.");
-
r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_tpm2_device_key);
if (r < 0)
return r;
diff --git a/src/home/homectl.c b/src/home/homectl.c
index 87a1c6883f..8534953f2c 100644
--- a/src/home/homectl.c
+++ b/src/home/homectl.c
@@ -158,7 +158,6 @@ static int list_homes(int argc, char *argv[], void *userdata) {
if (r < 0)
return table_log_add_error(r);
-
r = table_add_cell(table, &cell, TABLE_STRING, state);
if (r < 0)
return table_log_add_error(r);
diff --git a/src/home/homed-manager.c b/src/home/homed-manager.c
index 61ef979049..cd8bee9145 100644
--- a/src/home/homed-manager.c
+++ b/src/home/homed-manager.c
@@ -1950,7 +1950,6 @@ static int manager_rebalance_calculate(Manager *m) {
1 * USEC_PER_MINUTE,
15 * USEC_PER_MINUTE);
-
log_debug("Rebalancing interval set to %s.", FORMAT_TIMESPAN(m->rebalance_interval_usec, USEC_PER_MSEC));
/* Let's suppress small resizes, growing/shrinking file systems isn't free after all */
diff --git a/src/home/homework-fscrypt.c b/src/home/homework-fscrypt.c
index 455a4c88fc..96cf901124 100644
--- a/src/home/homework-fscrypt.c
+++ b/src/home/homework-fscrypt.c
@@ -94,7 +94,6 @@ static int fscrypt_slot_try_one(
const uint8_t match_key_descriptor[static FS_KEY_DESCRIPTOR_SIZE],
void **ret_decrypted, size_t *ret_decrypted_size) {
-
_cleanup_(EVP_CIPHER_CTX_freep) EVP_CIPHER_CTX *context = NULL;
_cleanup_(erase_and_freep) void *decrypted = NULL;
uint8_t key_descriptor[FS_KEY_DESCRIPTOR_SIZE];
diff --git a/src/hostname/hostnamectl.c b/src/hostname/hostnamectl.c
index bb014973fb..924684685c 100644
--- a/src/hostname/hostnamectl.c
+++ b/src/hostname/hostnamectl.c
@@ -398,7 +398,6 @@ static int show_status(int argc, char **argv, void *userdata) {
return show_all_names(bus);
}
-
static int set_simple_string_internal(sd_bus *bus, sd_bus_error *error, const char *target, const char *method, const char *value) {
_cleanup_(sd_bus_error_free) sd_bus_error e = SD_BUS_ERROR_NULL;
int r;
diff --git a/src/integritysetup/integrity-util.c b/src/integritysetup/integrity-util.c
index c2d2f950de..410133b377 100644
--- a/src/integritysetup/integrity-util.c
+++ b/src/integritysetup/integrity-util.c
@@ -6,7 +6,6 @@
#include "path-util.h"
#include "percent-util.h"
-
static int supported_integrity_algorithm(char *user_supplied) {
if (!STR_IN_SET(user_supplied, "crc32", "crc32c", "sha1", "sha256", "hmac-sha256"))
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unsupported integrity algorithm (%s)", user_supplied);
diff --git a/src/integritysetup/integrity-util.h b/src/integritysetup/integrity-util.h
index b27975c7db..359d2556a4 100644
--- a/src/integritysetup/integrity-util.h
+++ b/src/integritysetup/integrity-util.h
@@ -6,7 +6,6 @@
#include "cryptsetup-util.h"
#include "time-util.h"
-
int parse_integrity_options(
const char *options,
uint32_t *ret_activate_flags,
diff --git a/src/libsystemd-network/sd-dhcp-client.c b/src/libsystemd-network/sd-dhcp-client.c
index a106f7f3b8..698427ec17 100644
--- a/src/libsystemd-network/sd-dhcp-client.c
+++ b/src/libsystemd-network/sd-dhcp-client.c
@@ -1003,7 +1003,6 @@ static int client_append_common_discover_request_options(sd_dhcp_client *client,
return r;
}
-
return 0;
}
diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c
index d9c52d64c0..213b276e33 100644
--- a/src/libsystemd/sd-bus/bus-message.c
+++ b/src/libsystemd/sd-bus/bus-message.c
@@ -4118,7 +4118,6 @@ static int message_parse_fields(sd_bus_message *m) {
if (m->reply_cookie != 0)
return -EBADMSG;
-
if (!streq(signature, "u"))
return -EBADMSG;
diff --git a/src/libsystemd/sd-event/sd-event.c b/src/libsystemd/sd-event/sd-event.c
index 165abfc314..f15115c57f 100644
--- a/src/libsystemd/sd-event/sd-event.c
+++ b/src/libsystemd/sd-event/sd-event.c
@@ -1553,7 +1553,6 @@ _public_ int sd_event_add_child_pidfd(
sd_event_child_handler_t callback,
void *userdata) {
-
_cleanup_(source_freep) sd_event_source *s = NULL;
pid_t pid;
int r;
diff --git a/src/network/netdev/ipoib.c b/src/network/netdev/ipoib.c
index 5dd9286d57..a584d788fc 100644
--- a/src/network/netdev/ipoib.c
+++ b/src/network/netdev/ipoib.c
@@ -149,7 +149,6 @@ int config_parse_ipoib_pkey(
return 0;
}
-
const NetDevVTable ipoib_vtable = {
.object_size = sizeof(IPoIB),
.sections = NETDEV_COMMON_SECTIONS "IPoIB\0",
diff --git a/src/network/networkd-neighbor.c b/src/network/networkd-neighbor.c
index f0f78b9c4a..94b18367ae 100644
--- a/src/network/networkd-neighbor.c
+++ b/src/network/networkd-neighbor.c
@@ -593,7 +593,6 @@ void network_drop_invalid_neighbors(Network *network) {
neighbor_free(neighbor);
}
-
int config_parse_neighbor_address(
const char *unit,
const char *filename,
diff --git a/src/nss-systemd/userdb-glue.c b/src/nss-systemd/userdb-glue.c
index c69667d660..3d49ad4755 100644
--- a/src/nss-systemd/userdb-glue.c
+++ b/src/nss-systemd/userdb-glue.c
@@ -346,7 +346,6 @@ enum nss_status userdb_getgrgid(
size_t buflen,
int *errnop) {
-
_cleanup_(group_record_unrefp) GroupRecord *g = NULL;
_cleanup_strv_free_ char **members = NULL;
bool from_nss;
diff --git a/src/partition/repart.c b/src/partition/repart.c
index 553d92e730..eeb31a6160 100644
--- a/src/partition/repart.c
+++ b/src/partition/repart.c
@@ -2669,7 +2669,6 @@ static int context_dump(Context *context, const char *node, bool late) {
return 0;
}
-
static bool context_changed(const Context *context) {
assert(context);
diff --git a/src/resolve/resolved-dns-answer.c b/src/resolve/resolved-dns-answer.c
index 3d42b0d000..d03b836d35 100644
--- a/src/resolve/resolved-dns-answer.c
+++ b/src/resolve/resolved-dns-answer.c
@@ -651,7 +651,6 @@ void dns_answer_order_by_scope(DnsAnswer *a, bool prefer_link_local) {
if (dns_resource_record_is_link_local_address(item->rr) != prefer_link_local)
*p++ = dns_answer_item_ref(item);
-
assert((size_t) (p - items) == n);
ordered_set_clear(a->items);
diff --git a/src/resolve/resolved-dns-question.c b/src/resolve/resolved-dns-question.c
index 8f5ebb4590..947cfa2795 100644
--- a/src/resolve/resolved-dns-question.c
+++ b/src/resolve/resolved-dns-question.c
@@ -72,7 +72,6 @@ int dns_question_add(DnsQuestion *q, DnsResourceKey *key, DnsQuestionFlags flags
if (!q)
return -ENOSPC;
-
DNS_QUESTION_FOREACH_ITEM(item, q) {
r = dns_resource_key_equal(item->key, key);
if (r < 0)
@@ -184,7 +183,6 @@ int dns_question_contains_key(DnsQuestion *q, const DnsResourceKey *k) {
if (!q)
return 0;
-
for (j = 0; j < q->n_keys; j++) {
r = dns_resource_key_equal(q->items[j].key, k);
if (r != 0)
diff --git a/src/resolve/resolved-dns-rr.c b/src/resolve/resolved-dns-rr.c
index d47cdbbd8e..ce40bb749e 100644
--- a/src/resolve/resolved-dns-rr.c
+++ b/src/resolve/resolved-dns-rr.c
@@ -2019,7 +2019,6 @@ int dns_resource_record_to_json(DnsResourceRecord *rr, JsonVariant **ret) {
JSON_BUILD_PAIR("algorithm", JSON_BUILD_UNSIGNED(rr->dnskey.algorithm)),
JSON_BUILD_PAIR("dnskey", JSON_BUILD_BASE64(rr->dnskey.key, rr->dnskey.key_size))));
-
case DNS_TYPE_RRSIG:
return json_build(ret,
JSON_BUILD_OBJECT(
diff --git a/src/resolve/resolved-mdns.c b/src/resolve/resolved-mdns.c
index 8d51017b5d..a8f4952a40 100644
--- a/src/resolve/resolved-mdns.c
+++ b/src/resolve/resolved-mdns.c
@@ -236,7 +236,6 @@ static bool sender_on_local_subnet(DnsScope *s, DnsPacket *p) {
return false;
}
-
static int mdns_scope_process_query(DnsScope *s, DnsPacket *p) {
_cleanup_(dns_answer_unrefp) DnsAnswer *full_answer = NULL;
_cleanup_(dns_packet_unrefp) DnsPacket *reply = NULL;
diff --git a/src/resolve/test-dnssec.c b/src/resolve/test-dnssec.c
index d325b533ea..6b0ab66ae7 100644
--- a/src/resolve/test-dnssec.c
+++ b/src/resolve/test-dnssec.c
@@ -387,7 +387,6 @@ TEST(dnssec_verify_rfc6605_example2) {
0xab, 0xf0, 0x8f, 0xe6, 0x95, 0x53, 0x60, 0x17, 0xa5, 0xbf, 0xa9, 0x32, 0x37, 0xee, 0x6e, 0x34,
};
-
_cleanup_(dns_resource_record_unrefp) DnsResourceRecord *dnskey = NULL, *ds = NULL, *a = NULL,
*rrsig = NULL;
_cleanup_(dns_answer_unrefp) DnsAnswer *answer = NULL;
diff --git a/src/shared/bpf-compat.h b/src/shared/bpf-compat.h
index 9ccb7d8205..20725e600b 100644
--- a/src/shared/bpf-compat.h
+++ b/src/shared/bpf-compat.h
@@ -15,7 +15,6 @@
* compile time is that we can then load either the old or the new symbols at runtime
* regardless of the version we were compiled with */
-
/* declare the struct for libbpf <= 0.6.0 -- it causes no harm on newer versions */
struct bpf_map_create_opts;
diff --git a/src/shared/bpf-program.c b/src/shared/bpf-program.c
index 31fa4448b0..7f8ab1de2c 100644
--- a/src/shared/bpf-program.c
+++ b/src/shared/bpf-program.c
@@ -138,7 +138,6 @@ int bpf_program_new_from_bpffs_path(const char *path, BPFProgram **ret) {
return 0;
}
-
int bpf_program_add_instructions(BPFProgram *p, const struct bpf_insn *instructions, size_t count) {
assert(p);
diff --git a/src/shared/creds-util.c b/src/shared/creds-util.c
index 027ad96640..3937cfd751 100644
--- a/src/shared/creds-util.c
+++ b/src/shared/creds-util.c
@@ -319,7 +319,6 @@ int get_credential_host_secret(CredentialSecretFlags flags, void **ret, size_t *
return log_debug_errno(errno,
"Failed to open %s/%s: %m", dirname, filename);
-
r = make_credential_host_secret(dfd, machine_id, flags, dirname, filename, ret, ret_size);
if (r == -EEXIST) {
log_debug_errno(r, "Credential secret %s/%s appeared while we were creating it, rereading.",
diff --git a/src/shared/id128-print.c b/src/shared/id128-print.c
index f232767adf..1a74b75573 100644
--- a/src/shared/id128-print.c
+++ b/src/shared/id128-print.c
@@ -47,7 +47,6 @@ int id128_pretty_print_sample(const char *name, sd_id128_t id) {
return 0;
}
-
int id128_pretty_print(sd_id128_t id, Id128PrettyPrintMode mode) {
assert(mode >= 0);
assert(mode < _ID128_PRETTY_PRINT_MODE_MAX);
diff --git a/src/shared/userdb.c b/src/shared/userdb.c
index de7eef687e..3f64ec8942 100644
--- a/src/shared/userdb.c
+++ b/src/shared/userdb.c
@@ -918,7 +918,6 @@ int groupdb_by_name(const char *name, UserDBFlags flags, GroupRecord **ret) {
return r;
}
-
if (!FLAGS_SET(flags, USERDB_EXCLUDE_NSS) && !(iterator && iterator->nss_covered)) {
r = userdb_iterator_block_nss_systemd(iterator);
if (r >= 0) {
diff --git a/src/systemctl/systemctl-util.c b/src/systemctl/systemctl-util.c
index b333850bec..1f8fda8ac1 100644
--- a/src/systemctl/systemctl-util.c
+++ b/src/systemctl/systemctl-util.c
@@ -658,7 +658,6 @@ int unit_exists(LookupPaths *lp, const char *unit) {
return !streq_ptr(info.load_state, "not-found") || !streq_ptr(info.active_state, "inactive");
}
-
int append_unit_dependencies(sd_bus *bus, char **names, char ***ret) {
_cleanup_strv_free_ char **with_deps = NULL;
diff --git a/src/sysupdate/sysupdate.c b/src/sysupdate/sysupdate.c
index 944ac41a41..9faa53dce7 100644
--- a/src/sysupdate/sysupdate.c
+++ b/src/sysupdate/sysupdate.c
@@ -499,7 +499,6 @@ static int context_show_version(Context *c, const char *version) {
FLAGS_SET(us->flags, UPDATE_INSTALLED|UPDATE_PROTECTED) ? ansi_highlight() : "", yes_no(FLAGS_SET(us->flags, UPDATE_INSTALLED|UPDATE_PROTECTED)), ansi_normal(),
us->flags & UPDATE_OBSOLETE ? ansi_highlight_red() : "", yes_no(us->flags & UPDATE_OBSOLETE), ansi_normal());
-
t = table_new("type", "path", "ptuuid", "ptflags", "mtime", "mode", "size", "tries-done", "tries-left", "noauto", "ro", "growfs", "sha256");
if (!t)
return log_oom();
diff --git a/src/test/test-barrier.c b/src/test/test-barrier.c
index 50ceb3a355..ba06c1710d 100644
--- a/src/test/test-barrier.c
+++ b/src/test/test-barrier.c
@@ -422,7 +422,6 @@ TEST_BARRIER(barrier_pending_exit,
}),
TEST_BARRIER_WAIT_SUCCESS(pid2));
-
static int intro(void) {
if (!slow_tests_enabled())
return log_tests_skipped("slow tests are disabled");
diff --git a/src/test/test-bpf-devices.c b/src/test/test-bpf-devices.c
index e175483734..2b90ffa7b8 100644
--- a/src/test/test-bpf-devices.c
+++ b/src/test/test-bpf-devices.c
@@ -248,7 +248,6 @@ static void test_policy_empty(bool add_mismatched, const char *cgroup_path, BPFP
assert_se(wrong == 0);
}
-
int main(int argc, char *argv[]) {
_cleanup_free_ char *cgroup = NULL, *parent = NULL;
_cleanup_(rmdir_and_freep) char *controller_path = NULL;
diff --git a/src/test/test-execute.c b/src/test/test-execute.c
index e6bd21b6b9..1f838e5c91 100644
--- a/src/test/test-execute.c
+++ b/src/test/test-execute.c
@@ -332,7 +332,6 @@ static void test_exec_execsearchpath_environment_files(Manager *m) {
(void) unlink("/tmp/test-exec_environmentfile.conf");
-
r = write_string_file("/tmp/test-exec_execsearchpath_environmentfile-set.conf", path_set, WRITE_STRING_FILE_CREATE);
assert_se(r == 0);
diff --git a/src/test/test-install-root.c b/src/test/test-install-root.c
index 2868ab07b2..1002818227 100644
--- a/src/test/test-install-root.c
+++ b/src/test/test-install-root.c
@@ -1271,5 +1271,4 @@ static int intro(void) {
return EXIT_SUCCESS;
}
-
DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);

View File

@ -0,0 +1,59 @@
From a52769d2eb64fb56655fad549621667d5a7c0f0d Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Wed, 9 Oct 2024 09:14:12 +0200
Subject: [PATCH] hwdb: move key 66/65 handling from specific to generic HP
laptop coverage
This takes the idea from #18595 and implements it based on our current
hwdb: the original PR suggested the keys 66/65 are a generic HP thing,
and not limited to specific laptops. The current specific laptop entries
do not contradict that claim.
Hence, let's move them from the specific sections matching some HP
laptops to the generic section matching all.
This uses the correct key names, which have long been fixed (which used
to be a problem our CI was tripped off by).
This is not tested, but I think fairly risk-less, and should allow us to
get rid of a really old PR.
Replaces: #18595
(cherry picked from commit 93b078c3dd40b10eed34a77d514b1db7493b17cf)
Resolves: RHEL-49810
---
hwdb.d/60-keyboard.hwdb | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
index 4d5f6b4beb..f1af5771f5 100644
--- a/hwdb.d/60-keyboard.hwdb
+++ b/hwdb.d/60-keyboard.hwdb
@@ -637,6 +637,8 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHaierComputer:pn7G-Series:*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*:*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pn*:*
+ KEYBOARD_KEY_66=pickup_phone # Pickup phone button
+ KEYBOARD_KEY_65=hangup_phone # Hangup phone button
KEYBOARD_KEY_81=fn_esc
KEYBOARD_KEY_89=battery # Fn+F8
KEYBOARD_KEY_8a=screenlock # Fn+F6
@@ -804,8 +806,6 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPZBook*:*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPZBookStudioG5*:*
KEYBOARD_KEY_64=calendar # Calendar icon (Fn + F12)
KEYBOARD_KEY_6d=displaytoggle # Display icon
- KEYBOARD_KEY_66=pickup_phone # Pickup phone button
- KEYBOARD_KEY_65=hangup_phone # Hangup phone button
# HP ZBook 15 G2
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHPZBook15G2:*
@@ -869,8 +869,6 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPProBook11G2*:pvr*
evdev:atkbd:dmi:bvn*:bvr*:svnHP*:pnHP*mt44*Mobile*Thin*Client*:*
KEYBOARD_KEY_64=calendar # Calendar icon (Fn + F12)
KEYBOARD_KEY_6d=displaytoggle # Display icon
- KEYBOARD_KEY_66=pickup_phone # Pickup phone button
- KEYBOARD_KEY_65=hangup_phone # Hangup phone button
KEYBOARD_KEY_81=f20 # Fn+F8; Microphone mute button, should be micmute
KEYBOARD_KEY_85=unknown # lid close; also reported via special evdev
KEYBOARD_KEY_f8=wlan # Wireless HW switch button

View File

@ -0,0 +1,26 @@
From 93e9aedaa75a3fff50f36c85147f53f75c3f289f Mon Sep 17 00:00:00 2001
From: Lucas Adriano Salles <83602841+luc-salles@users.noreply.github.com>
Date: Fri, 11 Oct 2024 12:58:14 -0400
Subject: [PATCH] hwdb: fix key toggle touchpad and programmable buttom for
Positivo V142N (#34725)
(cherry picked from commit c2f3cb2676f70823afe7f0fcff8720023dedfab4)
Resolves: RHEL-49810
---
hwdb.d/60-keyboard.hwdb | 2 ++
1 file changed, 2 insertions(+)
diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
index f1af5771f5..b8bd7f0fb5 100644
--- a/hwdb.d/60-keyboard.hwdb
+++ b/hwdb.d/60-keyboard.hwdb
@@ -2231,6 +2231,8 @@ evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:bvr*:svnPositivoTecnologiaSA:pn
evdev:name:SIPODEV USB Composite Device:dmi:bvn*:bvr*:svnPositivoTecnologiaSA:pn*:pvr*:rvn*:rnK142*
# Positivo Motion (N14ZP6, N14ZP7)
evdev:name:SIPODEV USB Composite Device:dmi:bvn*:bvr*:svnPositivoTecnologiaSA:pn*:pvr*:rvn*:rnN14ZP[67]*
+# Positivo Motion (V142N)
+evdev:name:SINO WEALTH USB KEYBOARD:dmi:bvn*:bvr*:svnPositivoInformaticaSA:pn*:pvr*:rvn*:rnV142N*
# Positivo Motion (N14EP6)
evdev:name:SIPODEV USB Composite Device:dmi:bvn*:bvr*:br*:svnPositivoTecnologiaSA:pn*:pvr*:rvn*:rnN14EP6*
# Positivo Motion (CW14Q01P) (CW14Q01P-V2)

View File

@ -0,0 +1,27 @@
From 07526e0d54567ac239d8f1fea6b1c82aa8194ae8 Mon Sep 17 00:00:00 2001
From: Sascha Mester <121475971+mettbroetchen43@users.noreply.github.com>
Date: Sat, 26 Oct 2024 17:27:29 +0200
Subject: [PATCH] hwdb: add Stream Deck Neo (#34903)
(cherry picked from commit f2eccaab343601ad687f17cd56201374fc603148)
Resolves: RHEL-49810
---
hwdb.d/70-av-production.hwdb | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/hwdb.d/70-av-production.hwdb b/hwdb.d/70-av-production.hwdb
index 91c757bcb1..f7cc349822 100644
--- a/hwdb.d/70-av-production.hwdb
+++ b/hwdb.d/70-av-production.hwdb
@@ -71,6 +71,10 @@ usb:v0FD9p006D*
usb:v0FD9p0080*
ID_AV_PRODUCTION_CONTROLLER=1
+# Stream Deck Neo
+usb:v0FD9p009A*
+ ID_AV_PRODUCTION_CONTROLLER=1
+
# Stream Deck Plus
usb:v0FD9p0084*
ID_AV_PRODUCTION_CONTROLLER=1

View File

@ -0,0 +1,490 @@
From f234d1e7f1f924eda9f108b8b561d2b59d58e336 Mon Sep 17 00:00:00 2001
From: Luca Boccassi <bluca@debian.org>
Date: Wed, 16 Aug 2023 02:08:08 +0100
Subject: [PATCH] hwdb: update autosuspend rules
ninja -C build update-hwdb-autosuspend
(cherry picked from commit 2f72e94984fc2994ab2705e384f92e15cc026264)
Resolves: RHEL-49810
---
tools/chromiumos/gen_autosuspend_rules.py | 303 +++++++++++++---------
1 file changed, 182 insertions(+), 121 deletions(-)
diff --git a/tools/chromiumos/gen_autosuspend_rules.py b/tools/chromiumos/gen_autosuspend_rules.py
index d6fbcdad7c..321eb9c895 100644
--- a/tools/chromiumos/gen_autosuspend_rules.py
+++ b/tools/chromiumos/gen_autosuspend_rules.py
@@ -20,131 +20,135 @@ USB_IDS = []
# Host Controllers and internal hubs
USB_IDS += [
# Linux Host Controller (UHCI) (most older x86 boards)
- '1d6b:0001',
+ "1d6b:0001",
# Linux Host Controller (EHCI) (all boards)
- '1d6b:0002',
+ "1d6b:0002",
# Linux Host Controller (XHCI) (most newer boards)
- '1d6b:0003',
+ "1d6b:0003",
# SMSC (Internal HSIC Hub) (most Exynos boards)
- '0424:3503',
+ "0424:3503",
# Intel (Rate Matching Hub) (all x86 boards)
- '05e3:0610',
+ "05e3:0610",
# Intel (Internal Hub?) (peppy, falco)
- '8087:0024',
+ "8087:0024",
# Genesys Logic (Internal Hub) (rambi)
- '8087:8000',
+ "8087:8000",
# Microchip (Composite HID + CDC) (kefka)
- '04d8:0b28',
+ "04d8:0b28",
]
# Webcams
USB_IDS += [
# Chicony (zgb)
- '04f2:b1d8',
+ "04f2:b1d8",
# Chicony (mario)
- '04f2:b262',
+ "04f2:b262",
# Chicony (stout)
- '04f2:b2fe',
+ "04f2:b2fe",
# Chicony (butterfly)
- '04f2:b35f',
+ "04f2:b35f",
# Chicony (rambi)
- '04f2:b443',
+ "04f2:b443",
# Chicony (glados)
- '04f2:b552',
+ "04f2:b552",
# LiteOn (spring)
- '058f:b001',
+ "058f:b001",
# Foxlink? (butterfly)
- '05c8:0351',
+ "05c8:0351",
# Foxlink? (butterfly)
- '05c8:0355',
+ "05c8:0355",
# Cheng Uei? (falco)
- '05c8:036e',
+ "05c8:036e",
# SuYin (parrot)
- '064e:d251',
+ "064e:d251",
# Realtek (falco)
- '0bda:571c',
+ "0bda:571c",
# IMC Networks (squawks)
- '13d3:5657',
+ "13d3:5657",
# Sunplus (parrot)
- '1bcf:2c17',
+ "1bcf:2c17",
# (C-13HDO10B39N) (alex)
- '2232:1013',
+ "2232:1013",
# (C-10HDP11538N) (lumpy)
- '2232:1017',
+ "2232:1017",
# (Namuga) (link)
- '2232:1033',
+ "2232:1033",
# (C-03FFM12339N) (daisy)
- '2232:1037',
+ "2232:1037",
# (C-10HDO13531N) (peach)
- '2232:1056',
+ "2232:1056",
# (NCM-G102) (samus)
- '2232:6001',
+ "2232:6001",
# Acer (stout)
- '5986:0299',
+ "5986:0299",
]
# Bluetooth Host Controller
USB_IDS += [
# Hon-hai (parrot)
- '0489:e04e',
+ "0489:e04e",
# Hon-hai (peppy)
- '0489:e056',
+ "0489:e056",
# Hon-hai (Kahlee)
- '0489:e09f',
+ "0489:e09f",
# QCA6174A (delan)
- '0489:e0a2',
+ "0489:e0a2",
# LiteOn (parrot)
- '04ca:3006',
+ "04ca:3006",
# LiteOn (aleena)
- '04ca:3016',
+ "04ca:3016",
# LiteOn (scarlet)
- '04ca:301a',
+ "04ca:301a",
# Realtek (blooglet)
- '0bda:b00c',
+ "0bda:b00c",
# Atheros (stumpy, stout)
- '0cf3:3004',
+ "0cf3:3004",
# Atheros (AR3011) (mario, alex, zgb)
- '0cf3:3005',
+ "0cf3:3005",
# Atheros (stumyp)
- '0cf3:3007',
+ "0cf3:3007",
# Atheros (butterfly)
- '0cf3:311e',
+ "0cf3:311e",
# Atheros (scarlet)
- '0cf3:e300',
+ "0cf3:e300",
# Marvell (rambi)
- '1286:2046',
+ "1286:2046",
# Marvell (gru)
- '1286:204e',
+ "1286:204e",
# Intel (rambi, samus)
- '8087:07dc',
+ "8087:07dc",
# Intel (strago, glados)
- '8087:0a2a',
+ "8087:0a2a",
# Intel (octopus)
- '8087:0aaa',
+ "8087:0aaa",
# Intel (hatch)
- '8087:0026',
+ "8087:0026",
# Intel (atlas)
- '8087:0025',
+ "8087:0025",
]
# WWAN (LTE)
USB_IDS += [
# Huawei (ME936) (kip)
- '12d1:15bb',
+ "12d1:15bb",
# Fibocom (L850-GL) (coral, nautilus, sarien)
- '2cb7:0007',
+ "2cb7:0007",
# Fibocom (NL668, NL652)
- '2cb7:01a0',
+ "2cb7:01a0",
+ # Fibocom (FM101-GL) (mbim)
+ "2cb7:01a2",
+ # Fibocom (FM101-GL) (adb)
+ "2cb7:01a4",
]
# Mass Storage
USB_IDS += [
# Genesys (SD card reader) (lumpy, link, peppy)
- '05e3:0727',
+ "05e3:0727",
# Realtek (SD card reader) (mario, alex)
- '0bda:0138',
+ "0bda:0138",
# Realtek (SD card reader) (helios)
- '0bda:0136',
+ "0bda:0136",
# Realtek (SD card reader) (falco)
'0bda:0177',
# Realtek (SD card reader) (pirrha)
@@ -154,33 +158,39 @@ USB_IDS += [
# Security Key
USB_IDS += [
# Yubico.com
- '1050:0211',
+ "1050:0211",
# Yubico.com (HID firmware)
- '1050:0200',
+ "1050:0200",
# Google Titan key
- '18d1:5026',
+ "18d1:5026",
]
# USB Audio devices
USB_IDS += [
# Google USB-C to 3.5mm Digital Headphone Jack Adapter 'Mir'
- '18d1:5025',
+ "18d1:5025",
# Google USB-C to 3.5mm Digital Headphone Jack Adapter 'Mir' (HID only)
- '18d1:5029',
+ "18d1:5029",
# Google USB-C to 3.5mm Digital Headphone Jack Adapter 2018 'Condor'
- '18d1:5034',
+ "18d1:5034",
# Google Pixel USB-C Earbuds 'Blackbird'
- '18d1:5033',
+ "18d1:5033",
# Libratone Q Adapt In-Ear USB-C Earphones, Made for Google
- '03eb:2433',
+ "03eb:2433",
# Moshi USB-C to 3.5 mm Adapter/Charger, Made for Google
- '282b:48f0',
+ "282b:48f0",
# Moshi USB-C to 3.5 mm Adapter/Charger, Made for Google (HID only)
- '282b:0026',
+ "282b:0026",
# AiAiAi TMA-2 C60 Cable, Made for Google
- '0572:1a08',
+ "0572:1a08",
# Apple USB-C to 3.5mm Headphone Jack Adapter
- '05ac:110a',
+ "05ac:110a",
+]
+
+# RGB Keyboard
+USB_IDS += [
+ # Google Prism
+ "18d1:5022",
]
# List of PCI devices (vendorid:deviceid) for which it is safe to enable
@@ -190,102 +200,149 @@ PCI_IDS = []
# Intel
PCI_IDS += [
# Host bridge
- '8086:590c',
+ "8086:590c",
# i915
- '8086:591e',
+ "8086:591e",
# proc_thermal
- '8086:1903',
+ "8086:1903",
# SPT PCH xHCI controller
- '8086:9d2f',
+ "8086:9d2f",
# CNP PCH xHCI controller
- '8086:9ded',
+ "8086:9ded",
# intel_pmc_core
- '8086:9d21',
+ "8086:9d21",
# i801_smbus
- '8086:9d23',
+ "8086:9d23",
# iwlwifi
- '8086:095a',
+ "8086:095a",
# GMM
- '8086:1911',
+ "8086:1911",
# Thermal
- '8086:9d31',
+ "8086:9d31",
# MME
- '8086:9d3a',
+ "8086:9d3a",
# CrOS EC
- '8086:9d4b',
+ "8086:9d4b",
# PCH SPI
- '8086:9d24',
+ "8086:9d24",
# SATA
- '8086:02d3',
+ "8086:02d3",
# RAM memory
- '8086:02ef',
+ "8086:02ef",
# ISA bridge
- '8086:0284',
+ "8086:0284",
# Communication controller
- '8086:02e0',
+ "8086:02e0",
# Network controller
- '8086:02f0',
+ "8086:02f0",
# Serial bus controller
- '8086:02a4',
+ "8086:02a4",
# USB controller
- '8086:02ed',
+ "8086:02ed",
+ # JSL xHCI controller
+ "8086:4ded",
# Volteer xHCI controller
- '8086:a0ed',
+ "8086:a0ed",
+ # Brya xHCI controller
+ "8086:51ed",
+ # ADL-N PCH xHCI controller
+ "8086:54ed",
# Graphics
- '8086:9b41',
+ "8086:9b41",
# DSP
- '8086:02f9',
+ "8086:02f9",
# Host bridge
- '8086:9b61',
+ "8086:9b61",
# Host bridge
- '8086:9b71',
+ "8086:9b71",
# PCI Bridge
- '8086:02b0',
+ "8086:02b0",
# i915 (atlas)
- '8086:591c',
+ "8086:591c",
# iwlwifi (atlas)
- '8086:2526',
+ "8086:2526",
# i915 (kefka)
- '8086:22b1',
+ "8086:22b1",
# proc_thermal (kefka)
- '8086:22dc',
+ "8086:22dc",
# xchi_hdc (kefka)
- '8086:22b5',
+ "8086:22b5",
# snd_hda (kefka)
- '8086:2284',
+ "8086:2284",
# pcieport (kefka)
- '8086:22c8',
- '8086:22cc',
+ "8086:22c8",
+ "8086:22cc",
# lpc_ich (kefka)
- '8086:229c',
+ "8086:229c",
# iosf_mbi_pci (kefka)
- '8086:2280',
+ "8086:2280",
+ # Host bridge (nami)
+ "8086:5904",
+ "8086:5914",
+ # Graphics (nami)
+ "8086:5906",
+ "8086:5917",
+ # ISA bridge (nami)
+ "8086:9d4e",
+ # wifi 7265 (nami)
+ "8086:095b",
+ # Graphics (brya)
+ "8086:46a8",
+ # Core 12G GNA (brya)
+ "8086:464f",
+ # PCH Shared SRAM (brya)
+ "8086:51ef",
+ # PCH eSPI (brya)
+ "8086:5182",
+ "8086:4601",
+ # Core 12G DTT (brya)
+ "8086:461d",
+ # Wifi (Brya)
+ "8086:51f0",
+ # PCH SPI (brya)
+ "8086:51a4",
]
# Samsung
PCI_IDS += [
# NVMe KUS030205M-B001
- '144d:a806',
+ "144d:a806",
# NVMe MZVLB256HAHQ
- '144d:a808',
+ "144d:a808",
+ # NVMe MZ9LQ256HBJD-00BH1 (brya)
+ "144d:a809",
]
# Lite-on
PCI_IDS += [
# 3C07110288
- '14a4:9100',
+ "14a4:9100",
]
# Seagate
PCI_IDS += [
# ZP256CM30011
- '7089:5012',
+ "7089:5012",
]
# Kingston
PCI_IDS += [
# RBUSNS8154P3128GJ3
- '2646:5008',
+ "2646:5008",
+]
+
+# Genesys Logic
+PCI_IDS += [
+ # SD Host Controller (brya)
+ "17a0:9755",
+]
+
+# Phison
+PCI_IDS += [
+ # E13 NVMe Controller (redrix)
+ '1987:5013',
+ # E18 PCIe4 NVMe Controller (vell)
+ '1987:5018',
]
# Do not edit below this line. #################################################
@@ -322,20 +379,24 @@ LABEL="autosuspend_end"
def main():
- pci_rules = ''
- for dev_ids in PCI_IDS:
- vendor, device = dev_ids.split(':')
- pci_rules += ('ATTR{vendor}=="0x%s", ATTR{device}=="0x%s", '
- 'GOTO="autosuspend_enable"\n' % (vendor, device))
+ pci_rules = ""
+ for dev_ids in PCI_IDS:
+ vendor, device = dev_ids.split(":")
+ pci_rules += (
+ 'ATTR{vendor}=="0x%s", ATTR{device}=="0x%s", '
+ 'GOTO="autosuspend_enable"\n' % (vendor, device)
+ )
- usb_rules = ''
- for dev_ids in USB_IDS:
- vid, pid = dev_ids.split(':')
- usb_rules += ('ATTR{idVendor}=="%s", ATTR{idProduct}=="%s", '
- 'GOTO="autosuspend_enable"\n' % (vid, pid))
+ usb_rules = ""
+ for dev_ids in USB_IDS:
+ vid, pid = dev_ids.split(":")
+ usb_rules += (
+ 'ATTR{idVendor}=="%s", ATTR{idProduct}=="%s", '
+ 'GOTO="autosuspend_enable"\n' % (vid, pid)
+ )
- print(UDEV_RULE % {'pci_rules': pci_rules, 'usb_rules': usb_rules})
+ print(UDEV_RULE % {"pci_rules": pci_rules, "usb_rules": usb_rules})
-if __name__ == '__main__':
- main()
+if __name__ == "__main__":
+ main()

View File

@ -0,0 +1,132 @@
From c32906f21385498337c1eed0421ef4a3ac2cd746 Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Fri, 1 Nov 2024 10:14:09 +0100
Subject: [PATCH] hwdb: import newest autosuspend rules from chromeos
(cherry picked from commit 2e4432507b68e0fe6c89f1900f6f4af0087c6fd5)
Resolves: RHEL-49810
---
hwdb.d/60-autosuspend-fingerprint-reader.hwdb | 14 +++++++++++++-
tools/chromiumos/gen_autosuspend_rules.py | 12 ++++++++++--
2 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/hwdb.d/60-autosuspend-fingerprint-reader.hwdb b/hwdb.d/60-autosuspend-fingerprint-reader.hwdb
index ea656123f9..813343d08d 100644
--- a/hwdb.d/60-autosuspend-fingerprint-reader.hwdb
+++ b/hwdb.d/60-autosuspend-fingerprint-reader.hwdb
@@ -83,6 +83,9 @@ usb:v1C7Ap0571*
# Supported by libfprint driver egismoc
usb:v1C7Ap0582*
+usb:v1C7Ap0583*
+usb:v1C7Ap0586*
+usb:v1C7Ap0587*
usb:v1C7Ap05A1*
ID_AUTOSUSPEND=1
ID_PERSIST=0
@@ -160,6 +163,7 @@ usb:v04F3p0C88*
usb:v04F3p0C8C*
usb:v04F3p0C8D*
usb:v04F3p0C99*
+usb:v04F3p0C9F*
ID_AUTOSUSPEND=1
ID_PERSIST=0
@@ -181,6 +185,8 @@ usb:v10A5pA305*
usb:v10A5pDA04*
usb:v10A5pD805*
usb:v10A5pD205*
+usb:v10A5p9524*
+usb:v10A5p9544*
ID_AUTOSUSPEND=1
ID_PERSIST=0
@@ -204,6 +210,7 @@ usb:v27C6p63AC*
usb:v27C6p63BC*
usb:v27C6p63CC*
usb:v27C6p6496*
+usb:v27C6p650A*
usb:v27C6p650C*
usb:v27C6p6582*
usb:v27C6p6584*
@@ -213,6 +220,8 @@ usb:v27C6p6594*
usb:v27C6p659A*
usb:v27C6p659C*
usb:v27C6p6A94*
+usb:v27C6p6512*
+usb:v27C6p689A*
ID_AUTOSUSPEND=1
ID_PERSIST=0
@@ -223,6 +232,7 @@ usb:v298Dp1010*
# Supported by libfprint driver realtek
usb:v0BDAp5813*
+usb:v0BDAp5816*
ID_AUTOSUSPEND=1
ID_PERSIST=0
@@ -232,6 +242,7 @@ usb:v06CBp00DF*
usb:v06CBp00F9*
usb:v06CBp00FC*
usb:v06CBp00C2*
+usb:v06CBp00C4*
usb:v06CBp0100*
usb:v06CBp00F0*
usb:v06CBp0103*
@@ -244,6 +255,8 @@ usb:v06CBp015F*
usb:v06CBp0104*
usb:v06CBp0173*
usb:v06CBp0106*
+usb:v06CBp019D*
+usb:v06CBp00C6*
ID_AUTOSUSPEND=1
ID_PERSIST=0
@@ -340,7 +353,6 @@ usb:v06CBp00A8*
usb:v06CBp00B7*
usb:v06CBp00BB*
usb:v06CBp00BE*
-usb:v06CBp00C4*
usb:v06CBp00CB*
usb:v06CBp00C9*
usb:v06CBp00D8*
diff --git a/tools/chromiumos/gen_autosuspend_rules.py b/tools/chromiumos/gen_autosuspend_rules.py
index 321eb9c895..dfb27c4823 100644
--- a/tools/chromiumos/gen_autosuspend_rules.py
+++ b/tools/chromiumos/gen_autosuspend_rules.py
@@ -131,6 +131,8 @@ USB_IDS += [
USB_IDS += [
# Huawei (ME936) (kip)
"12d1:15bb",
+ # Quectel (EM060)
+ "2c7c:0128",
# Fibocom (L850-GL) (coral, nautilus, sarien)
"2cb7:0007",
# Fibocom (NL668, NL652)
@@ -139,6 +141,12 @@ USB_IDS += [
"2cb7:01a2",
# Fibocom (FM101-GL) (adb)
"2cb7:01a4",
+ # Rolling Wireless (RW101)
+ "33f8:01a2",
+ # Rolling Wireless (RW135)
+ "33f8:0115",
+ # NetPrisma (LCUK54)
+ "3731:0100",
]
# Mass Storage
@@ -340,9 +348,9 @@ PCI_IDS += [
# Phison
PCI_IDS += [
# E13 NVMe Controller (redrix)
- '1987:5013',
+ "1987:5013",
# E18 PCIe4 NVMe Controller (vell)
- '1987:5018',
+ "1987:5018",
]
# Do not edit below this line. #################################################

328589
SOURCES/1070-update-hwdb.patch Normal file

File diff suppressed because it is too large Load Diff

282994
SOURCES/1071-Update-hwdb.patch Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,29 @@
From 002ab63145afe73d0231e599c1f8afc011193f96 Mon Sep 17 00:00:00 2001
From: Vursc <vursc@vursc.org>
Date: Thu, 7 Nov 2024 15:13:56 +0000
Subject: [PATCH] hwdb: fix broken numpad paren keys on Lenovo Thinkbook 16 G6+
2024
(cherry picked from commit eb03dffd9794ac7ebfa1995ca9fdf72987b05535)
Resolves: RHEL-49810
---
hwdb.d/60-keyboard.hwdb | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
index b8bd7f0fb5..236a145dc5 100644
--- a/hwdb.d/60-keyboard.hwdb
+++ b/hwdb.d/60-keyboard.hwdb
@@ -1149,6 +1149,11 @@ evdev:name:SIPODEV Lenovo HID Device:dmi:*:svnLENOVO:*:pvrLenovoideapadD330-10IG
evdev:name:SIPODEV Lenovo HID Device Consumer Control:dmi:*:svnLENOVO:*:pvrLenovoideapadD330-10IGM:*
KEYBOARD_KEY_c00ff=fn_esc # Fn+Tab (FnLk toggle)
+# Lenovo Thinkbook 16 G6+ 2024
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO:pn21LG:pvr*
+ KEYBOARD_KEY_0a=!9
+ KEYBOARD_KEY_0b=!0
+
###########################################################
# LG
###########################################################

247208
SOURCES/1073-Update-hwdb.patch Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,32 @@
From c00d6d3c324d52798a163e00d84824af5515b9ed Mon Sep 17 00:00:00 2001
From: Xuanjun Wen <41050170+wenxuanjun@users.noreply.github.com>
Date: Wed, 20 Nov 2024 01:20:01 +0800
Subject: [PATCH] hwdb: add new Cube Mix Plus (i18D) rotation info
Added rotation information for the new version of Cube Mix Plus (i18D).
(cherry picked from commit a526b9ddfc03a290f20a65c0a73792e73029f1b8)
Resolves: RHEL-49810
---
hwdb.d/60-sensor.hwdb | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb
index 2adc5abc1f..28d23da631 100644
--- a/hwdb.d/60-sensor.hwdb
+++ b/hwdb.d/60-sensor.hwdb
@@ -376,11 +376,12 @@ sensor:modalias:acpi:KIOX000A*:dmi:*:svncube:pni1-TF:*
sensor:modalias:acpi:SMO8500*:dmi:*:svncube:pni7:*
ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
-# Cube i7 Stylus, i7 Stylus I8L Model, i7 Book (i16) and Mix Plus (i18B)
+# Cube i7 Stylus, i7 Stylus I8L Model, i7 Book (i16) and Mix Plus (i18B/i18D)
sensor:modalias:acpi:KIOX000A*:dmi:*:svnCube:pni7Stylus:*
sensor:modalias:acpi:KIOX000A*:dmi:*:svnCube:pni8-L:*
sensor:modalias:acpi:KIOX000A*:dmi:*:svnCube:pni16:*
sensor:modalias:acpi:KIOX000A*:dmi:*:svnCube:pni18B:*
+sensor:modalias:acpi:KIOX000A*:dmi:*:svnALLDOCUBE:pni18D:*
ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, 1
# Cube iWork 10 Flagship

View File

@ -0,0 +1,31 @@
From 6f384e12732a835a84a609f5e526d2cf9e808ea1 Mon Sep 17 00:00:00 2001
From: Tobias Zimmermann <tobias@the-resc.com>
Date: Wed, 20 Nov 2024 23:16:21 +0100
Subject: [PATCH] hwdb: Add quirk for Logitech MX Keys for Mac
The KEY_102ND and KEY_GRAVE keys are switched on the
Logitech MX Keys for Mac, so switch them back
(cherry picked from commit f70e5620b6ac319beac1d5ce26331bdc48d25daa)
Resolves: RHEL-49810
---
hwdb.d/60-keyboard.hwdb | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
index 236a145dc5..6cc059123a 100644
--- a/hwdb.d/60-keyboard.hwdb
+++ b/hwdb.d/60-keyboard.hwdb
@@ -1438,6 +1438,11 @@ evdev:input:b0003v046DpC309*
KEYBOARD_KEY_c01b6=images # My Pictures (F11)
KEYBOARD_KEY_c01b7=audio # My Music (F12)
+# Logitech MX Keys for Mac
+evdev:input:b0003v046Dp4092*
+ KEYBOARD_KEY_70035=102nd # '<' key
+ KEYBOARD_KEY_70064=grave # '^' key
+
###########################################################
# Maxdata
###########################################################

View File

@ -0,0 +1,34 @@
From edd6e10a4510c9d715359f539afbf63240cf40d0 Mon Sep 17 00:00:00 2001
From: Marco Tomaschett <marco@entekadesign.com>
Date: Fri, 22 Nov 2024 13:08:06 -0500
Subject: [PATCH] hwdb: add support for PineTab2 to 60-sensor.hwdb (#35304)
Add accelerometer support for PineTab2
(cherry picked from commit bc4a027f9cb66d56fd1305f41bed25751305fc27)
Resolves: RHEL-49810
---
hwdb.d/60-sensor.hwdb | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb
index 28d23da631..3c4bb81671 100644
--- a/hwdb.d/60-sensor.hwdb
+++ b/hwdb.d/60-sensor.hwdb
@@ -953,6 +953,15 @@ sensor:modalias:acpi:MXC6655*:dmi:*:svnDefaultstring*:pnP612F:*
sensor:modalias:acpi:SMO8500*:dmi:*:svnPEAQ:pnPEAQPMMC1010MD99187:*
ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, 1
+#########################################
+# Pine64
+#########################################
+
+# PineTab2
+
+sensor:modalias:of:NaccelerometerT_null_Csilan,sc7a20:*
+ ACCEL_MOUNT_MATRIX=0, 0, -1; 1, 0, 0; 0, -1, 0
+
#########################################
# Pipo
#########################################

View File

@ -0,0 +1,31 @@
From 20d56d6bf568611f89569a4a1153aee051c1ce03 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=99=BD=E4=B8=80=E7=99=BE?=
<72658127+bai-yi-bai@users.noreply.github.com>
Date: Sun, 24 Nov 2024 15:30:33 +0800
Subject: [PATCH] hwdb: add entry for Chuwi Hi10 X1 (#35331)
https://www.chuwi.com/product/items/chuwi-hi10-x1.html
Rotated -90 degrees in the Z axis.
(cherry picked from commit 8c18851e7e4563c26ad2b91b4bc3423d2d73b120)
Resolves: RHEL-49810
---
hwdb.d/60-sensor.hwdb | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb
index 3c4bb81671..02f4041475 100644
--- a/hwdb.d/60-sensor.hwdb
+++ b/hwdb.d/60-sensor.hwdb
@@ -295,6 +295,10 @@ sensor:modalias:acpi:MXC6655*:dmi:*:svnCHUWIInnovationAndTechnology*:pnHi10X:*
sensor:modalias:acpi:KIOX000A*:dmi:*:svnCHUWIInnovationAndTechnology*:pnHi10X:*
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
+# Chuwi Hi10 X1
+sensor:modalias:acpi:NSA2513*:dmi:*:svnCHUWIInnovationAndTechnology*:pnHi10X1:*
+ ACCEL_MOUNT_MATRIX=0, 1, 0; -1, 0, 0; 0, 0, 1
+
# Chuwi Hi10 Go
sensor:modalias:acpi:MXC6655*:dmi:*:svnCHUWIINNOVATIONLIMITED:pnHi10Go:*
ACCEL_MOUNT_MATRIX=-1, 0, 0; 0,-1, 0; 0, 0, 1

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,116 @@
From 662acac8d35ae2939b999a96136629e6b2bb0ebf Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Fri, 29 Nov 2024 22:20:29 +0100
Subject: [PATCH] hwdb: Make 3D mice work out-of-the-box
According to https://en.wikipedia.org/wiki/3Dconnexion, 3D mice are:
human interface devices for manipulating and navigating
computer-generated 3D imagery. These devices are often referred to as
3D motion controllers, 3D navigation devices, 6DOF devices (six
degrees of freedom) or a 3D mouse.
Applications that want to support 3D mice on Linux are expected to
either use spacenavd and its library, or consume the HID output
directly.
This patch makes it possible for a number of applications that use 3D
mice directly to work out of the box, such as PrusaSlicer and its
derivatives.
(cherry picked from commit e1c681919243daaca35053826686009260f34eaf)
Resolves: RHEL-49810
---
hwdb.d/70-mouse.hwdb | 38 +++++++++++++++++++++++++++++++++++++
hwdb.d/parse_hwdb.py | 1 +
rules.d/70-uaccess.rules.in | 4 ++++
3 files changed, 43 insertions(+)
diff --git a/hwdb.d/70-mouse.hwdb b/hwdb.d/70-mouse.hwdb
index fcd9acd2b4..6e2a588a5d 100644
--- a/hwdb.d/70-mouse.hwdb
+++ b/hwdb.d/70-mouse.hwdb
@@ -41,6 +41,7 @@
# udevadm info /dev/input/eventXX.
#
# Allowed properties are:
+# ID_INPUT_3D_MOUSE
# ID_INPUT_TRACKBALL
# MOUSE_DPI
# MOUSE_WHEEL_CLICK_ANGLE
@@ -49,6 +50,15 @@
# MOUSE_WHEEL_CLICK_COUNT_HORIZONTAL
#
#########################################
+# ID_INPUT_3D_MOUSE #
+#########################################
+#
+# Specified if the device is a 3D mouse[1]. This gives access to the
+# hidraw device node to applications that consume its events directly.
+#
+# [1]: See https://en.wikipedia.org/wiki/3Dconnexion for definition
+#
+#########################################
# ID_INPUT_TRACKBALL #
#########################################
#
@@ -143,6 +153,34 @@ mouse:*:name:*trackball*:*
mouse:*:name:*TrackBall*:*
ID_INPUT_TRACKBALL=1
+##########################################
+# 3D Connexion
+##########################################
+# From https://github.com/FreeSpacenav/spacenavd/blob/39856625a6de1e8c4b57c5938e1bf29d13cf1a9f/src/dev.c#L63
+mouse:usb:v046dpc603:name:*
+mouse:usb:v046dpc605:name:*
+mouse:usb:v046dpc606:name:*
+mouse:usb:v046dpc621:name:*
+mouse:usb:v046dpc623:name:*
+mouse:usb:v046dpc625:name:*
+mouse:usb:v046dpc626:name:*
+mouse:usb:v046dpc627:name:*
+mouse:usb:v046dpc628:name:*
+mouse:usb:v046dpc629:name:*
+mouse:usb:v046dpc62b:name:*
+mouse:usb:v046dpc640:name:*
+mouse:usb:v256fpc62e:name:*
+mouse:usb:v256fpc62f:name:*
+mouse:usb:v256fpc631:name:*
+mouse:usb:v256fpc632:name:*
+mouse:usb:v256fpc633:name:*
+mouse:usb:v256fpc635:name:*
+mouse:usb:v256fpc636:name:*
+ ID_INPUT_3D_MOUSE=1
+
+mouse:bluetooth:v256fpc63a:name:*
+ ID_INPUT_3D_MOUSE=1
+
##########################################
# Apple
##########################################
diff --git a/hwdb.d/parse_hwdb.py b/hwdb.d/parse_hwdb.py
index b2580c8dcf..b4de194ba4 100755
--- a/hwdb.d/parse_hwdb.py
+++ b/hwdb.d/parse_hwdb.py
@@ -155,6 +155,7 @@ def property_grammar():
('MOUSE_WHEEL_CLICK_ANGLE_HORIZONTAL', INTEGER),
('MOUSE_WHEEL_CLICK_COUNT', INTEGER),
('MOUSE_WHEEL_CLICK_COUNT_HORIZONTAL', INTEGER),
+ ('ID_INPUT_3D_MOUSE', Or((Literal('0'), Literal('1')))),
('ID_AUTOSUSPEND', Or((Literal('0'), Literal('1')))),
('ID_AUTOSUSPEND_DELAY_MS', INTEGER),
('ID_AV_PRODUCTION_CONTROLLER', Or((Literal('0'), Literal('1')))),
diff --git a/rules.d/70-uaccess.rules.in b/rules.d/70-uaccess.rules.in
index 796e384e57..58cf32826a 100644
--- a/rules.d/70-uaccess.rules.in
+++ b/rules.d/70-uaccess.rules.in
@@ -101,4 +101,8 @@ SUBSYSTEM=="usb", ENV{ID_AV_PRODUCTION_CONTROLLER}=="1", TAG+="uaccess"
SUBSYSTEM=="usb", ENV{ID_HARDWARE_WALLET}=="1", TAG+="uaccess"
SUBSYSTEM=="hidraw", ENV{ID_HARDWARE_WALLET}=="1", TAG+="uaccess"
+# 3D mice
+# As defined in https://en.wikipedia.org/wiki/3Dconnexion
+SUBSYSTEM=="hidraw", ENV{ID_INPUT_3D_MOUSE}=="1", TAG+="uaccess"
+
LABEL="uaccess_end"

View File

@ -0,0 +1,35 @@
From 47d16a8a1b53b0bfd8120006b923a61c231d5988 Mon Sep 17 00:00:00 2001
From: Greg Heartsfield <scsibug@imap.cc>
Date: Mon, 9 Dec 2024 10:32:15 -0600
Subject: [PATCH] hwdb: Add Chuwi MiniBook X trackpad fuzz
This adds X/Y fuzz for the Chuwi MiniBook X trackpad. There is
significant trackpad jitter without this setting applied.
(cherry picked from commit 86b236fe99fa942df39aea5f0a6bde84c6aea7aa)
Resolves: RHEL-49810
---
hwdb.d/60-evdev.hwdb | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/hwdb.d/60-evdev.hwdb b/hwdb.d/60-evdev.hwdb
index 372ae682ed..65170ae1ce 100644
--- a/hwdb.d/60-evdev.hwdb
+++ b/hwdb.d/60-evdev.hwdb
@@ -251,6 +251,15 @@ evdev:input:b0003v0ED1p7821*
EVDEV_ABS_00=::2271
EVDEV_ABS_01=::5080
+#########################################
+# Chuwi
+#########################################
+
+# Chuwi MiniBook X
+evdev:name:XXXX0000:05 0911:5288 Touchpad:dmi:*:pnMiniBookX:*
+ EVDEV_ABS_00=:::8
+ EVDEV_ABS_01=:::8
+
#########################################
# Dell
#########################################

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,25 @@
From 885105292cd1a80cce8816192efc50bd7afcaa3f Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Wed, 4 Sep 2024 17:13:00 +0200
Subject: [PATCH] hwdb: disable inclusion of the PCI domain in MANA network
interface naming
(cherry picked from commit 9311c28b3407fbad69d0b747129b03ce1c7a6309)
Resolves: RHEL-49810
---
hwdb.d/20-net-ifname.hwdb | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/hwdb.d/20-net-ifname.hwdb b/hwdb.d/20-net-ifname.hwdb
index 2408dc172f..ba136860a8 100644
--- a/hwdb.d/20-net-ifname.hwdb
+++ b/hwdb.d/20-net-ifname.hwdb
@@ -3,3 +3,7 @@
# Dell iDRAC Virtual USB NIC
usb:v413CpA102*
ID_NET_NAME_FROM_DATABASE=idrac
+
+# Disable inclusion of PCI domain in interface names on Azure MANA
+pci:v00001414d000000BA*
+ ID_NET_NAME_INCLUDE_DOMAIN=0

View File

@ -0,0 +1,48 @@
From da7e7e17b884f14e1720c62dd1040e0e0a3310fb Mon Sep 17 00:00:00 2001
From: Soumyadeep Ghosh <soumyadeepghosh2004@zohomail.in>
Date: Thu, 12 Dec 2024 18:50:33 +0530
Subject: [PATCH] hwdb: move down touchpad toggle section from generic to
product specific
adding `KEYBOARD_KEY_76` in generic section is causing a regression
in MSI GF63. Moving this down fixes.
This commit also adds a probable KEY Code for MSI GF63 touchpad toggling
(cherry picked from commit 1d771e69b27143a73cf8cc8a4350510ef9aa9f7a)
Resolves: RHEL-49810
---
hwdb.d/60-keyboard.hwdb | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
index 6cc059123a..dba1274865 100644
--- a/hwdb.d/60-keyboard.hwdb
+++ b/hwdb.d/60-keyboard.hwdb
@@ -1512,7 +1512,6 @@ evdev:input:b0003v1532p0200*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMICRO-STAR*:pn*:*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMicro-Star*:pn*:*
- KEYBOARD_KEY_76=f21 # Toggle touchpad, sends meta+ctrl+toggle
KEYBOARD_KEY_91=config # MSIControl Center
KEYBOARD_KEY_a0=mute # Fn+F9
KEYBOARD_KEY_ae=volumedown # Fn+F7
@@ -1531,6 +1530,10 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMicro-Star*:pn*:*
KEYBOARD_KEY_f8=brightnessup # Fn+F5
KEYBOARD_KEY_f9=search
+# MSI GF63 toggles touchpad using Fn+F3 where the keyboard key is 29
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMICRO-STAR*:pnGF63*:*
+ KEYBOARD_KEY_85=f21 # Toggle touchpad, sends meta+ctrl+toggle
+
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMICRO-STAR*:pnGE60*:*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMICRO-STAR*:pnGE70*:*
KEYBOARD_KEY_c2=ejectcd
@@ -1557,6 +1560,7 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMICRO-STAR*:pnU90/U100:*
# Keymaps MSI Prestige And MSI Modern FnKeys and Special keys
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMicro-Star*:pn*Prestige*:*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMicro-Star*:pn*Modern*:*
+ KEYBOARD_KEY_76=f21 # Toggle touchpad, sends meta+ctrl+toggle
KEYBOARD_KEY_91=prog1 # Fn+F7 Creation Center, sometime F7
KEYBOARD_KEY_f2=rotate_display # Fn+F12 Screen rotation
KEYBOARD_KEY_8d=prog3 # Fn+A Change True Color selections

View File

@ -0,0 +1,50 @@
From e4f8bf6058825819f87ebb477a1349cdbb930e66 Mon Sep 17 00:00:00 2001
From: persmule <persmule@hardenedlinux.org>
Date: Sun, 15 Dec 2024 21:03:57 +0800
Subject: [PATCH] hwdb: add scancodes for HP Elitebook 2170p runnning coreboot
HP Elitebook 2170p's keyboard scancodes under coreboot is different
with those under oem firmware. The scan code of backspace key of HP
Elitebook 2170p under coreboot is 0x66, but 93b078c has
KEYBOARD_KEY_66=pickup_phone for general HP laptops, making the
backspace key of the HP Elitebook 2170p running coreboot unusable.
The committed scancodes map KEYBOARD_KEY_66 back to backspace, and
provide all Fn-keys of HP Elitebook 2170p under coreboot.
Their evdev string matches the default SMBIOS tables of coreboot
for Elitebook 2170p, to avoid conflict with HP Elitebook 2170p running
oem firmware.
Fixes #35469 and https://ticket.coreboot.org/issues/571
(cherry picked from commit 93fc2adfa414e4a1b384da56c6e7d9277661ff4b)
Resolves: RHEL-49810
---
hwdb.d/60-keyboard.hwdb | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
index dba1274865..47d863f3b7 100644
--- a/hwdb.d/60-keyboard.hwdb
+++ b/hwdb.d/60-keyboard.hwdb
@@ -739,6 +739,19 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHP*G60*Notebook*PC:*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*2570p*:*
KEYBOARD_KEY_f8=wlan # Wireless HW switch button
+# 2170p running coreboot
+evdev:atkbd:dmi:bvncoreboot:bvr*:bd*:svnHewlett-Packard*:pn*EliteBook2170p:*
+evdev:atkbd:dmi:bvncoreboot:bvr*:bd*:svnHP*:pn*EliteBook2170p:*
+ KEYBOARD_KEY_66=backspace
+ KEYBOARD_KEY_be=battery # Fn+F2
+ KEYBOARD_KEY_d7=switchvideomode # Fn+F4
+ KEYBOARD_KEY_a3=mute # Fn+F5
+ KEYBOARD_KEY_a1=volumedown # Fn+F6
+ KEYBOARD_KEY_a2=volumeup # Fn+F7
+ KEYBOARD_KEY_a4=brightnessdown # Fn+F9
+ KEYBOARD_KEY_c3=brightnessup # Fn+F10
+ KEYBOARD_KEY_e3=wlan # Fn+F12
+
# Elitebook 2760p
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*2760p*:*
KEYBOARD_KEY_89=battery # Fn+F8

View File

@ -0,0 +1,78 @@
From 4d70b84f429d8fa34eceea483acbcb23e4cddb01 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <hadess@hadess.net>
Date: Thu, 12 Dec 2024 14:23:46 +0100
Subject: [PATCH] hwdb: Make remote controllable lights work out-of-the-box
Give access to USB/Bluetooth lights such as the Logitech Litra family of
devices.
The Logitech devices in particular are accessible through USB
and Bluetooth.
(cherry picked from commit 106f64cbd66b8aa76333c3f11177f53e79e2cd82)
Resolves: RHEL-49810
---
hwdb.d/70-lights.hwdb | 24 ++++++++++++++++++++++++
hwdb.d/parse_hwdb.py | 1 +
rules.d/70-uaccess.rules.in | 4 ++++
3 files changed, 29 insertions(+)
create mode 100644 hwdb.d/70-lights.hwdb
diff --git a/hwdb.d/70-lights.hwdb b/hwdb.d/70-lights.hwdb
new file mode 100644
index 0000000000..7811be61f5
--- /dev/null
+++ b/hwdb.d/70-lights.hwdb
@@ -0,0 +1,24 @@
+# This file is part of systemd.
+#
+# Database for remote controllable lights that should be accessible to the seat owner,
+# such as Bluetooth or USB lights that are used in conjuction with the computer like
+# streaming lights.
+#
+# To add local entries, copy this file to
+# /etc/udev/hwdb.d/
+# and add your rules there. To load the new rules execute (as root):
+# systemd-hwdb update
+# udevadm trigger
+
+################
+# Logitech
+################
+# Litra Beam
+bluetooth:v046dpc901*
+usb:v046dpc901*
+ ID_AV_LIGHTS=1
+
+# Litra Glow
+bluetooth:v046dpc900*
+usb:v046dpc900*
+ ID_AV_LIGHTS=1
diff --git a/hwdb.d/parse_hwdb.py b/hwdb.d/parse_hwdb.py
index b4de194ba4..bac5dcc4c8 100755
--- a/hwdb.d/parse_hwdb.py
+++ b/hwdb.d/parse_hwdb.py
@@ -159,6 +159,7 @@ def property_grammar():
('ID_AUTOSUSPEND', Or((Literal('0'), Literal('1')))),
('ID_AUTOSUSPEND_DELAY_MS', INTEGER),
('ID_AV_PRODUCTION_CONTROLLER', Or((Literal('0'), Literal('1')))),
+ ('ID_AV_LIGHTS', Or((Literal('0'), Literal('1')))),
('ID_PERSIST', Or((Literal('0'), Literal('1')))),
('ID_PDA', Or((Literal('0'), Literal('1')))),
('ID_INPUT', id_input_setting),
diff --git a/rules.d/70-uaccess.rules.in b/rules.d/70-uaccess.rules.in
index 58cf32826a..7facd52537 100644
--- a/rules.d/70-uaccess.rules.in
+++ b/rules.d/70-uaccess.rules.in
@@ -97,6 +97,10 @@ SUBSYSTEM=="hidraw", ENV{ID_AV_PRODUCTION_CONTROLLER}=="1", TAG+="uaccess"
# This also allows accessing HID devices with the libusb backend of hidapi.
SUBSYSTEM=="usb", ENV{ID_AV_PRODUCTION_CONTROLLER}=="1", TAG+="uaccess"
+# USB and Bluetooth controllable lights
+SUBSYSTEM=="hidraw", ENV{ID_AV_LIGHTS}=="1", TAG+="uaccess"
+SUBSYSTEM=="usb", ENV{ID_AV_LIGHTS}=="1", TAG+="uaccess"
+
# Hardware wallets
SUBSYSTEM=="usb", ENV{ID_HARDWARE_WALLET}=="1", TAG+="uaccess"
SUBSYSTEM=="hidraw", ENV{ID_HARDWARE_WALLET}=="1", TAG+="uaccess"

View File

@ -0,0 +1,30 @@
From 4fb0fc533a3cf74b6de1d8eb2d4210f9da94bd5e Mon Sep 17 00:00:00 2001
From: Lucas Adriano Salles <83602841+luc-salles@users.noreply.github.com>
Date: Mon, 16 Dec 2024 11:10:42 -0400
Subject: [PATCH] hwdb: fix key toggle touchpad for VAIO VJFH52 (#35645)
Fixes #35644.
(cherry picked from commit 56785120a03c9fae2dcb9dbafa974d1592d1e628)
Resolves: RHEL-49810
---
hwdb.d/60-keyboard.hwdb | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
index 47d863f3b7..eea269cc6d 100644
--- a/hwdb.d/60-keyboard.hwdb
+++ b/hwdb.d/60-keyboard.hwdb
@@ -2223,6 +2223,11 @@ evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:bvr*:bd*:svnPositivoBahia-VAIO:
evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:bvr*:bd*:svnPositivoBahia-VAIO:pnVJFE*:pvr*:*
KEYBOARD_KEY_76=f21 # Fn+F1 toggle touchpad
+# VAIO VJFH52
+evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:bvr*:bd*:svnPositivoBahia-VAIO:pnVJFH52F11X*:pvr*:*
+ KEYBOARD_KEY_f7=f23 # Fn+F1 toggle touchpad off
+ KEYBOARD_KEY_f8=f22 # Fn+F1 toggle touchpad on
+
###########################################################
# Positivo
###########################################################

View File

@ -0,0 +1,40 @@
From 8161524b36e83eda29b5fe29fa566ffe01b44276 Mon Sep 17 00:00:00 2001
From: Yu Watanabe <watanabe.yu+github@gmail.com>
Date: Sat, 21 Dec 2024 03:13:18 +0900
Subject: [PATCH] hwdb: comment out the entry for Logitech MX Keys for Mac
This effectively reverts the commit f70e5620b6ac319beac1d5ce26331bdc48d25daa,
as the entry seems to match multiple models.
Fixes #35691.
(cherry picked from commit 52a2b049476b374dea2efa22d39c5a1944125c47)
Resolves: RHEL-49810
---
hwdb.d/60-keyboard.hwdb | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
index eea269cc6d..89adcd9edf 100644
--- a/hwdb.d/60-keyboard.hwdb
+++ b/hwdb.d/60-keyboard.hwdb
@@ -1451,10 +1451,15 @@ evdev:input:b0003v046DpC309*
KEYBOARD_KEY_c01b6=images # My Pictures (F11)
KEYBOARD_KEY_c01b7=audio # My Music (F12)
+# The wireless receiver b0003v046Dp4092* seems to be used by multiple models.
+# See issue #35691. Hence, the entry below cannot be enabled by default. If
+# you're using the model below, consider copying the entry to a custom hwdb
+# file to enable the setting.
+#
# Logitech MX Keys for Mac
-evdev:input:b0003v046Dp4092*
- KEYBOARD_KEY_70035=102nd # '<' key
- KEYBOARD_KEY_70064=grave # '^' key
+#evdev:input:b0003v046Dp4092*
+# KEYBOARD_KEY_70035=102nd # '<' key
+# KEYBOARD_KEY_70064=grave # '^' key
###########################################################
# Maxdata

View File

@ -0,0 +1,30 @@
From 920014ff93fc05f9d1dd2c99fadb48e8785e5233 Mon Sep 17 00:00:00 2001
From: richfifeg <123514542+richfifeg@users.noreply.github.com>
Date: Mon, 30 Dec 2024 10:07:02 -0800
Subject: [PATCH] 60-sensor.hwdb: Loosen model mask to include entire series
This sensor is the same for Asus's entire Q5##L series, so match accordingly.
Tested with my Q502LAB.
(cherry picked from commit 89c4fe6c211d5e9cb380329f638609dec26bed0a)
Resolves: RHEL-49810
---
hwdb.d/60-sensor.hwdb | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb
index 02f4041475..3379294a08 100644
--- a/hwdb.d/60-sensor.hwdb
+++ b/hwdb.d/60-sensor.hwdb
@@ -164,8 +164,7 @@ sensor:modalias:acpi:INVN6500*:dmi:*svn*ASUSTeK*:*pn*TP300LA:*
sensor:modalias:acpi:INVN6500*:dmi:*svn*ASUSTeK*:*pn*TP300LD:*
ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
-sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pn*Q551LB:*
-sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pn*Q551LN:*
+sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pn*Q5??L*:*
ACCEL_MOUNT_MATRIX=0, 1, 0; -1, 0, 0; 0, 0, 1
sensor:modalias:acpi:KXJ2109*:dmi:*:svnASUSTeK*:pnME176C:*

View File

@ -0,0 +1,25 @@
From fad6dc4391fc8e142f2907bc1be09fd53dd788bd Mon Sep 17 00:00:00 2001
From: Michael Limiero <mike5713@gmail.com>
Date: Thu, 2 Jan 2025 10:41:28 -0500
Subject: [PATCH] Correct ACCEL_MOUNT_MATRIX for Chuwi Hi10 Max
(cherry picked from commit c76a7b7c8ca1aa50aaa60cabbaac554717c8d576)
Resolves: RHEL-49810
---
hwdb.d/60-sensor.hwdb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb
index 3379294a08..8d6a670900 100644
--- a/hwdb.d/60-sensor.hwdb
+++ b/hwdb.d/60-sensor.hwdb
@@ -304,7 +304,7 @@ sensor:modalias:acpi:MXC6655*:dmi:*:svnCHUWIINNOVATIONLIMITED:pnHi10Go:*
# Chuwi Hi10 Max
sensor:modalias:acpi:MXC6655*:dmi:*:svnCHUWIInnovationAndTechnology*:pnHi10Max:*
- ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
+ ACCEL_MOUNT_MATRIX=0, -1, 0; 1, 0, 0; 0, 0, 1
# Chuwi Hi12
sensor:modalias:acpi:BOSC0200*:dmi:*:svnHampoo:pnP02BD6_HI-122LP:*

View File

@ -0,0 +1,31 @@
From dd3f33f683ce7fb9649817edeb7f83b954ac5ece Mon Sep 17 00:00:00 2001
From: Chris Mayo <aklhfex@gmail.com>
Date: Thu, 2 Jan 2025 19:22:10 +0000
Subject: [PATCH] hwdb: Add macro keys for HP 430 Programmable Wireless Keypad
(cherry picked from commit 0726d988ec214e19e57929e411988bbedc7409cc)
Resolves: RHEL-49810
---
hwdb.d/60-keyboard.hwdb | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb
index 89adcd9edf..069cd891d7 100644
--- a/hwdb.d/60-keyboard.hwdb
+++ b/hwdb.d/60-keyboard.hwdb
@@ -923,6 +923,14 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP:pnHPEliteDragonfly13.5inchG3NotebookPC:pvr*
KEYBOARD_KEY_c8=pageup
KEYBOARD_KEY_d0=pagedown
+# HP 430 Programmable Wireless Keypad
+evdev:input:b0005v03F0p854Ae044C*
+ KEYBOARD_KEY_700f3=macro1
+ KEYBOARD_KEY_700f4=macro2
+ KEYBOARD_KEY_700fc=macro3
+ KEYBOARD_KEY_700fd=macro4
+ KEYBOARD_KEY_700fe=macro5
+
##########################################################
# Huawei
##########################################################

View File

@ -0,0 +1,61 @@
From abe0be8631e7a07ff542442a4a7433ebdfc85b87 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Tue, 9 Jan 2024 11:28:04 +0100
Subject: [PATCH] journal: again create user journals for users with high uids
This effectively reverts a change in 115d5145a257c1a27330acf9f063b5f4d910ca4d
'journald: move uid_for_system_journal() to uid-alloc-range.h', which slipped
in an additional check of uid_is_container(uid). The problem is that that change
is not backwards-compatible at all and very hard for users to handle.
There is no common agreement on mappings of high-range uids. Systemd declares
ownership of a large range for container uids in https://systemd.io/UIDS-GIDS/,
but this is only a recent change and various sites allocated those ranges
in a different way, in particular FreeIPA uses (used?) uids from this range
for human users. On big sites with lots of users changing uids is obviously a
hard problem. We generally assume that uids cannot be "freed" and/or changed
and/or reused safely, so we shouldn't demand the same from others.
This is somewhat similar to the situation with SYSTEM_ALLOC_UID_MIN /
SYSTEM_UID_MAX, which we tried to define to a fixed value in our code, causing
huge problems for existing systems with were created with a different
definition and couldn't be easily updated. For that case, we added a
configuration time switch and we now parse /etc/login.defs to actually use the
value that is appropriate for the local system.
Unfortunately, login.defs doesn't have a concept of container allocation ranges
(and we don't have code to parse and use those nonexistent names either), so we
can't tell users to adjust logind.defs to work around the changed definition.
login.defs has SUB_UID_{MIN,MAX}, but those aren't really the same thing,
because they are used to define where the add allocations for subuids, which is
generally a much smaller range. Maybe we should talk with other folks about
the appropriate allocation ranges and define some new settings in login.defs.
But this would require discussion and coordination with other projects first.
Actualy, it seems that this change was needed at all. The code in the container
does not log to the outside journal. It talks to its own journald, which does
journal splitting using its internal logic based on shifted uids. So let's
revert the change to fix user systems.
Fixes https://bugzilla.redhat.com/show_bug.cgi?id=2251843.
Upstream PR: https://github.com/systemd/systemd/pull/30846
rhel-only: bugfix
Resolves: RHEL-70103
---
src/basic/uid-alloc-range.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/basic/uid-alloc-range.c b/src/basic/uid-alloc-range.c
index 8b3741e438..507ca8a17e 100644
--- a/src/basic/uid-alloc-range.c
+++ b/src/basic/uid-alloc-range.c
@@ -127,5 +127,5 @@ bool uid_for_system_journal(uid_t uid) {
/* Returns true if the specified UID shall get its data stored in the system journal. */
- return uid_is_system(uid) || uid_is_dynamic(uid) || uid == UID_NOBODY || uid_is_container(uid);
+ return uid_is_system(uid) || uid_is_dynamic(uid) || uid == UID_NOBODY;
}

View File

@ -0,0 +1,105 @@
From e60e2e0344001483c85424698546e9465614befb Mon Sep 17 00:00:00 2001
From: Frantisek Sumsal <frantisek@sumsal.cz>
Date: Wed, 6 Dec 2023 16:24:21 +0100
Subject: [PATCH] install: don't translate unit instances to paths when
reenabling them
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
For unit instances install_info_discover() returns path to the template,
which then generates confusing errors when passed to
do_unit_file_enable():
~# build/systemctl --root=/tmp/systemctl-test.N9ysbz reenable templ1@two.service
Unit name: templ1@two.service; p: /etc/systemd/system/templ1@.service
Removed "/tmp/systemctl-test.N9ysbz/etc/systemd/system/services.target.wants/templ1@two.service".
Failed to reenable templ1@.service, destination unit services.target is a non-template unit.
This can also be seen with a different reproducer using getty@.service
and a simple bind mount to / - there's no error this time, but it tries
to create a symlink for the default instance (from DefaultInstance=tty1),
which is also incorrect:
~# SYSTEMD_LOG_LEVEL=debug systemctl --root /mnt/bindroot/ reenable getty@test.service
Symlink /mnt/bindroot/etc/systemd/system/getty.target.wants/getty@tty1.service → /usr/lib/systemd/system/getty@.service already exists
Follow-up to: 29a7c59abbe
Resolves upstream issue #24740
(cherry picked from commit fe6e0cfa19dd1de4ac599ae207182fd556adcfa7)
Resolves: RHEL-5956
---
src/shared/install.c | 2 +-
test/test-systemctl-enable.sh | 30 +++++++++++++++++++++++++++++-
2 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/src/shared/install.c b/src/shared/install.c
index 8d4aa5ab2c..eaad368d1c 100644
--- a/src/shared/install.c
+++ b/src/shared/install.c
@@ -2875,7 +2875,7 @@ static int normalize_linked_files(
return log_debug_errno(SYNTHETIC_ERRNO(EISDIR),
"Unexpected path to a directory \"%s\", refusing.", *a);
- if (!is_path(*a)) {
+ if (!is_path(*a) && !unit_name_is_valid(*a, UNIT_NAME_INSTANCE)) {
r = install_info_discover(&ctx, lp, n, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, &i, NULL, NULL);
if (r < 0)
log_debug_errno(r, "Failed to discover unit \"%s\", operating on name: %m", n);
diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh
index 7d5667f297..a0a183e92b 100644
--- a/test/test-systemctl-enable.sh
+++ b/test/test-systemctl-enable.sh
@@ -97,7 +97,7 @@ test ! -e "$root/etc/systemd/system/test1-badalias.target"
test ! -e "$root/etc/systemd/system/test1-badalias.socket"
test -h "$root/etc/systemd/system/test1-goodalias2.service"
-: '-------aliases in reeanble----------------------------------'
+: '-------aliases in reeanable----------------------------------'
( ! "$systemctl" --root="$root" reenable test1 )
test -h "$root/etc/systemd/system/default.target.wants/test1.service"
test ! -e "$root/etc/systemd/system/test1-goodalias.service"
@@ -246,6 +246,29 @@ islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path"
islink "$root/etc/systemd/system/link1.path" "/link1.path"
islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path"
+: '-------link instance and enable-------------------------------------'
+cat >"$root/link-instance@.service" <<EOF
+[Service]
+ExecStart=true
+[Install]
+WantedBy=services.target
+EOF
+
+"$systemctl" --root="$root" link '/link-instance@.service'
+islink "$root/etc/systemd/system/link-instance@.service" "/link-instance@.service"
+
+"$systemctl" --root="$root" enable 'link-instance@first.service'
+islink "$root/etc/systemd/system/link-instance@first.service" "/link-instance@.service"
+islink "$root/etc/systemd/system/services.target.wants/link-instance@first.service" "/link-instance@.service"
+
+SYSTEMD_LOG_LEVEL=debug "$systemctl" --root="$root" reenable 'link-instance@first.service'
+islink "$root/etc/systemd/system/link-instance@first.service" "/link-instance@.service"
+islink "$root/etc/systemd/system/services.target.wants/link-instance@first.service" "/link-instance@.service"
+
+"$systemctl" --root="$root" disable 'link-instance@first.service'
+test ! -h "$root/etc/systemd/system/link-instance@first.service"
+test ! -h "$root/etc/systemd/system/services.target.wants/link-instance@first.service"
+
: '-------manual link------------------------------------------'
cat >"$root/link3.suffix" <<EOF
[Install]
@@ -314,6 +337,11 @@ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "/etc/systemd/system/templ1@.service"
islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "/etc/systemd/system/templ1@.service"
+"$systemctl" --root="$root" reenable 'templ1@two.service'
+test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
+islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "/etc/systemd/system/templ1@.service"
+islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "/etc/systemd/system/templ1@.service"
+
"$systemctl" --root="$root" disable 'templ1@one.service'
test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service"
test ! -h "$root/etc/systemd/system/services.target.wants/templ1@one.service"

View File

@ -0,0 +1,27 @@
From ac5e85a76bd19211db88b7d924d9fe210fee4faf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Fri, 15 Dec 2023 16:01:35 +0100
Subject: [PATCH] test-systemctl-enable: fix typo
Follow-up for fe6e0cfa19dd1de4ac599ae207182fd556adcfa7.
(cherry picked from commit 88cc9cc7bc0d12b2a424cc8e88fc8699efc3ed04)
Related: RHEL-5956
---
test/test-systemctl-enable.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh
index a0a183e92b..7d82c38613 100644
--- a/test/test-systemctl-enable.sh
+++ b/test/test-systemctl-enable.sh
@@ -97,7 +97,7 @@ test ! -e "$root/etc/systemd/system/test1-badalias.target"
test ! -e "$root/etc/systemd/system/test1-badalias.socket"
test -h "$root/etc/systemd/system/test1-goodalias2.service"
-: '-------aliases in reeanable----------------------------------'
+: '-------aliases in reenable----------------------------------'
( ! "$systemctl" --root="$root" reenable test1 )
test -h "$root/etc/systemd/system/default.target.wants/test1.service"
test ! -e "$root/etc/systemd/system/test1-goodalias.service"

View File

@ -0,0 +1,44 @@
From b29215773c179d29cbd009fa5dbe608537842eee Mon Sep 17 00:00:00 2001
From: Chengen Du <chengen.du@canonical.com>
Date: Mon, 12 Aug 2024 11:41:52 +0800
Subject: [PATCH] udev: Handle PTP device symlink properly on udev action
'change'
PTP device symlink creation rules are currently executed only when the
udev action is 'add'. If a user reloads the rules and runs the udevadm
trigger command to reapply changes, the symlink may be deleted, which
can prevent the chronyd service from restarting properly.
Signed-off-by: Chengen Du <chengen.du@canonical.com>
(cherry picked from commit 6bd12be3fa7761f190e17efdbdbff4440da7528b)
Resolves: RHEL-59088
---
rules.d/50-udev-default.rules.in | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/rules.d/50-udev-default.rules.in b/rules.d/50-udev-default.rules.in
index ab29f6a17f..3543a0ee0d 100644
--- a/rules.d/50-udev-default.rules.in
+++ b/rules.d/50-udev-default.rules.in
@@ -21,6 +21,9 @@ ENV{MODALIAS}!="", IMPORT{builtin}="hwdb --subsystem=$env{SUBSYSTEM}"
SUBSYSTEM=="net", IMPORT{builtin}="net_driver"
+SUBSYSTEM=="ptp", ATTR{clock_name}=="KVM virtual PTP", SYMLINK+="ptp_kvm"
+SUBSYSTEM=="ptp", ATTR{clock_name}=="hyperv", SYMLINK+="ptp_hyperv"
+
ACTION!="add", GOTO="default_end"
SUBSYSTEM=="tty", KERNEL=="ptmx", GROUP="tty", MODE="0666"
@@ -109,10 +112,6 @@ KERNEL=="vhost-net", GROUP="kvm", MODE="{{DEV_KVM_MODE}}", OPTIONS+="static_node
KERNEL=="udmabuf", GROUP="kvm"
-SUBSYSTEM=="ptp", ATTR{clock_name}=="KVM virtual PTP", SYMLINK += "ptp_kvm"
-
-SUBSYSTEM=="ptp", ATTR{clock_name}=="hyperv", SYMLINK += "ptp_hyperv"
-
SUBSYSTEM!="dmi", GOTO="dmi_end"
ENV{ID_SYS_VENDOR_IS_RUBBISH}!="1", ENV{ID_VENDOR}="$attr{sys_vendor}"
ENV{ID_SYSFS_ATTRIBUTE_MODEL}=="", ENV{ID_PRODUCT_NAME_IS_RUBBISH}!="1", ENV{ID_MODEL}="$attr{product_name}"

View File

@ -0,0 +1,26 @@
From 79d0bc06110b46171990990afb5e1cdd56920324 Mon Sep 17 00:00:00 2001
From: Michal Sekletar <msekleta@redhat.com>
Date: Mon, 6 Jan 2025 10:44:25 +0100
Subject: [PATCH] systemctl: print warning about missing /proc only as debug
message
rhel-only: bugfix
Resolves: RHEL-3906
---
src/systemctl/systemctl.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index 3f2b0029ca..883a5b75f4 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -1156,7 +1156,7 @@ static int run(int argc, char *argv[]) {
goto finish;
if (proc_mounted() == 0)
- log_full(arg_no_warn ? LOG_DEBUG : LOG_WARNING,
+ log_full(LOG_DEBUG,
"%s%s/proc/ is not mounted. This is not a supported mode of operation. Please fix\n"
"your invocation environment to mount /proc/ and /sys/ properly. Proceeding anyway.\n"
"Your mileage may vary.",

View File

@ -0,0 +1,36 @@
From 834137e727d27a0fa1247a5233db033a9074265b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
Date: Tue, 17 Oct 2023 16:45:52 +0100
Subject: [PATCH] repart: avoid use of uninitialized TPM2B_PUBLIC data
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The 'TPM2B public' struct is only initialized if the public key
is non-NULL, however, it is unconditionally passed to
tpm2_calculate_sealing_policy, resulting in use of uninitialized
data. If the uninitialized data is lucky enough to be all zeroes,
this results eventually results in an error message from
tpm2_calculate_name about an unsupported nameAlg field value.
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
(cherry picked from commit a3ad5c3140b941d3703c63c902e58f4e2d295829)
Resolves: RHEL-56793
---
src/partition/repart.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/partition/repart.c b/src/partition/repart.c
index eeb31a6160..5db931e7bc 100644
--- a/src/partition/repart.c
+++ b/src/partition/repart.c
@@ -3073,7 +3073,7 @@ static int partition_encrypt(
}
TPM2B_DIGEST policy = TPM2B_DIGEST_MAKE(NULL, TPM2_SHA256_DIGEST_SIZE);
- r = tpm2_calculate_sealing_policy(arg_tpm2_hash_pcr_values, arg_tpm2_n_hash_pcr_values, &public, /* use_pin= */ false, &policy);
+ r = tpm2_calculate_sealing_policy(arg_tpm2_hash_pcr_values, arg_tpm2_n_hash_pcr_values, pubkey ? &public : NULL, /* use_pin= */ false, &policy);
if (r < 0)
return log_error_errno(r, "Could not calculate sealing policy digest: %m");

View File

@ -0,0 +1,25 @@
From af3b1477daca2bd53c371275ef7c3022dca3011f Mon Sep 17 00:00:00 2001
From: Jan Macku <jamacku@redhat.com>
Date: Tue, 14 Jan 2025 14:20:53 +0100
Subject: [PATCH] ci: use ubuntu 22:04 for deploy of man pages
rhel-only: ci
Related: RHEL-70884
---
.github/workflows/deploy-man-pages.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/deploy-man-pages.yml b/.github/workflows/deploy-man-pages.yml
index 9739228a87..82fab81072 100644
--- a/.github/workflows/deploy-man-pages.yml
+++ b/.github/workflows/deploy-man-pages.yml
@@ -26,7 +26,7 @@ jobs:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
- runs-on: ubuntu-latest
+ runs-on: ubuntu-22.04
permissions:
pages: write

View File

@ -0,0 +1,27 @@
From 77109fd5481a622121a9ca20e19d76fc97125e47 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Wed, 17 May 2023 11:16:56 +0200
Subject: [PATCH] man/tmpfiles: fix off-by-one in example
Reported and diagnosed by gitterman. Fixes #26617.
(cherry picked from commit f90360eb7417e083650034ad819790df0c389bd1)
Resolves: RHEL-74015
---
man/tmpfiles.d.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml
index fe2a1dadab..379ac9c34f 100644
--- a/man/tmpfiles.d.xml
+++ b/man/tmpfiles.d.xml
@@ -644,7 +644,7 @@ w- /proc/sys/vm/swappiness - - - - 10</programlisting></para>
<para>For example:<programlisting>
# Files created and modified, and directories accessed more than
# an hour ago in "/tmp/foo/bar", are subject to time-based cleanup.
-d /tmp/foo/bar - - - - bmA:1h -</programlisting></para>
+d /tmp/foo/bar - - - bmA:1h -</programlisting></para>
<para>Note that while the aging algorithm is run a 'shared' BSD file lock (see <citerefentry
project='man-pages'><refentrytitle>flock</refentrytitle><manvolnum>2</manvolnum></citerefentry>) is

View File

@ -0,0 +1,36 @@
From 6f792eb8679a20dd1e604bcd9cd18566658c3ff3 Mon Sep 17 00:00:00 2001
From: Frantisek Sumsal <frantisek@sumsal.cz>
Date: Wed, 18 Sep 2024 12:54:51 +0200
Subject: [PATCH] test: drop removed SCSI passthrough feature
This feature has been deprecated since QEMU 5.0 and finally removed in
QEMU 9.1 [0] which now causes issues when running the storage tests on
latest Arch:
------ testcase_long_sysfs_path: BEGIN ------
...
qemu-system-x86_64: -device virtio-blk-pci,drive=drive0,scsi=off,bus=pci_bridge25: Property 'virtio-blk-pci.scsi' not found
E: qemu failed with exit code 1
[0] https://github.com/qemu/qemu/commit/a271b8d7b2f39275a05e49deb7c8edc20b7a8279
(cherry picked from commit cd57920fbf6a8f7769a82cfc9bebc12965de0199)
Related: RHEL-70884
---
test/TEST-64-UDEV-STORAGE/test.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/TEST-64-UDEV-STORAGE/test.sh b/test/TEST-64-UDEV-STORAGE/test.sh
index f93b92e3c3..3911926b02 100755
--- a/test/TEST-64-UDEV-STORAGE/test.sh
+++ b/test/TEST-64-UDEV-STORAGE/test.sh
@@ -474,7 +474,7 @@ EOF
qemu_opts+=("-device pci-bridge,id=pci_bridge$brid,bus=pci_bridge$((brid-1)),chassis_nr=$((64+brid))")
done
- qemu_opts+=("-device virtio-blk-pci,drive=drive0,scsi=off,bus=pci_bridge$brid")
+ qemu_opts+=("-device virtio-blk-pci,drive=drive0,bus=pci_bridge$brid")
KERNEL_APPEND="systemd.setenv=TEST_FUNCTION_NAME=${FUNCNAME[0]} ${USER_KERNEL_APPEND:-}"
QEMU_OPTIONS="${qemu_opts[*]} ${USER_QEMU_OPTIONS:-}"

View File

@ -0,0 +1,53 @@
From ef5d328d13eae49e415c8968d0625fa29ff2daf4 Mon Sep 17 00:00:00 2001
From: Frantisek Sumsal <frantisek@sumsal.cz>
Date: Mon, 15 May 2023 19:45:13 +0200
Subject: [PATCH] nspawn: call json_dispatch() with a correct pointer
Otherwise hilarity ensues:
AddressSanitizer:DEADLYSIGNAL
=================================================================
==722==ERROR: AddressSanitizer: SEGV on unknown address 0xffffffff00000000 (pc 0x7f8d50ca9ffb bp 0x7fff11b0d4a0 sp 0x7fff11b0cc30 T0)
==722==The signal is caused by a READ memory access.
#0 0x7f8d50ca9ffb in __interceptor_strcmp.part.0 (/lib64/libasan.so.8+0xa9ffb)
#1 0x7f8d4f9cf5a1 in strcmp_ptr ../src/fundamental/string-util-fundamental.h:33
#2 0x7f8d4f9cf5f8 in streq_ptr ../src/fundamental/string-util-fundamental.h:46
#3 0x7f8d4f9d74d2 in free_and_strdup ../src/basic/string-util.c:948
#4 0x49139a in free_and_strdup_warn ../src/basic/string-util.h:197
#5 0x4923eb in oci_absolute_path ../src/nspawn/nspawn-oci.c:139
#6 0x7f8d4f6bd359 in json_dispatch ../src/shared/json.c:4395
#7 0x4a8831 in oci_hooks_array ../src/nspawn/nspawn-oci.c:2089
#8 0x7f8d4f6bd359 in json_dispatch ../src/shared/json.c:4395
#9 0x4a8b56 in oci_hooks ../src/nspawn/nspawn-oci.c:2112
#10 0x7f8d4f6bd359 in json_dispatch ../src/shared/json.c:4395
#11 0x4aa298 in oci_load ../src/nspawn/nspawn-oci.c:2197
#12 0x446cec in load_oci_bundle ../src/nspawn/nspawn.c:4744
#13 0x44ffa7 in run ../src/nspawn/nspawn.c:5477
#14 0x4552fb in main ../src/nspawn/nspawn.c:5920
#15 0x7f8d4e04a50f in __libc_start_call_main (/lib64/libc.so.6+0x2750f)
#16 0x7f8d4e04a5c8 in __libc_start_main@GLIBC_2.2.5 (/lib64/libc.so.6+0x275c8)
#17 0x40d284 in _start (/usr/bin/systemd-nspawn+0x40d284)
AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV (/lib64/libasan.so.8+0xa9ffb) in __interceptor_strcmp.part.0
==722==ABORTING
(cherry picked from commit f4e5c042c9a5659a5eebb4c91c0f1132f02a2c59)
Related: RHEL-55266
---
src/nspawn/nspawn-oci.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/nspawn/nspawn-oci.c b/src/nspawn/nspawn-oci.c
index 02142a9352..117a31e6b2 100644
--- a/src/nspawn/nspawn-oci.c
+++ b/src/nspawn/nspawn-oci.c
@@ -2083,7 +2083,7 @@ static int oci_hooks_array(const char *name, JsonVariant *v, JsonDispatchFlags f
.timeout = USEC_INFINITY,
};
- r = json_dispatch(e, table, oci_unexpected, flags, userdata);
+ r = json_dispatch(e, table, oci_unexpected, flags, new_item);
if (r < 0) {
free(new_item->path);
strv_free(new_item->args);

View File

@ -0,0 +1,944 @@
From a92665de198ca2ace3f5835f6c819b6e669cbb77 Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Wed, 1 Nov 2023 18:36:12 +0100
Subject: [PATCH] varlink,json: introduce new varlink_dispatch() helper
varlink_dispatch() is a simple wrapper around json_dispatch() that
returns clean, standards-compliant InvalidParameter error back to
clients, if the specified JSON cannot be parsed properly.
For this json_dispatch() is extended to return the offending field's
name. Because it already has quite a few parameters, I then renamed
json_dispatch() to json_dispatch_full() and made json_dispatch() a
wrapper around it that passes the new argument as NULL. While doing so I
figured we should also get rid of the bad= argument in the short
wrapper, since it's only used in the OCI code.
To simplify the OCI code this adds a second wrapper oci_dispatch()
around json_dispatch_full(), that fills in bad= the way we want.
Net result: instead of one json_dispatch() call there are now:
1. json_dispatch_full() for the fully feature mother of all dispathers.
2. json_dispatch() for the simpler version that you want to use most of
the time.
3. varlink_dispatch() that generates nice Varlink errors
4. oci_dispatch() that does the OCI specific error handling
And that's all there is.
(cherry picked from commit f1b622a00ce614654fcdff309a2394cfae3b3a88)
Related: RHEL-55266
---
src/core/core-varlink.c | 12 ++++----
src/fuzz/fuzz-bootspec.c | 2 +-
src/home/homed-varlink.c | 12 ++++----
src/machine/machined-varlink.c | 12 ++++----
src/nspawn/nspawn-oci.c | 54 ++++++++++++++++++----------------
src/nss-resolve/nss-resolve.c | 18 ++++++------
src/oom/oomd-manager.c | 2 +-
src/resolve/resolvectl.c | 4 +--
src/resolve/resolved-varlink.c | 8 ++---
src/shared/group-record.c | 10 +++----
src/shared/json.c | 41 ++++++++++++++++++++++++--
src/shared/json.h | 3 +-
src/shared/user-record.c | 18 ++++++------
src/shared/userdb.c | 6 ++--
src/shared/varlink.c | 20 +++++++++++++
src/shared/varlink.h | 3 ++
src/userdb/userwork.c | 12 ++++----
17 files changed, 150 insertions(+), 87 deletions(-)
diff --git a/src/core/core-varlink.c b/src/core/core-varlink.c
index 843271593d..776a3eebab 100644
--- a/src/core/core-varlink.c
+++ b/src/core/core-varlink.c
@@ -281,8 +281,8 @@ static int vl_method_get_user_record(Varlink *link, JsonVariant *parameters, Var
assert(parameters);
- r = json_dispatch(parameters, dispatch_table, NULL, 0, &p);
- if (r < 0)
+ r = varlink_dispatch(link, parameters, dispatch_table, &p);
+ if (r != 0)
return r;
if (!streq_ptr(p.service, "io.systemd.DynamicUser"))
@@ -388,8 +388,8 @@ static int vl_method_get_group_record(Varlink *link, JsonVariant *parameters, Va
assert(parameters);
- r = json_dispatch(parameters, dispatch_table, NULL, 0, &p);
- if (r < 0)
+ r = varlink_dispatch(link, parameters, dispatch_table, &p);
+ if (r != 0)
return r;
if (!streq_ptr(p.service, "io.systemd.DynamicUser"))
@@ -464,8 +464,8 @@ static int vl_method_get_memberships(Varlink *link, JsonVariant *parameters, Var
assert(parameters);
- r = json_dispatch(parameters, dispatch_table, NULL, 0, &p);
- if (r < 0)
+ r = varlink_dispatch(link, parameters, dispatch_table, &p);
+ if (r != 0)
return r;
if (!streq_ptr(p.service, "io.systemd.DynamicUser"))
diff --git a/src/fuzz/fuzz-bootspec.c b/src/fuzz/fuzz-bootspec.c
index c08f76c14a..c6d24e7b55 100644
--- a/src/fuzz/fuzz-bootspec.c
+++ b/src/fuzz/fuzz-bootspec.c
@@ -98,7 +98,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
if (r < 0)
return 0;
- r = json_dispatch(v, data_dispatch, NULL, 0, &config);
+ r = json_dispatch(v, data_dispatch, 0, &config);
if (r < 0)
return 0;
diff --git a/src/home/homed-varlink.c b/src/home/homed-varlink.c
index 540a612554..1cef25f563 100644
--- a/src/home/homed-varlink.c
+++ b/src/home/homed-varlink.c
@@ -90,8 +90,8 @@ int vl_method_get_user_record(Varlink *link, JsonVariant *parameters, VarlinkMet
assert(parameters);
- r = json_dispatch(parameters, dispatch_table, NULL, 0, &p);
- if (r < 0)
+ r = varlink_dispatch(link, parameters, dispatch_table, &p);
+ if (r != 0)
return r;
if (!streq_ptr(p.service, m->userdb_service))
@@ -204,8 +204,8 @@ int vl_method_get_group_record(Varlink *link, JsonVariant *parameters, VarlinkMe
assert(parameters);
- r = json_dispatch(parameters, dispatch_table, NULL, 0, &p);
- if (r < 0)
+ r = varlink_dispatch(link, parameters, dispatch_table, &p);
+ if (r != 0)
return r;
if (!streq_ptr(p.service, m->userdb_service))
@@ -270,8 +270,8 @@ int vl_method_get_memberships(Varlink *link, JsonVariant *parameters, VarlinkMet
assert(parameters);
- r = json_dispatch(parameters, dispatch_table, NULL, 0, &p);
- if (r < 0)
+ r = varlink_dispatch(link, parameters, dispatch_table, &p);
+ if (r != 0)
return r;
if (!streq_ptr(p.service, m->userdb_service))
diff --git a/src/machine/machined-varlink.c b/src/machine/machined-varlink.c
index ec625ad7b4..8b230b0078 100644
--- a/src/machine/machined-varlink.c
+++ b/src/machine/machined-varlink.c
@@ -156,8 +156,8 @@ static int vl_method_get_user_record(Varlink *link, JsonVariant *parameters, Var
assert(parameters);
- r = json_dispatch(parameters, dispatch_table, NULL, 0, &p);
- if (r < 0)
+ r = varlink_dispatch(link, parameters, dispatch_table, &p);
+ if (r != 0)
return r;
if (!streq_ptr(p.service, "io.systemd.Machine"))
@@ -321,8 +321,8 @@ static int vl_method_get_group_record(Varlink *link, JsonVariant *parameters, Va
assert(parameters);
- r = json_dispatch(parameters, dispatch_table, NULL, 0, &p);
- if (r < 0)
+ r = varlink_dispatch(link, parameters, dispatch_table, &p);
+ if (r != 0)
return r;
if (!streq_ptr(p.service, "io.systemd.Machine"))
@@ -366,8 +366,8 @@ static int vl_method_get_memberships(Varlink *link, JsonVariant *parameters, Var
assert(parameters);
- r = json_dispatch(parameters, dispatch_table, NULL, 0, &p);
- if (r < 0)
+ r = varlink_dispatch(link, parameters, dispatch_table, &p);
+ if (r != 0)
return r;
if (!streq_ptr(p.service, "io.systemd.Machine"))
diff --git a/src/nspawn/nspawn-oci.c b/src/nspawn/nspawn-oci.c
index 117a31e6b2..7fbc4dd6f0 100644
--- a/src/nspawn/nspawn-oci.c
+++ b/src/nspawn/nspawn-oci.c
@@ -84,6 +84,10 @@ static int oci_unexpected(const char *name, JsonVariant *v, JsonDispatchFlags fl
"Unexpected OCI element '%s' of type '%s'.", name, json_variant_type_to_string(json_variant_type(v)));
}
+static int oci_dispatch(JsonVariant *v, const JsonDispatch table[], JsonDispatchFlags flags, void *userdata) {
+ return json_dispatch_full(v, table, oci_unexpected, flags, userdata, /* reterr_bad_field= */ NULL);
+}
+
static int oci_unsupported(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
return json_log(v, flags, SYNTHETIC_ERRNO(EOPNOTSUPP),
"Unsupported OCI element '%s' of type '%s'.", name, json_variant_type_to_string(json_variant_type(v)));
@@ -122,7 +126,7 @@ static int oci_console_size(const char *name, JsonVariant *v, JsonDispatchFlags
{}
};
- return json_dispatch(v, table, oci_unexpected, flags, userdata);
+ return oci_dispatch(v, table, flags, userdata);
}
static int oci_absolute_path(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
@@ -251,7 +255,7 @@ static int oci_rlimits(const char *name, JsonVariant *v, JsonDispatchFlags flags
{}
};
- r = json_dispatch(e, table, oci_unexpected, flags, &data);
+ r = oci_dispatch(e, table, flags, &data);
if (r < 0)
return r;
@@ -319,7 +323,7 @@ static int oci_capabilities(const char *name, JsonVariant *v, JsonDispatchFlags
Settings *s = ASSERT_PTR(userdata);
int r;
- r = json_dispatch(v, table, oci_unexpected, flags, &s->full_capabilities);
+ r = oci_dispatch(v, table, flags, &s->full_capabilities);
if (r < 0)
return r;
@@ -402,7 +406,7 @@ static int oci_user(const char *name, JsonVariant *v, JsonDispatchFlags flags, v
{}
};
- return json_dispatch(v, table, oci_unexpected, flags, userdata);
+ return oci_dispatch(v, table, flags, userdata);
}
static int oci_process(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
@@ -423,7 +427,7 @@ static int oci_process(const char *name, JsonVariant *v, JsonDispatchFlags flags
{}
};
- return json_dispatch(v, table, oci_unexpected, flags, userdata);
+ return oci_dispatch(v, table, flags, userdata);
}
static int oci_root(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
@@ -436,7 +440,7 @@ static int oci_root(const char *name, JsonVariant *v, JsonDispatchFlags flags, v
{}
};
- r = json_dispatch(v, table, oci_unexpected, flags, s);
+ r = oci_dispatch(v, table, flags, s);
if (r < 0)
return r;
@@ -536,7 +540,7 @@ static int oci_mounts(const char *name, JsonVariant *v, JsonDispatchFlags flags,
CustomMount *m;
_cleanup_(cleanup_oci_mount_data) oci_mount_data data = {};
- r = json_dispatch(e, table, oci_unexpected, flags, &data);
+ r = oci_dispatch(e, table, flags, &data);
if (r < 0)
return r;
@@ -631,7 +635,7 @@ static int oci_namespaces(const char *name, JsonVariant *v, JsonDispatchFlags fl
{}
};
- r = json_dispatch(e, table, oci_unexpected, flags, &data);
+ r = oci_dispatch(e, table, flags, &data);
if (r < 0) {
free(data.path);
return r;
@@ -729,7 +733,7 @@ static int oci_uid_gid_mappings(const char *name, JsonVariant *v, JsonDispatchFl
assert_se(e = json_variant_by_index(v, 0));
- r = json_dispatch(e, table, oci_unexpected, flags, &data);
+ r = oci_dispatch(e, table, flags, &data);
if (r < 0)
return r;
@@ -858,7 +862,7 @@ static int oci_devices(const char *name, JsonVariant *v, JsonDispatchFlags flags
.mode = 0644,
};
- r = json_dispatch(e, table, oci_unexpected, flags, node);
+ r = oci_dispatch(e, table, flags, node);
if (r < 0)
goto fail_element;
@@ -1008,7 +1012,7 @@ static int oci_cgroup_devices(const char *name, JsonVariant *v, JsonDispatchFlag
{}
};
- r = json_dispatch(e, table, oci_unexpected, flags, &data);
+ r = oci_dispatch(e, table, flags, &data);
if (r < 0)
return r;
@@ -1190,7 +1194,7 @@ static int oci_cgroup_memory(const char *name, JsonVariant *v, JsonDispatchFlags
Settings *s = userdata;
int r;
- r = json_dispatch(v, table, oci_unexpected, flags, &data);
+ r = oci_dispatch(v, table, flags, &data);
if (r < 0)
return r;
@@ -1306,7 +1310,7 @@ static int oci_cgroup_cpu(const char *name, JsonVariant *v, JsonDispatchFlags fl
Settings *s = userdata;
int r;
- r = json_dispatch(v, table, oci_unexpected, flags, &data);
+ r = oci_dispatch(v, table, flags, &data);
if (r < 0) {
cpu_set_reset(&data.cpu_set);
return r;
@@ -1388,7 +1392,7 @@ static int oci_cgroup_block_io_weight_device(const char *name, JsonVariant *v, J
_cleanup_free_ char *path = NULL;
- r = json_dispatch(e, table, oci_unexpected, flags, &data);
+ r = oci_dispatch(e, table, flags, &data);
if (r < 0)
return r;
@@ -1445,7 +1449,7 @@ static int oci_cgroup_block_io_throttle(const char *name, JsonVariant *v, JsonDi
_cleanup_free_ char *path = NULL;
- r = json_dispatch(e, table, oci_unexpected, flags, &data);
+ r = oci_dispatch(e, table, flags, &data);
if (r < 0)
return r;
@@ -1482,7 +1486,7 @@ static int oci_cgroup_block_io(const char *name, JsonVariant *v, JsonDispatchFla
{}
};
- return json_dispatch(v, table, oci_unexpected, flags, userdata);
+ return oci_dispatch(v, table, flags, userdata);
}
static int oci_cgroup_pids(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
@@ -1497,7 +1501,7 @@ static int oci_cgroup_pids(const char *name, JsonVariant *v, JsonDispatchFlags f
uint64_t m;
int r;
- r = json_dispatch(v, table, oci_unexpected, flags, &k);
+ r = oci_dispatch(v, table, flags, &k);
if (r < 0)
return r;
@@ -1540,7 +1544,7 @@ static int oci_resources(const char *name, JsonVariant *v, JsonDispatchFlags fla
{}
};
- return json_dispatch(v, table, oci_unexpected, flags, userdata);
+ return oci_dispatch(v, table, flags, userdata);
}
static bool sysctl_key_valid(const char *s) {
@@ -1801,7 +1805,7 @@ static int oci_seccomp_args(const char *name, JsonVariant *v, JsonDispatchFlags
.op = 0,
};
- r = json_dispatch(e, table, oci_unexpected, flags, p);
+ r = oci_dispatch(e, table, flags, p);
if (r < 0)
return r;
@@ -1834,7 +1838,7 @@ static int oci_seccomp_syscalls(const char *name, JsonVariant *v, JsonDispatchFl
.action = UINT32_MAX,
};
- r = json_dispatch(e, table, oci_unexpected, flags, &rule);
+ r = oci_dispatch(e, table, flags, &rule);
if (r < 0)
goto fail_rule;
@@ -1901,7 +1905,7 @@ static int oci_seccomp(const char *name, JsonVariant *v, JsonDispatchFlags flags
if (!sc)
return json_log(v, flags, SYNTHETIC_ERRNO(ENOMEM), "Couldn't allocate seccomp object.");
- r = json_dispatch(v, table, oci_unexpected, flags, sc);
+ r = oci_dispatch(v, table, flags, sc);
if (r < 0)
return r;
@@ -2026,7 +2030,7 @@ static int oci_linux(const char *name, JsonVariant *v, JsonDispatchFlags flags,
{}
};
- return json_dispatch(v, table, oci_unexpected, flags, userdata);
+ return oci_dispatch(v, table, flags, userdata);
}
static int oci_hook_timeout(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
@@ -2083,7 +2087,7 @@ static int oci_hooks_array(const char *name, JsonVariant *v, JsonDispatchFlags f
.timeout = USEC_INFINITY,
};
- r = json_dispatch(e, table, oci_unexpected, flags, new_item);
+ r = oci_dispatch(e, table, flags, new_item);
if (r < 0) {
free(new_item->path);
strv_free(new_item->args);
@@ -2106,7 +2110,7 @@ static int oci_hooks(const char *name, JsonVariant *v, JsonDispatchFlags flags,
{}
};
- return json_dispatch(v, table, oci_unexpected, flags, userdata);
+ return oci_dispatch(v, table, flags, userdata);
}
static int oci_annotations(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) {
@@ -2191,7 +2195,7 @@ int oci_load(FILE *f, const char *bundle, Settings **ret) {
if (!s->bundle)
return log_oom();
- r = json_dispatch(oci, table, oci_unexpected, 0, s);
+ r = oci_dispatch(oci, table, 0, s);
if (r < 0)
return r;
diff --git a/src/nss-resolve/nss-resolve.c b/src/nss-resolve/nss-resolve.c
index 0226752275..350bbffb04 100644
--- a/src/nss-resolve/nss-resolve.c
+++ b/src/nss-resolve/nss-resolve.c
@@ -272,7 +272,7 @@ enum nss_status _nss_resolve_gethostbyname4_r(
goto not_found;
}
- r = json_dispatch(rparams, resolve_hostname_reply_dispatch_table, NULL, json_dispatch_flags, &p);
+ r = json_dispatch(rparams, resolve_hostname_reply_dispatch_table, json_dispatch_flags, &p);
if (r < 0)
goto fail;
if (json_variant_is_blank_object(p.addresses))
@@ -282,7 +282,7 @@ enum nss_status _nss_resolve_gethostbyname4_r(
JSON_VARIANT_ARRAY_FOREACH(entry, p.addresses) {
AddressParameters q = {};
- r = json_dispatch(entry, address_parameters_dispatch_table, NULL, json_dispatch_flags, &q);
+ r = json_dispatch(entry, address_parameters_dispatch_table, json_dispatch_flags, &q);
if (r < 0)
goto fail;
@@ -320,7 +320,7 @@ enum nss_status _nss_resolve_gethostbyname4_r(
JSON_VARIANT_ARRAY_FOREACH(entry, p.addresses) {
AddressParameters q = {};
- r = json_dispatch(entry, address_parameters_dispatch_table, NULL, json_dispatch_flags, &q);
+ r = json_dispatch(entry, address_parameters_dispatch_table, json_dispatch_flags, &q);
if (r < 0)
goto fail;
@@ -428,7 +428,7 @@ enum nss_status _nss_resolve_gethostbyname3_r(
goto not_found;
}
- r = json_dispatch(rparams, resolve_hostname_reply_dispatch_table, NULL, json_dispatch_flags, &p);
+ r = json_dispatch(rparams, resolve_hostname_reply_dispatch_table, json_dispatch_flags, &p);
if (r < 0)
goto fail;
if (json_variant_is_blank_object(p.addresses))
@@ -438,7 +438,7 @@ enum nss_status _nss_resolve_gethostbyname3_r(
JSON_VARIANT_ARRAY_FOREACH(entry, p.addresses) {
AddressParameters q = {};
- r = json_dispatch(entry, address_parameters_dispatch_table, NULL, json_dispatch_flags, &q);
+ r = json_dispatch(entry, address_parameters_dispatch_table, json_dispatch_flags, &q);
if (r < 0)
goto fail;
@@ -484,7 +484,7 @@ enum nss_status _nss_resolve_gethostbyname3_r(
JSON_VARIANT_ARRAY_FOREACH(entry, p.addresses) {
AddressParameters q = {};
- r = json_dispatch(entry, address_parameters_dispatch_table, NULL, json_dispatch_flags, &q);
+ r = json_dispatch(entry, address_parameters_dispatch_table, json_dispatch_flags, &q);
if (r < 0)
goto fail;
@@ -640,7 +640,7 @@ enum nss_status _nss_resolve_gethostbyaddr2_r(
goto not_found;
}
- r = json_dispatch(rparams, resolve_address_reply_dispatch_table, NULL, json_dispatch_flags, &p);
+ r = json_dispatch(rparams, resolve_address_reply_dispatch_table, json_dispatch_flags, &p);
if (r < 0)
goto fail;
if (json_variant_is_blank_object(p.names))
@@ -651,7 +651,7 @@ enum nss_status _nss_resolve_gethostbyaddr2_r(
JSON_VARIANT_ARRAY_FOREACH(entry, p.names) {
_cleanup_(name_parameters_destroy) NameParameters q = {};
- r = json_dispatch(entry, name_parameters_dispatch_table, NULL, json_dispatch_flags, &q);
+ r = json_dispatch(entry, name_parameters_dispatch_table, json_dispatch_flags, &q);
if (r < 0)
goto fail;
@@ -692,7 +692,7 @@ enum nss_status _nss_resolve_gethostbyaddr2_r(
JSON_VARIANT_ARRAY_FOREACH(entry, p.names) {
_cleanup_(name_parameters_destroy) NameParameters q = {};
- r = json_dispatch(entry, name_parameters_dispatch_table, NULL, json_dispatch_flags, &q);
+ r = json_dispatch(entry, name_parameters_dispatch_table, json_dispatch_flags, &q);
if (r < 0)
goto fail;
diff --git a/src/oom/oomd-manager.c b/src/oom/oomd-manager.c
index 4a43807b87..66c41c1cfa 100644
--- a/src/oom/oomd-manager.c
+++ b/src/oom/oomd-manager.c
@@ -72,7 +72,7 @@ static int process_managed_oom_message(Manager *m, uid_t uid, JsonVariant *param
if (!json_variant_is_object(c))
continue;
- r = json_dispatch(c, dispatch_table, NULL, 0, &message);
+ r = json_dispatch(c, dispatch_table, 0, &message);
if (r == -ENOMEM)
return r;
if (r < 0)
diff --git a/src/resolve/resolvectl.c b/src/resolve/resolvectl.c
index e22e06d054..0782e48e04 100644
--- a/src/resolve/resolvectl.c
+++ b/src/resolve/resolvectl.c
@@ -2598,7 +2598,7 @@ static int monitor_rkey_from_json(JsonVariant *v, DnsResourceKey **ret_key) {
assert(v);
assert(ret_key);
- r = json_dispatch(v, dispatch_table, NULL, 0, NULL);
+ r = json_dispatch(v, dispatch_table, 0, NULL);
if (r < 0)
return r;
@@ -2697,7 +2697,7 @@ static void monitor_query_dump(JsonVariant *v) {
{}
};
- r = json_dispatch(v, dispatch_table, NULL, 0, NULL);
+ r = json_dispatch(v, dispatch_table, 0, NULL);
if (r < 0)
return (void) log_warning("Received malformed monitor message, ignoring.");
diff --git a/src/resolve/resolved-varlink.c b/src/resolve/resolved-varlink.c
index 8ba5eb9833..1c5ce8315c 100644
--- a/src/resolve/resolved-varlink.c
+++ b/src/resolve/resolved-varlink.c
@@ -312,8 +312,8 @@ static int vl_method_resolve_hostname(Varlink *link, JsonVariant *parameters, Va
if (FLAGS_SET(flags, VARLINK_METHOD_ONEWAY))
return -EINVAL;
- r = json_dispatch(parameters, dispatch_table, NULL, 0, &p);
- if (r < 0)
+ r = varlink_dispatch(link, parameters, dispatch_table, &p);
+ if (r != 0)
return r;
if (p.ifindex < 0)
@@ -492,8 +492,8 @@ static int vl_method_resolve_address(Varlink *link, JsonVariant *parameters, Var
if (FLAGS_SET(flags, VARLINK_METHOD_ONEWAY))
return -EINVAL;
- r = json_dispatch(parameters, dispatch_table, NULL, 0, &p);
- if (r < 0)
+ r = varlink_dispatch(link, parameters, dispatch_table, &p);
+ if (r != 0)
return r;
if (p.ifindex < 0)
diff --git a/src/shared/group-record.c b/src/shared/group-record.c
index 2f12ac1c22..728471b2b6 100644
--- a/src/shared/group-record.c
+++ b/src/shared/group-record.c
@@ -50,7 +50,7 @@ static int dispatch_privileged(const char *name, JsonVariant *variant, JsonDispa
{},
};
- return json_dispatch(variant, privileged_dispatch_table, NULL, flags, userdata);
+ return json_dispatch(variant, privileged_dispatch_table, flags, userdata);
}
static int dispatch_binding(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
@@ -78,7 +78,7 @@ static int dispatch_binding(const char *name, JsonVariant *variant, JsonDispatch
if (!m)
return 0;
- return json_dispatch(m, binding_dispatch_table, NULL, flags, userdata);
+ return json_dispatch(m, binding_dispatch_table, flags, userdata);
}
static int dispatch_per_machine(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
@@ -131,7 +131,7 @@ static int dispatch_per_machine(const char *name, JsonVariant *variant, JsonDisp
if (!matching)
continue;
- r = json_dispatch(e, per_machine_dispatch_table, NULL, flags, userdata);
+ r = json_dispatch(e, per_machine_dispatch_table, flags, userdata);
if (r < 0)
return r;
}
@@ -164,7 +164,7 @@ static int dispatch_status(const char *name, JsonVariant *variant, JsonDispatchF
if (!m)
return 0;
- return json_dispatch(m, status_dispatch_table, NULL, flags, userdata);
+ return json_dispatch(m, status_dispatch_table, flags, userdata);
}
static int group_record_augment(GroupRecord *h, JsonDispatchFlags json_flags) {
@@ -230,7 +230,7 @@ int group_record_load(
if (r < 0)
return r;
- r = json_dispatch(h->json, group_dispatch_table, NULL, json_flags, h);
+ r = json_dispatch(h->json, group_dispatch_table, json_flags, h);
if (r < 0)
return r;
diff --git a/src/shared/json.c b/src/shared/json.c
index eda7bb1956..e346bb0a01 100644
--- a/src/shared/json.c
+++ b/src/shared/json.c
@@ -4227,7 +4227,13 @@ static void *dispatch_userdata(const JsonDispatch *p, void *userdata) {
return SIZE_TO_PTR(p->offset);
}
-int json_dispatch(JsonVariant *v, const JsonDispatch table[], JsonDispatchCallback bad, JsonDispatchFlags flags, void *userdata) {
+int json_dispatch_full(
+ JsonVariant *v,
+ const JsonDispatch table[],
+ JsonDispatchCallback bad,
+ JsonDispatchFlags flags,
+ void *userdata,
+ const char **reterr_bad_field) {
size_t m;
int r, done = 0;
bool *found;
@@ -4238,6 +4244,9 @@ int json_dispatch(JsonVariant *v, const JsonDispatch table[], JsonDispatchCallba
if (flags & JSON_PERMISSIVE)
return 0;
+ if (reterr_bad_field)
+ *reterr_bad_field = NULL;
+
return -EINVAL;
}
@@ -4260,7 +4269,7 @@ int json_dispatch(JsonVariant *v, const JsonDispatch table[], JsonDispatchCallba
streq_ptr(json_variant_string(key), p->name))
break;
- if (p->name) { /* Found a matching entry! :-) */
+ if (p->name) { /* Found a matching entry! 🙂 */
JsonDispatchFlags merged_flags;
merged_flags = flags | p->flags;
@@ -4275,6 +4284,9 @@ int json_dispatch(JsonVariant *v, const JsonDispatch table[], JsonDispatchCallba
if (merged_flags & JSON_PERMISSIVE)
continue;
+ if (reterr_bad_field)
+ *reterr_bad_field = p->name;
+
return -EINVAL;
}
@@ -4284,6 +4296,9 @@ int json_dispatch(JsonVariant *v, const JsonDispatch table[], JsonDispatchCallba
if (merged_flags & JSON_PERMISSIVE)
continue;
+ if (reterr_bad_field)
+ *reterr_bad_field = p->name;
+
return -ENOTUNIQ;
}
@@ -4295,13 +4310,16 @@ int json_dispatch(JsonVariant *v, const JsonDispatch table[], JsonDispatchCallba
if (merged_flags & JSON_PERMISSIVE)
continue;
+ if (reterr_bad_field)
+ *reterr_bad_field = json_variant_string(key);
+
return r;
}
}
done ++;
- } else { /* Didn't find a matching entry! :-( */
+ } else { /* Didn't find a matching entry! ☹️ */
if (bad) {
r = bad(json_variant_string(key), value, flags, userdata);
@@ -4309,6 +4327,9 @@ int json_dispatch(JsonVariant *v, const JsonDispatch table[], JsonDispatchCallba
if (flags & JSON_PERMISSIVE)
continue;
+ if (reterr_bad_field)
+ *reterr_bad_field = json_variant_string(key);
+
return r;
} else
done ++;
@@ -4319,6 +4340,9 @@ int json_dispatch(JsonVariant *v, const JsonDispatch table[], JsonDispatchCallba
if (flags & JSON_PERMISSIVE)
continue;
+ if (reterr_bad_field)
+ *reterr_bad_field = json_variant_string(key);
+
return -EADDRNOTAVAIL;
}
}
@@ -4333,6 +4357,9 @@ int json_dispatch(JsonVariant *v, const JsonDispatch table[], JsonDispatchCallba
if ((merged_flags & JSON_PERMISSIVE))
continue;
+ if (reterr_bad_field)
+ *reterr_bad_field = p->name;
+
return -ENXIO;
}
}
@@ -4340,6 +4367,14 @@ int json_dispatch(JsonVariant *v, const JsonDispatch table[], JsonDispatchCallba
return done;
}
+int json_dispatch(
+ JsonVariant *v,
+ const JsonDispatch table[],
+ JsonDispatchFlags flags,
+ void *userdata) {
+ return json_dispatch_full(v, table, NULL, flags, userdata, NULL);
+}
+
int json_dispatch_boolean(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
bool *b = ASSERT_PTR(userdata);
diff --git a/src/shared/json.h b/src/shared/json.h
index 5993e05299..e62c71a249 100644
--- a/src/shared/json.h
+++ b/src/shared/json.h
@@ -363,7 +363,8 @@ typedef struct JsonDispatch {
JsonDispatchFlags flags;
} JsonDispatch;
-int json_dispatch(JsonVariant *v, const JsonDispatch table[], JsonDispatchCallback bad, JsonDispatchFlags flags, void *userdata);
+int json_dispatch_full(JsonVariant *v, const JsonDispatch table[], JsonDispatchCallback bad, JsonDispatchFlags flags, void *userdata, const char **reterr_bad_field);
+int json_dispatch(JsonVariant *v, const JsonDispatch table[], JsonDispatchFlags flags, void *userdata);
int json_dispatch_string(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
int json_dispatch_const_string(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
diff --git a/src/shared/user-record.c b/src/shared/user-record.c
index 84cbdb1d30..1c37444349 100644
--- a/src/shared/user-record.c
+++ b/src/shared/user-record.c
@@ -653,7 +653,7 @@ static int dispatch_secret(const char *name, JsonVariant *variant, JsonDispatchF
{},
};
- return json_dispatch(variant, secret_dispatch_table, NULL, flags, userdata);
+ return json_dispatch(variant, secret_dispatch_table, flags, userdata);
}
static int dispatch_pkcs11_uri(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
@@ -782,7 +782,7 @@ static int dispatch_pkcs11_key(const char *name, JsonVariant *variant, JsonDispa
k = h->pkcs11_encrypted_key + h->n_pkcs11_encrypted_key;
*k = (Pkcs11EncryptedKey) {};
- r = json_dispatch(e, pkcs11_key_dispatch_table, NULL, flags, k);
+ r = json_dispatch(e, pkcs11_key_dispatch_table, flags, k);
if (r < 0) {
pkcs11_encrypted_key_done(k);
return r;
@@ -916,7 +916,7 @@ static int dispatch_fido2_hmac_salt(const char *name, JsonVariant *variant, Json
.client_pin = -1,
};
- r = json_dispatch(e, fido2_hmac_salt_dispatch_table, NULL, flags, k);
+ r = json_dispatch(e, fido2_hmac_salt_dispatch_table, flags, k);
if (r < 0) {
fido2_hmac_salt_done(k);
return r;
@@ -956,7 +956,7 @@ static int dispatch_recovery_key(const char *name, JsonVariant *variant, JsonDis
k = h->recovery_key + h->n_recovery_key;
*k = (RecoveryKey) {};
- r = json_dispatch(e, recovery_key_dispatch_table, NULL, flags, k);
+ r = json_dispatch(e, recovery_key_dispatch_table, flags, k);
if (r < 0) {
recovery_key_done(k);
return r;
@@ -1038,7 +1038,7 @@ static int dispatch_privileged(const char *name, JsonVariant *variant, JsonDispa
{},
};
- return json_dispatch(variant, privileged_dispatch_table, NULL, flags, userdata);
+ return json_dispatch(variant, privileged_dispatch_table, flags, userdata);
}
static int dispatch_binding(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
@@ -1077,7 +1077,7 @@ static int dispatch_binding(const char *name, JsonVariant *variant, JsonDispatch
if (!m)
return 0;
- return json_dispatch(m, binding_dispatch_table, NULL, flags, userdata);
+ return json_dispatch(m, binding_dispatch_table, flags, userdata);
}
int per_machine_id_match(JsonVariant *ids, JsonDispatchFlags flags) {
@@ -1276,7 +1276,7 @@ static int dispatch_per_machine(const char *name, JsonVariant *variant, JsonDisp
if (!matching)
continue;
- r = json_dispatch(e, per_machine_dispatch_table, NULL, flags, userdata);
+ r = json_dispatch(e, per_machine_dispatch_table, flags, userdata);
if (r < 0)
return r;
}
@@ -1325,7 +1325,7 @@ static int dispatch_status(const char *name, JsonVariant *variant, JsonDispatchF
if (!m)
return 0;
- return json_dispatch(m, status_dispatch_table, NULL, flags, userdata);
+ return json_dispatch(m, status_dispatch_table, flags, userdata);
}
int user_record_build_image_path(UserStorage storage, const char *user_name_and_realm, char **ret) {
@@ -1615,7 +1615,7 @@ int user_record_load(UserRecord *h, JsonVariant *v, UserRecordLoadFlags load_fla
if (r < 0)
return r;
- r = json_dispatch(h->json, user_dispatch_table, NULL, json_flags, h);
+ r = json_dispatch(h->json, user_dispatch_table, json_flags, h);
if (r < 0)
return r;
diff --git a/src/shared/userdb.c b/src/shared/userdb.c
index 3f64ec8942..4ea4ac4d72 100644
--- a/src/shared/userdb.c
+++ b/src/shared/userdb.c
@@ -189,7 +189,7 @@ static int userdb_on_query_reply(
assert_se(!iterator->found_user);
- r = json_dispatch(parameters, dispatch_table, NULL, 0, &user_data);
+ r = json_dispatch(parameters, dispatch_table, 0, &user_data);
if (r < 0)
goto finish;
@@ -246,7 +246,7 @@ static int userdb_on_query_reply(
assert_se(!iterator->found_group);
- r = json_dispatch(parameters, dispatch_table, NULL, 0, &group_data);
+ r = json_dispatch(parameters, dispatch_table, 0, &group_data);
if (r < 0)
goto finish;
@@ -302,7 +302,7 @@ static int userdb_on_query_reply(
assert(!iterator->found_user_name);
assert(!iterator->found_group_name);
- r = json_dispatch(parameters, dispatch_table, NULL, 0, &membership_data);
+ r = json_dispatch(parameters, dispatch_table, 0, &membership_data);
if (r < 0)
goto finish;
diff --git a/src/shared/varlink.c b/src/shared/varlink.c
index 4d2cfee491..49593aa05a 100644
--- a/src/shared/varlink.c
+++ b/src/shared/varlink.c
@@ -1771,6 +1771,26 @@ int varlink_notifyb(Varlink *v, ...) {
return varlink_notify(v, parameters);
}
+int varlink_dispatch(Varlink *v, JsonVariant *parameters, const JsonDispatch table[], void *userdata) {
+ const char *bad_field = NULL;
+ int r;
+
+ assert_return(v, -EINVAL);
+ assert_return(table, -EINVAL);
+
+ /* A wrapper around json_dispatch_full() that returns a nice InvalidParameter error if we hit a problem with some field. */
+
+ r = json_dispatch_full(parameters, table, /* bad= */ NULL, /* flags= */ 0, userdata, &bad_field);
+ if (r < 0) {
+ if (bad_field)
+ return varlink_errorb(v, VARLINK_ERROR_INVALID_PARAMETER,
+ JSON_BUILD_OBJECT(JSON_BUILD_PAIR("parameter", JSON_BUILD_STRING(bad_field))));
+ return r;
+ }
+
+ return 0;
+}
+
int varlink_bind_reply(Varlink *v, VarlinkReply callback) {
assert_return(v, -EINVAL);
diff --git a/src/shared/varlink.h b/src/shared/varlink.h
index 9518cd9098..e51ccd9107 100644
--- a/src/shared/varlink.h
+++ b/src/shared/varlink.h
@@ -107,6 +107,9 @@ int varlink_error_errno(Varlink *v, int error);
int varlink_notify(Varlink *v, JsonVariant *parameters);
int varlink_notifyb(Varlink *v, ...);
+/* Parsing incoming data via json_dispatch() and generate a nice error on parse errors */
+int varlink_dispatch(Varlink *v, JsonVariant *parameters, const JsonDispatch table[], void *userdata);
+
/* Bind a disconnect, reply or timeout callback */
int varlink_bind_reply(Varlink *v, VarlinkReply reply);
diff --git a/src/userdb/userwork.c b/src/userdb/userwork.c
index 21a869df1b..569dba3285 100644
--- a/src/userdb/userwork.c
+++ b/src/userdb/userwork.c
@@ -147,8 +147,8 @@ static int vl_method_get_user_record(Varlink *link, JsonVariant *parameters, Var
assert(parameters);
- r = json_dispatch(parameters, dispatch_table, NULL, 0, &p);
- if (r < 0)
+ r = varlink_dispatch(link, parameters, dispatch_table, &p);
+ if (r != 0)
return r;
r = userdb_flags_from_service(link, p.service, &userdb_flags);
@@ -283,8 +283,8 @@ static int vl_method_get_group_record(Varlink *link, JsonVariant *parameters, Va
assert(parameters);
- r = json_dispatch(parameters, dispatch_table, NULL, 0, &p);
- if (r < 0)
+ r = varlink_dispatch(link, parameters, dispatch_table, &p);
+ if (r != 0)
return r;
r = userdb_flags_from_service(link, p.service, &userdb_flags);
@@ -366,8 +366,8 @@ static int vl_method_get_memberships(Varlink *link, JsonVariant *parameters, Var
assert(parameters);
- r = json_dispatch(parameters, dispatch_table, NULL, 0, &p);
- if (r < 0)
+ r = varlink_dispatch(link, parameters, dispatch_table, &p);
+ if (r != 0)
return r;
r = userdb_flags_from_service(link, p.service, &userdb_flags);

View File

@ -0,0 +1,285 @@
From ea5380d15cd5e479b45a5ea18d36feea665ae6be Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Mon, 30 Sep 2024 17:33:05 +0200
Subject: [PATCH] json: add json_dispatch_const_user_group_name()
This is the same as json_dispatch_user_group_name() but fills in the
string as "const char*" to the JSON field. Or in other words, it's what
sd_json_dispatch_const_string() is to sd_json_dispatch_string().
Note this drops the SD_JSON_STRICT flags from various dispatch tables
for these fields, and replaces this by SD_JSON_RELAX, i.e. the opposite
behaviour. As #34558 correctly suggests we should validate user names
in lookup functions using the lax rules, rather than the strict ones,
since clients not knowing the rules might ask us for arbitrary
resolution.
(SD_JSON_RELAX internally translates to valid_user_group_name() with the
VALID_USER_RELAX flag).
See: #34558
(cherry picked from commit 0376ef36a1ff3768ad0c833f215064e34b40b86c)
Related: RHEL-55266
---
src/core/core-varlink.c | 18 +++++++++---------
src/home/homed-varlink.c | 21 +++++++++++----------
src/machine/machined-varlink.c | 18 +++++++++---------
src/shared/json.c | 21 ++++++++++++++++++++-
src/shared/json.h | 1 +
src/userdb/userwork.c | 21 +++++++++++----------
6 files changed, 61 insertions(+), 39 deletions(-)
diff --git a/src/core/core-varlink.c b/src/core/core-varlink.c
index 776a3eebab..d9457cfecc 100644
--- a/src/core/core-varlink.c
+++ b/src/core/core-varlink.c
@@ -263,9 +263,9 @@ static int manager_varlink_send_managed_oom_initial(Manager *m) {
static int vl_method_get_user_record(Varlink *link, JsonVariant *parameters, VarlinkMethodFlags flags, void *userdata) {
static const JsonDispatch dispatch_table[] = {
- { "uid", JSON_VARIANT_UNSIGNED, json_dispatch_uid_gid, offsetof(LookupParameters, uid), 0 },
- { "userName", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, user_name), JSON_SAFE },
- { "service", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, service), 0 },
+ { "uid", JSON_VARIANT_UNSIGNED, json_dispatch_uid_gid, offsetof(LookupParameters, uid), 0 },
+ { "userName", JSON_VARIANT_STRING, json_dispatch_const_user_group_name, offsetof(LookupParameters, user_name), JSON_RELAX },
+ { "service", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, service), 0 },
{}
};
@@ -370,9 +370,9 @@ static bool group_match_lookup_parameters(LookupParameters *p, const char *name,
static int vl_method_get_group_record(Varlink *link, JsonVariant *parameters, VarlinkMethodFlags flags, void *userdata) {
static const JsonDispatch dispatch_table[] = {
- { "gid", JSON_VARIANT_UNSIGNED, json_dispatch_uid_gid, offsetof(LookupParameters, gid), 0 },
- { "groupName", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, group_name), JSON_SAFE },
- { "service", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, service), 0 },
+ { "gid", JSON_VARIANT_UNSIGNED, json_dispatch_uid_gid, offsetof(LookupParameters, gid), 0 },
+ { "groupName", JSON_VARIANT_STRING, json_dispatch_const_user_group_name, offsetof(LookupParameters, group_name), JSON_RELAX },
+ { "service", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, service), 0 },
{}
};
@@ -453,9 +453,9 @@ static int vl_method_get_group_record(Varlink *link, JsonVariant *parameters, Va
static int vl_method_get_memberships(Varlink *link, JsonVariant *parameters, VarlinkMethodFlags flags, void *userdata) {
static const JsonDispatch dispatch_table[] = {
- { "userName", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, user_name), JSON_SAFE },
- { "groupName", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, group_name), JSON_SAFE },
- { "service", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, service), 0 },
+ { "userName", JSON_VARIANT_STRING, json_dispatch_const_user_group_name, offsetof(LookupParameters, user_name), JSON_RELAX },
+ { "groupName", JSON_VARIANT_STRING, json_dispatch_const_user_group_name, offsetof(LookupParameters, group_name), JSON_RELAX },
+ { "service", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, service), 0 },
{}
};
diff --git a/src/home/homed-varlink.c b/src/home/homed-varlink.c
index 1cef25f563..7b769fd189 100644
--- a/src/home/homed-varlink.c
+++ b/src/home/homed-varlink.c
@@ -1,12 +1,13 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#include "format-util.h"
#include "group-record.h"
#include "homed-varlink.h"
+#include "json.h"
#include "strv.h"
#include "user-record-util.h"
#include "user-record.h"
#include "user-util.h"
-#include "format-util.h"
typedef struct LookupParameters {
const char *user_name;
@@ -73,9 +74,9 @@ static bool home_user_match_lookup_parameters(LookupParameters *p, Home *h) {
int vl_method_get_user_record(Varlink *link, JsonVariant *parameters, VarlinkMethodFlags flags, void *userdata) {
static const JsonDispatch dispatch_table[] = {
- { "uid", JSON_VARIANT_UNSIGNED, json_dispatch_uid_gid, offsetof(LookupParameters, uid), 0 },
- { "userName", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, user_name), JSON_SAFE },
- { "service", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, service), 0 },
+ { "uid", JSON_VARIANT_UNSIGNED, json_dispatch_uid_gid, offsetof(LookupParameters, uid), 0 },
+ { "userName", JSON_VARIANT_STRING, json_dispatch_const_user_group_name, offsetof(LookupParameters, user_name), JSON_RELAX },
+ { "service", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, service), 0 },
{}
};
@@ -188,9 +189,9 @@ static bool home_group_match_lookup_parameters(LookupParameters *p, Home *h) {
int vl_method_get_group_record(Varlink *link, JsonVariant *parameters, VarlinkMethodFlags flags, void *userdata) {
static const JsonDispatch dispatch_table[] = {
- { "gid", JSON_VARIANT_UNSIGNED, json_dispatch_uid_gid, offsetof(LookupParameters, gid), 0 },
- { "groupName", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, group_name), JSON_SAFE },
- { "service", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, service), 0 },
+ { "gid", JSON_VARIANT_UNSIGNED, json_dispatch_uid_gid, offsetof(LookupParameters, gid), 0 },
+ { "groupName", JSON_VARIANT_STRING, json_dispatch_const_user_group_name, offsetof(LookupParameters, group_name), JSON_RELAX },
+ { "service", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, service), 0 },
{}
};
@@ -257,9 +258,9 @@ int vl_method_get_group_record(Varlink *link, JsonVariant *parameters, VarlinkMe
int vl_method_get_memberships(Varlink *link, JsonVariant *parameters, VarlinkMethodFlags flags, void *userdata) {
static const JsonDispatch dispatch_table[] = {
- { "userName", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, user_name), JSON_SAFE },
- { "groupName", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, group_name), JSON_SAFE },
- { "service", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, service), 0 },
+ { "userName", JSON_VARIANT_STRING, json_dispatch_const_user_group_name, offsetof(LookupParameters, user_name), JSON_RELAX },
+ { "groupName", JSON_VARIANT_STRING, json_dispatch_const_user_group_name, offsetof(LookupParameters, group_name), JSON_RELAX },
+ { "service", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, service), 0 },
{}
};
diff --git a/src/machine/machined-varlink.c b/src/machine/machined-varlink.c
index 8b230b0078..e1a5b1b2ab 100644
--- a/src/machine/machined-varlink.c
+++ b/src/machine/machined-varlink.c
@@ -138,9 +138,9 @@ static int user_lookup_name(Manager *m, const char *name, uid_t *ret_uid, char *
static int vl_method_get_user_record(Varlink *link, JsonVariant *parameters, VarlinkMethodFlags flags, void *userdata) {
static const JsonDispatch dispatch_table[] = {
- { "uid", JSON_VARIANT_UNSIGNED, json_dispatch_uid_gid, offsetof(LookupParameters, uid), 0 },
- { "userName", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, user_name), JSON_SAFE },
- { "service", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, service), 0 },
+ { "uid", JSON_VARIANT_UNSIGNED, json_dispatch_uid_gid, offsetof(LookupParameters, uid), 0 },
+ { "userName", JSON_VARIANT_STRING, json_dispatch_const_user_group_name, offsetof(LookupParameters, user_name), JSON_RELAX },
+ { "service", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, service), 0 },
{}
};
@@ -303,9 +303,9 @@ static int group_lookup_name(Manager *m, const char *name, gid_t *ret_gid, char
static int vl_method_get_group_record(Varlink *link, JsonVariant *parameters, VarlinkMethodFlags flags, void *userdata) {
static const JsonDispatch dispatch_table[] = {
- { "gid", JSON_VARIANT_UNSIGNED, json_dispatch_uid_gid, offsetof(LookupParameters, gid), 0 },
- { "groupName", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, group_name), JSON_SAFE },
- { "service", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, service), 0 },
+ { "gid", JSON_VARIANT_UNSIGNED, json_dispatch_uid_gid, offsetof(LookupParameters, gid), 0 },
+ { "groupName", JSON_VARIANT_STRING, json_dispatch_const_user_group_name, offsetof(LookupParameters, group_name), JSON_RELAX },
+ { "service", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, service), 0 },
{}
};
@@ -355,9 +355,9 @@ static int vl_method_get_group_record(Varlink *link, JsonVariant *parameters, Va
static int vl_method_get_memberships(Varlink *link, JsonVariant *parameters, VarlinkMethodFlags flags, void *userdata) {
static const JsonDispatch dispatch_table[] = {
- { "userName", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, user_name), JSON_SAFE },
- { "groupName", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, group_name), JSON_SAFE },
- { "service", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, service), 0 },
+ { "userName", JSON_VARIANT_STRING, json_dispatch_const_user_group_name, offsetof(LookupParameters, user_name), JSON_RELAX },
+ { "groupName", JSON_VARIANT_STRING, json_dispatch_const_user_group_name, offsetof(LookupParameters, group_name), JSON_RELAX },
+ { "service", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, service), 0 },
{}
};
diff --git a/src/shared/json.c b/src/shared/json.c
index e346bb0a01..dc3b79c3f5 100644
--- a/src/shared/json.c
+++ b/src/shared/json.c
@@ -4613,7 +4613,7 @@ int json_dispatch_uid_gid(const char *name, JsonVariant *variant, JsonDispatchFl
}
int json_dispatch_user_group_name(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
- char **s = userdata;
+ char **s = ASSERT_PTR(userdata);
const char *n;
int r;
@@ -4636,6 +4636,25 @@ int json_dispatch_user_group_name(const char *name, JsonVariant *variant, JsonDi
return 0;
}
+int json_dispatch_const_user_group_name(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
+ const char **s = ASSERT_PTR(userdata), *n;
+
+ if (json_variant_is_null(variant)) {
+ *s = NULL;
+ return 0;
+ }
+
+ if (!json_variant_is_string(variant))
+ return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a string.", strna(name));
+
+ n = json_variant_string(variant);
+ if (!valid_user_group_name(n, FLAGS_SET(flags, JSON_RELAX) ? VALID_USER_RELAX : 0))
+ return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a valid user/group name.", strna(name));
+
+ *s = n;
+ return 0;
+}
+
int json_dispatch_id128(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
sd_id128_t *uuid = userdata;
int r;
diff --git a/src/shared/json.h b/src/shared/json.h
index e62c71a249..e353b7bb19 100644
--- a/src/shared/json.h
+++ b/src/shared/json.h
@@ -380,6 +380,7 @@ int json_dispatch_uint16(const char *name, JsonVariant *variant, JsonDispatchFla
int json_dispatch_int16(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
int json_dispatch_uid_gid(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
int json_dispatch_user_group_name(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
+int json_dispatch_const_user_group_name(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
int json_dispatch_id128(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
int json_dispatch_unsupported(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
diff --git a/src/userdb/userwork.c b/src/userdb/userwork.c
index 569dba3285..7c8b49c588 100644
--- a/src/userdb/userwork.c
+++ b/src/userdb/userwork.c
@@ -9,12 +9,13 @@
#include "fd-util.h"
#include "group-record.h"
#include "io-util.h"
+#include "json.h"
#include "main-func.h"
#include "process-util.h"
#include "strv.h"
#include "time-util.h"
-#include "user-record-nss.h"
#include "user-record.h"
+#include "user-record-nss.h"
#include "user-util.h"
#include "userdb.h"
#include "varlink.h"
@@ -131,9 +132,9 @@ static int userdb_flags_from_service(Varlink *link, const char *service, UserDBF
static int vl_method_get_user_record(Varlink *link, JsonVariant *parameters, VarlinkMethodFlags flags, void *userdata) {
static const JsonDispatch dispatch_table[] = {
- { "uid", JSON_VARIANT_UNSIGNED, json_dispatch_uid_gid, offsetof(LookupParameters, uid), 0 },
- { "userName", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, user_name), 0 },
- { "service", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, service), 0 },
+ { "uid", JSON_VARIANT_UNSIGNED, json_dispatch_uid_gid, offsetof(LookupParameters, uid), 0 },
+ { "userName", JSON_VARIANT_STRING, json_dispatch_const_user_group_name, offsetof(LookupParameters, user_name), JSON_RELAX },
+ { "service", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, service), 0 },
{}
};
@@ -267,9 +268,9 @@ static int build_group_json(Varlink *link, GroupRecord *gr, JsonVariant **ret) {
static int vl_method_get_group_record(Varlink *link, JsonVariant *parameters, VarlinkMethodFlags flags, void *userdata) {
static const JsonDispatch dispatch_table[] = {
- { "gid", JSON_VARIANT_UNSIGNED, json_dispatch_uid_gid, offsetof(LookupParameters, gid), 0 },
- { "groupName", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, group_name), 0 },
- { "service", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, service), 0 },
+ { "gid", JSON_VARIANT_UNSIGNED, json_dispatch_uid_gid, offsetof(LookupParameters, gid), 0 },
+ { "groupName", JSON_VARIANT_STRING, json_dispatch_const_user_group_name, offsetof(LookupParameters, group_name), JSON_RELAX },
+ { "service", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, service), 0 },
{}
};
@@ -352,9 +353,9 @@ static int vl_method_get_group_record(Varlink *link, JsonVariant *parameters, Va
static int vl_method_get_memberships(Varlink *link, JsonVariant *parameters, VarlinkMethodFlags flags, void *userdata) {
static const JsonDispatch dispatch_table[] = {
- { "userName", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, user_name), 0 },
- { "groupName", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, group_name), 0 },
- { "service", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, service), 0 },
+ { "userName", JSON_VARIANT_STRING, json_dispatch_const_user_group_name, offsetof(LookupParameters, user_name), JSON_RELAX },
+ { "groupName", JSON_VARIANT_STRING, json_dispatch_const_user_group_name, offsetof(LookupParameters, group_name), JSON_RELAX },
+ { "service", JSON_VARIANT_STRING, json_dispatch_const_string, offsetof(LookupParameters, service), 0 },
{}
};

View File

@ -0,0 +1,137 @@
From 3c1844015ff471ca28b7359624323948cc1303f5 Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Tue, 15 Oct 2024 13:40:24 +0200
Subject: [PATCH] sd-varlink: add new sd_varlink_error_is_invalid_parameter()
helper
(cherry picked from commit 12641ecd67875b7bf18db06c0afa40c37d804750)
Related: RHEL-55266
---
src/shared/varlink.c | 20 +++++++++++++++
src/shared/varlink.h | 2 ++
src/test/test-varlink.c | 56 ++++++++++++++++++++++++++++++++++++++++-
3 files changed, 77 insertions(+), 1 deletion(-)
diff --git a/src/shared/varlink.c b/src/shared/varlink.c
index 49593aa05a..0f5db09cea 100644
--- a/src/shared/varlink.c
+++ b/src/shared/varlink.c
@@ -2687,3 +2687,23 @@ int varlink_server_deserialize_one(VarlinkServer *s, const char *value, FDSet *f
LIST_PREPEND(sockets, s->sockets, TAKE_PTR(ss));
return 0;
}
+
+int varlink_error_is_invalid_parameter(const char *error, JsonVariant *parameter, const char *name) {
+
+ /* Returns true if the specified error result is an invalid parameter error for the parameter 'name' */
+
+ if (!streq_ptr(error, VARLINK_ERROR_INVALID_PARAMETER))
+ return false;
+
+ if (!name)
+ return true;
+
+ if (!json_variant_is_object(parameter))
+ return false;
+
+ JsonVariant *e = json_variant_by_key(parameter, "parameter");
+ if (!e || !json_variant_is_string(e))
+ return false;
+
+ return streq(json_variant_string(e), name);
+}
diff --git a/src/shared/varlink.h b/src/shared/varlink.h
index e51ccd9107..a4170737db 100644
--- a/src/shared/varlink.h
+++ b/src/shared/varlink.h
@@ -161,6 +161,8 @@ unsigned varlink_server_current_connections(VarlinkServer *s);
int varlink_server_set_description(VarlinkServer *s, const char *description);
+int varlink_error_is_invalid_parameter(const char *error, JsonVariant *parameter, const char *name);
+
DEFINE_TRIVIAL_CLEANUP_FUNC(Varlink *, varlink_unref);
DEFINE_TRIVIAL_CLEANUP_FUNC(Varlink *, varlink_close_unref);
DEFINE_TRIVIAL_CLEANUP_FUNC(Varlink *, varlink_flush_close_unref);
diff --git a/src/test/test-varlink.c b/src/test/test-varlink.c
index 634baf1ae8..13f772cf4e 100644
--- a/src/test/test-varlink.c
+++ b/src/test/test-varlink.c
@@ -10,6 +10,7 @@
#include "json.h"
#include "rm-rf.h"
#include "strv.h"
+#include "tests.h"
#include "tmpfile-util.h"
#include "user-util.h"
#include "varlink.h"
@@ -184,7 +185,7 @@ static int block_fd_handler(sd_event_source *s, int fd, uint32_t revents, void *
return 0;
}
-int main(int argc, char *argv[]) {
+TEST(chat) {
_cleanup_(sd_event_source_unrefp) sd_event_source *block_event = NULL;
_cleanup_(varlink_server_unrefp) VarlinkServer *s = NULL;
_cleanup_(varlink_flush_close_unrefp) Varlink *c = NULL;
@@ -234,6 +235,59 @@ int main(int argc, char *argv[]) {
assert_se(sd_event_loop(e) >= 0);
assert_se(pthread_join(t, NULL) == 0);
+}
+
+static int method_invalid(Varlink *link, JsonVariant *parameters, VarlinkMethodFlags flags, void *userdata) {
+ int r;
+
+ JsonDispatch table[] = {
+ { "iexist", JSON_VARIANT_STRING, json_dispatch_const_string, 0, JSON_MANDATORY },
+ {}
+ };
+
+ const char *p = NULL;
+
+ r = varlink_dispatch(link, parameters, table, &p);
+ if (r != 0)
+ return r;
+ assert_not_reached();
+}
+
+static int reply_invalid(Varlink *link, JsonVariant *parameters, const char *error_id, VarlinkReplyFlags flags, void *userdata) {
+ assert(varlink_error_is_invalid_parameter(error_id, parameters, "idontexist"));
+ assert(sd_event_exit(varlink_get_event(link), EXIT_SUCCESS) >= 0);
return 0;
}
+
+TEST(invalid_parameter) {
+ _cleanup_(sd_event_unrefp) sd_event *e = NULL;
+ assert_se(sd_event_default(&e) >= 0);
+
+ _cleanup_(varlink_server_unrefp) VarlinkServer *s = NULL;
+ assert_se(varlink_server_new(&s, 0) >= 0);
+
+ assert_se(varlink_server_attach_event(s, e, 0) >= 0);
+
+ assert_se(varlink_server_bind_method(s, "foo.mytest.Invalid", method_invalid) >= 0);
+
+ int connfd[2];
+ assert_se(socketpair(AF_UNIX, SOCK_STREAM|SOCK_NONBLOCK|SOCK_CLOEXEC, 0, connfd) >= 0);
+ assert_se(varlink_server_add_connection(s, connfd[0], /* ret= */ NULL) >= 0);
+
+ _cleanup_(varlink_unrefp) Varlink *c = NULL;
+ assert_se(varlink_connect_fd(&c, connfd[1]) >= 0);
+
+ assert_se(varlink_attach_event(c, e, 0) >= 0);
+
+ assert_se(varlink_bind_reply(c, reply_invalid) >= 0);
+
+ assert_se(varlink_invokeb(c, "foo.mytest.Invalid", JSON_BUILD_OBJECT(
+ JSON_BUILD_PAIR_STRING("iexist", "foo"),
+ JSON_BUILD_PAIR_STRING("idontexist", "bar"))) >= 0);
+
+
+ assert_se(sd_event_loop(e) >= 0);
+}
+
+DEFINE_TEST_MAIN(LOG_DEBUG);

View File

@ -0,0 +1,39 @@
From ba1ea0689633b7e61f50277dcfdec80ff50eb746 Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Tue, 15 Oct 2024 13:59:57 +0200
Subject: [PATCH] userdb: return ESRCH if userdb service refuses a user/group
name as invalid
if a userdb service refuse a user/group name as invalid, let's turn this
into ESRCH client-side following that there definitely is no user/group
record for a completely invalid user/group name.
Replaces: #34558
(cherry picked from commit 69cc4ee134f420dcdd6aac08446bd852d8739694)
Resolves: RHEL-55266
---
src/shared/userdb.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/src/shared/userdb.c b/src/shared/userdb.c
index 4ea4ac4d72..ceb285c8d8 100644
--- a/src/shared/userdb.c
+++ b/src/shared/userdb.c
@@ -159,9 +159,15 @@ static int userdb_on_query_reply(
if (error_id) {
log_debug("Got lookup error: %s", error_id);
+ /* Convert various forms of record not found into -ESRCH, since NSS typically doesn't care,
+ * about the details. Note that if a userName specification is refused as invalid parameter,
+ * we also turn this into -ESRCH following the logic that there cannot be a user record for a
+ * completely invalid user name. */
if (STR_IN_SET(error_id,
"io.systemd.UserDatabase.NoRecordFound",
- "io.systemd.UserDatabase.ConflictingRecordFound"))
+ "io.systemd.UserDatabase.ConflictingRecordFound") ||
+ varlink_error_is_invalid_parameter(error_id, parameters, "userName") ||
+ varlink_error_is_invalid_parameter(error_id, parameters, "groupName"))
r = -ESRCH;
else if (streq(error_id, "io.systemd.UserDatabase.ServiceNotAvailable"))
r = -EHOSTDOWN;

View File

@ -0,0 +1,274 @@
From 372af57b902d95dfbc1b5f785010862e4b1eb396 Mon Sep 17 00:00:00 2001
From: Frantisek Sumsal <frantisek@sumsal.cz>
Date: Tue, 16 May 2023 19:09:13 +0200
Subject: [PATCH] test: rename assert.sh to util.sh
So we can extend it with additional utility functions without making it
confusing.
No functional change.
(cherry picked from commit cb153b4fe9046590eb8efba66b67a0db899cb96d)
Related: RHEL-55301
---
test/units/testsuite-17.02.sh | 4 ++--
test/units/testsuite-17.07.sh | 4 ++--
test/units/testsuite-17.08.sh | 4 ++--
test/units/testsuite-17.09.sh | 4 ++--
test/units/testsuite-17.12.sh | 4 ++--
test/units/testsuite-26.sh | 4 ++--
test/units/testsuite-35.sh | 4 ++--
test/units/testsuite-45.sh | 4 ++--
test/units/testsuite-58.sh | 4 ++--
test/units/testsuite-60.sh | 4 ++--
test/units/testsuite-65.sh | 4 ++--
test/units/testsuite-71.sh | 4 ++--
test/units/testsuite-73.sh | 4 ++--
test/units/testsuite-75.sh | 4 ++--
test/units/testsuite-76.sh | 4 ++--
test/units/{assert.sh => util.sh} | 2 +-
16 files changed, 31 insertions(+), 31 deletions(-)
rename test/units/{assert.sh => util.sh} (95%)
diff --git a/test/units/testsuite-17.02.sh b/test/units/testsuite-17.02.sh
index 82f9fd1f62..22b1552653 100755
--- a/test/units/testsuite-17.02.sh
+++ b/test/units/testsuite-17.02.sh
@@ -7,8 +7,8 @@
set -eux
set -o pipefail
-# shellcheck source=test/units/assert.sh
-. "$(dirname "$0")"/assert.sh
+# shellcheck source=test/units/util.sh
+. "$(dirname "$0")"/util.sh
mkdir -p /run/udev/rules.d/
diff --git a/test/units/testsuite-17.07.sh b/test/units/testsuite-17.07.sh
index 549107af10..50dc16b14b 100755
--- a/test/units/testsuite-17.07.sh
+++ b/test/units/testsuite-17.07.sh
@@ -3,8 +3,8 @@
set -ex
set -o pipefail
-# shellcheck source=test/units/assert.sh
-. "$(dirname "$0")"/assert.sh
+# shellcheck source=test/units/util.sh
+. "$(dirname "$0")"/util.sh
wait_service_active() {(
set +ex
diff --git a/test/units/testsuite-17.08.sh b/test/units/testsuite-17.08.sh
index f740b337f7..3502538fd4 100755
--- a/test/units/testsuite-17.08.sh
+++ b/test/units/testsuite-17.08.sh
@@ -3,8 +3,8 @@
set -ex
set -o pipefail
-# shellcheck source=test/units/assert.sh
-. "$(dirname "$0")"/assert.sh
+# shellcheck source=test/units/util.sh
+. "$(dirname "$0")"/util.sh
# This is a test for issue #24518.
diff --git a/test/units/testsuite-17.09.sh b/test/units/testsuite-17.09.sh
index 01ac5f1709..c3914d9356 100755
--- a/test/units/testsuite-17.09.sh
+++ b/test/units/testsuite-17.09.sh
@@ -3,8 +3,8 @@
set -ex
set -o pipefail
-# shellcheck source=test/units/assert.sh
-. "$(dirname "$0")"/assert.sh
+# shellcheck source=test/units/util.sh
+. "$(dirname "$0")"/util.sh
# This is a test for issue #24987.
diff --git a/test/units/testsuite-17.12.sh b/test/units/testsuite-17.12.sh
index df74d356ee..ccc91bfe46 100755
--- a/test/units/testsuite-17.12.sh
+++ b/test/units/testsuite-17.12.sh
@@ -3,8 +3,8 @@
set -ex
set -o pipefail
-# shellcheck source=test/units/assert.sh
-. "$(dirname "$0")"/assert.sh
+# shellcheck source=test/units/util.sh
+. "$(dirname "$0")"/util.sh
create_link_file() {
name=${1?}
diff --git a/test/units/testsuite-26.sh b/test/units/testsuite-26.sh
index debee91dde..340e02a561 100755
--- a/test/units/testsuite-26.sh
+++ b/test/units/testsuite-26.sh
@@ -3,8 +3,8 @@
set -eux
set -o pipefail
-# shellcheck source=test/units/assert.sh
-. "$(dirname "$0")"/assert.sh
+# shellcheck source=test/units/util.sh
+. "$(dirname "$0")"/util.sh
: >/failed
diff --git a/test/units/testsuite-35.sh b/test/units/testsuite-35.sh
index 1863c535a4..18c50279e2 100755
--- a/test/units/testsuite-35.sh
+++ b/test/units/testsuite-35.sh
@@ -3,8 +3,8 @@
set -eux
set -o pipefail
-# shellcheck source=test/units/assert.sh
-. "$(dirname "$0")"/assert.sh
+# shellcheck source=test/units/util.sh
+. "$(dirname "$0")"/util.sh
cleanup_test_user() (
set +ex
diff --git a/test/units/testsuite-45.sh b/test/units/testsuite-45.sh
index 7e757e4b00..c85e17da7b 100755
--- a/test/units/testsuite-45.sh
+++ b/test/units/testsuite-45.sh
@@ -4,8 +4,8 @@
set -eux
set -o pipefail
-# shellcheck source=test/units/assert.sh
-. "$(dirname "$0")"/assert.sh
+# shellcheck source=test/units/util.sh
+. "$(dirname "$0")"/util.sh
restore_timezone() {
if [[ -f /tmp/timezone.bak ]]; then
diff --git a/test/units/testsuite-58.sh b/test/units/testsuite-58.sh
index f41069ee04..850111b319 100755
--- a/test/units/testsuite-58.sh
+++ b/test/units/testsuite-58.sh
@@ -8,8 +8,8 @@ if ! command -v systemd-repart &>/dev/null; then
exit 0
fi
-# shellcheck source=test/units/assert.sh
-. "$(dirname "$0")"/assert.sh
+# shellcheck source=test/units/util.sh
+. "$(dirname "$0")"/util.sh
export SYSTEMD_LOG_LEVEL=debug
export PAGER=cat
diff --git a/test/units/testsuite-60.sh b/test/units/testsuite-60.sh
index a29364568d..920f5019d2 100755
--- a/test/units/testsuite-60.sh
+++ b/test/units/testsuite-60.sh
@@ -3,8 +3,8 @@
set -eux
set -o pipefail
-# shellcheck source=test/units/assert.sh
-. "$(dirname "$0")"/assert.sh
+# shellcheck source=test/units/util.sh
+. "$(dirname "$0")"/util.sh
teardown_test_dependencies() (
set +eux
diff --git a/test/units/testsuite-65.sh b/test/units/testsuite-65.sh
index 0fb143bde7..4e12511a1f 100755
--- a/test/units/testsuite-65.sh
+++ b/test/units/testsuite-65.sh
@@ -3,8 +3,8 @@
# shellcheck disable=SC2016
set -eux
-# shellcheck source=test/units/assert.sh
-. "$(dirname "$0")"/assert.sh
+# shellcheck source=test/units/util.sh
+. "$(dirname "$0")"/util.sh
# On RHEL9 we don't have the `util.sh` script, so we need to define the `runas` function here
runas() {
diff --git a/test/units/testsuite-71.sh b/test/units/testsuite-71.sh
index 2382cccb3a..49efa4f982 100755
--- a/test/units/testsuite-71.sh
+++ b/test/units/testsuite-71.sh
@@ -4,8 +4,8 @@
set -eux
set -o pipefail
-# shellcheck source=test/units/assert.sh
-. "$(dirname "$0")"/assert.sh
+# shellcheck source=test/units/util.sh
+. "$(dirname "$0")"/util.sh
restore_hostname() {
if [[ -e /tmp/hostname.bak ]]; then
diff --git a/test/units/testsuite-73.sh b/test/units/testsuite-73.sh
index f9e2dce1bf..279507af31 100755
--- a/test/units/testsuite-73.sh
+++ b/test/units/testsuite-73.sh
@@ -4,8 +4,8 @@
set -eux
set -o pipefail
-# shellcheck source=test/units/assert.sh
-. "$(dirname "$0")"/assert.sh
+# shellcheck source=test/units/util.sh
+. "$(dirname "$0")"/util.sh
enable_debug() {
mkdir -p /run/systemd/system/systemd-localed.service.d
diff --git a/test/units/testsuite-75.sh b/test/units/testsuite-75.sh
index ddd86d09bb..370a91863f 100755
--- a/test/units/testsuite-75.sh
+++ b/test/units/testsuite-75.sh
@@ -11,8 +11,8 @@
set -eux
set -o pipefail
-# shellcheck source=test/units/assert.sh
-. "$(dirname "$0")"/assert.sh
+# shellcheck source=test/units/util.sh
+. "$(dirname "$0")"/util.sh
: >/failed
diff --git a/test/units/testsuite-76.sh b/test/units/testsuite-76.sh
index cb571f8b97..0436afec65 100755
--- a/test/units/testsuite-76.sh
+++ b/test/units/testsuite-76.sh
@@ -3,8 +3,8 @@
set -eux
set -o pipefail
-# shellcheck source=test/units/assert.sh
-. "$(dirname "$0")"/assert.sh
+# shellcheck source=test/units/util.sh
+. "$(dirname "$0")"/util.sh
export SYSTEMD_LOG_LEVEL=debug
diff --git a/test/units/assert.sh b/test/units/util.sh
similarity index 95%
rename from test/units/assert.sh
rename to test/units/util.sh
index 2f4d93ab8c..00b8c5e393 100755
--- a/test/units/assert.sh
+++ b/test/units/util.sh
@@ -1,7 +1,7 @@
#!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later
-# utility functions for shell tests
+# Utility functions for shell tests
assert_true() {(
set +ex

View File

@ -0,0 +1,89 @@
From 14a2f6dd75ef4eefd0a7791a7c086e72a141bc69 Mon Sep 17 00:00:00 2001
From: Richard Phibel <rphibel@googlemail.com>
Date: Tue, 23 May 2023 16:09:40 +0200
Subject: [PATCH] core: Don't GC unit if it is in cgroup_empty_queue
The gc_unit_queue is dispatched before the cgroup_empty_queue. Because
of this, when we enter in on_cgroup_empty_event, the unit in
cgroup_empty_queue may already have been freed and we don't clean up the
corresponding cgroup. With this change, we prevent the unit from being
garbage collected if it is in the cgroup_empty_queue.
(cherry picked from commit 8db998981a4fefd0122bcf5f965726b63c9045c2)
Resolves: RHEL-55301
---
src/core/unit.c | 3 ++
test/units/testsuite-19.cleanup-slice.sh | 49 ++++++++++++++++++++++++
2 files changed, 52 insertions(+)
create mode 100755 test/units/testsuite-19.cleanup-slice.sh
diff --git a/src/core/unit.c b/src/core/unit.c
index f109d16eb3..08f87851d9 100644
--- a/src/core/unit.c
+++ b/src/core/unit.c
@@ -417,6 +417,9 @@ bool unit_may_gc(Unit *u) {
if (u->perpetual)
return false;
+ if (u->in_cgroup_empty_queue)
+ return false;
+
if (sd_bus_track_count(u->bus_track) > 0)
return false;
diff --git a/test/units/testsuite-19.cleanup-slice.sh b/test/units/testsuite-19.cleanup-slice.sh
new file mode 100755
index 0000000000..5d63160334
--- /dev/null
+++ b/test/units/testsuite-19.cleanup-slice.sh
@@ -0,0 +1,49 @@
+#!/usr/bin/env bash
+# SPDX-License-Identifier: LGPL-2.1-or-later
+set -eux
+set -o pipefail
+
+# shellcheck source=test/units/util.sh
+. "$(dirname "$0")"/util.sh
+
+export SYSTEMD_LOG_LEVEL=debug
+
+# Create service with KillMode=none inside a slice
+cat <<EOF >/run/systemd/system/test19cleanup.service
+[Unit]
+Description=Test 19 cleanup Service
+[Service]
+Slice=test19cleanup.slice
+Type=exec
+ExecStart=sleep infinity
+KillMode=none
+EOF
+cat <<EOF >/run/systemd/system/test19cleanup.slice
+[Unit]
+Description=Test 19 cleanup Slice
+EOF
+
+# Start service
+systemctl start test19cleanup.service
+assert_rc 0 systemd-cgls /test19cleanup.slice
+
+pid=$(systemctl show --property MainPID --value test19cleanup)
+ps "$pid"
+
+# Stop slice
+# The sleep process will not be killed because of KillMode=none
+# Since there is still a process running under it, the /test19cleanup.slice cgroup won't be removed
+systemctl stop test19cleanup.slice
+
+ps "$pid"
+
+# Kill sleep process manually
+kill -s TERM "$pid"
+while kill -0 "$pid" 2>/dev/null; do sleep 0.1; done
+
+timeout 30 bash -c 'while systemd-cgls /test19cleanup.slice/test19cleanup.service >& /dev/null; do sleep .5; done'
+assert_rc 1 systemd-cgls /test19cleanup.slice/test19cleanup.service
+
+# Check that empty cgroup /test19cleanup.slice has been removed
+timeout 30 bash -c 'while systemd-cgls /test19cleanup.slice >& /dev/null; do sleep .5; done'
+assert_rc 1 systemd-cgls /test19cleanup.slice

View File

@ -0,0 +1,62 @@
From 250b4c9364ee455034ff93a2ac379268963a39a9 Mon Sep 17 00:00:00 2001
From: Richard Phibel <rphibel@googlemail.com>
Date: Thu, 25 May 2023 19:49:11 +0200
Subject: [PATCH] core: Handle cgroup pruning in on_cgroup_empty_event
This change removes the pruning of cgroups for FAILED/INACTIVE units
from per-unit-type handlers and moves it in on_cgroup_empty_event.
(cherry picked from commit 380dd177798507ced9cde580c04539f54bb980c8)
Related: RHEL-55301
---
src/core/cgroup.c | 4 +++-
src/core/scope.c | 5 -----
src/core/service.c | 3 +--
3 files changed, 4 insertions(+), 8 deletions(-)
diff --git a/src/core/cgroup.c b/src/core/cgroup.c
index c44966839c..fa3e7fca05 100644
--- a/src/core/cgroup.c
+++ b/src/core/cgroup.c
@@ -3007,7 +3007,9 @@ static int on_cgroup_empty_event(sd_event_source *s, void *userdata) {
unit_add_to_gc_queue(u);
- if (UNIT_VTABLE(u)->notify_cgroup_empty)
+ if (IN_SET(unit_active_state(u), UNIT_INACTIVE, UNIT_FAILED))
+ unit_prune_cgroup(u);
+ else if (UNIT_VTABLE(u)->notify_cgroup_empty)
UNIT_VTABLE(u)->notify_cgroup_empty(u);
return 0;
diff --git a/src/core/scope.c b/src/core/scope.c
index e2fc4cc995..087ac2853a 100644
--- a/src/core/scope.c
+++ b/src/core/scope.c
@@ -628,11 +628,6 @@ static void scope_notify_cgroup_empty_event(Unit *u) {
if (IN_SET(s->state, SCOPE_RUNNING, SCOPE_ABANDONED, SCOPE_STOP_SIGTERM, SCOPE_STOP_SIGKILL))
scope_enter_dead(s, SCOPE_SUCCESS);
-
- /* If the cgroup empty notification comes when the unit is not active, we must have failed to clean
- * up the cgroup earlier and should do it now. */
- if (IN_SET(s->state, SCOPE_DEAD, SCOPE_FAILED))
- unit_prune_cgroup(u);
}
static void scope_notify_cgroup_oom_event(Unit *u, bool managed_oom) {
diff --git a/src/core/service.c b/src/core/service.c
index 902948905f..433df0afe3 100644
--- a/src/core/service.c
+++ b/src/core/service.c
@@ -3446,8 +3446,7 @@ static void service_notify_cgroup_empty_event(Unit *u) {
/* If the cgroup empty notification comes when the unit is not active, we must have failed to clean
* up the cgroup earlier and should do it now. */
- case SERVICE_DEAD:
- case SERVICE_FAILED:
+ case SERVICE_AUTO_RESTART:
unit_prune_cgroup(u);
break;

View File

@ -0,0 +1,50 @@
From 0b3c0a40c1d4a6be0c259795248f963d1ac17e9f Mon Sep 17 00:00:00 2001
From: Richard Phibel <rphibel@googlemail.com>
Date: Tue, 30 May 2023 00:45:09 +0200
Subject: [PATCH] Fix failing test
In test-execute, only the unit was started, not the slice. Because of
that the slice cgroup was pruned even if it was still needed. From what
I can tell, this is because, in the test, we don't have all the
mechanics that starts the slice for a service. To fix the issue the
slice is started manually.
(cherry picked from commit fc6172b1d844fb2e93cb1180810eba561aead3b8)
Related: RHEL-55301
---
src/test/test-execute.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/src/test/test-execute.c b/src/test/test-execute.c
index 1f838e5c91..20d6035cee 100644
--- a/src/test/test-execute.c
+++ b/src/test/test-execute.c
@@ -207,6 +207,17 @@ static bool is_inaccessible_available(void) {
return true;
}
+static void start_parent_slices(Unit *unit) {
+ Unit *slice;
+
+ slice = UNIT_GET_SLICE(unit);
+ if (slice) {
+ start_parent_slices(slice);
+ int r = unit_start(slice, NULL);
+ assert_se(r >= 0 || r == -EALREADY);
+ }
+}
+
static void _test(const char *file, unsigned line, const char *func,
Manager *m, const char *unit_name, int status_expected, int code_expected) {
Unit *unit;
@@ -214,6 +225,9 @@ static void _test(const char *file, unsigned line, const char *func,
assert_se(unit_name);
assert_se(manager_load_startable_unit_or_warn(m, unit_name, NULL, &unit) >= 0);
+ /* We need to start the slices as well otherwise the slice cgroups might be pruned
+ * in on_cgroup_empty_event. */
+ start_parent_slices(unit);
assert_se(unit_start(unit, NULL) >= 0);
check_main_result(file, line, func, m, unit, status_expected, code_expected);
}

View File

@ -0,0 +1,46 @@
From 3f9329109403b981a01e64b41c0fcca02920bb23 Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Thu, 8 Jun 2023 11:11:28 +0200
Subject: [PATCH] unit: don't gc unit in oom queue
This is a follow-up for 8db998981a4fefd0122bcf5f965726b63c9045c2, and
follows a similar logic: a pending OOM event really trumps everything:
we should not GC a unit while it is pending.
(cherry picked from commit 935f80428fd3220c83163cc4b5a637873e68babb)
Related: RHEL-55301
---
src/core/cgroup.c | 2 ++
src/core/unit.c | 5 ++++-
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/src/core/cgroup.c b/src/core/cgroup.c
index fa3e7fca05..7d6b1119be 100644
--- a/src/core/cgroup.c
+++ b/src/core/cgroup.c
@@ -3184,6 +3184,8 @@ static int on_cgroup_oom_event(sd_event_source *s, void *userdata) {
}
(void) unit_check_oom(u);
+ unit_add_to_gc_queue(u);
+
return 0;
}
diff --git a/src/core/unit.c b/src/core/unit.c
index 08f87851d9..4360351bd9 100644
--- a/src/core/unit.c
+++ b/src/core/unit.c
@@ -417,7 +417,10 @@ bool unit_may_gc(Unit *u) {
if (u->perpetual)
return false;
- if (u->in_cgroup_empty_queue)
+ /* if we saw a cgroup empty event for this unit, stay around until we processed it so that we remove
+ * the empty cgroup if possible. Similar, process any pending OOM events if they are already queued
+ * before we release the unit. */
+ if (u->in_cgroup_empty_queue || u->in_cgroup_oom_queue)
return false;
if (sd_bus_track_count(u->bus_track) > 0)

View File

@ -0,0 +1,81 @@
From 31f8d699974e114868a90b49141d4130287a499d Mon Sep 17 00:00:00 2001
From: Lennart Poettering <lennart@poettering.net>
Date: Thu, 8 Jun 2023 11:11:49 +0200
Subject: [PATCH] core: do not GC units/jobs that are in the D-Bus queue
Let's make sure that D-Bus messages are always sent out when pending,
before we might GC a unit/job.
This is kinda a follow-up for 8db998981a4fefd0122bcf5f965726b63c9045c2,
and a similar logic really applies: GC should only be done if we
processed everything else, generated evertyhing else and really don't
need it anymore.
(cherry picked from commit af05bb971731fe7280e4e85fde71c2e671772c18)
Related: RHEL-55301
---
src/core/dbus-job.c | 3 +++
src/core/dbus-unit.c | 3 +++
src/core/job.c | 4 ++++
src/core/unit.c | 4 ++++
4 files changed, 14 insertions(+)
diff --git a/src/core/dbus-job.c b/src/core/dbus-job.c
index 9792a5c44a..c88d8c2dd5 100644
--- a/src/core/dbus-job.c
+++ b/src/core/dbus-job.c
@@ -241,6 +241,9 @@ void bus_job_send_change_signal(Job *j) {
if (j->in_dbus_queue) {
LIST_REMOVE(dbus_queue, j->manager->dbus_job_queue, j);
j->in_dbus_queue = false;
+
+ /* The job might be good to be GC once its pending signals have been sent */
+ job_add_to_gc_queue(j);
}
r = bus_foreach_bus(j->manager, j->bus_track, j->sent_dbus_new_signal ? send_changed_signal : send_new_signal, j);
diff --git a/src/core/dbus-unit.c b/src/core/dbus-unit.c
index b45b3fdb53..9d3c3be4e9 100644
--- a/src/core/dbus-unit.c
+++ b/src/core/dbus-unit.c
@@ -1629,6 +1629,9 @@ void bus_unit_send_change_signal(Unit *u) {
if (u->in_dbus_queue) {
LIST_REMOVE(dbus_queue, u->manager->dbus_unit_queue, u);
u->in_dbus_queue = false;
+
+ /* The unit might be good to be GC once its pending signals have been sent */
+ unit_add_to_gc_queue(u);
}
if (!u->id)
diff --git a/src/core/job.c b/src/core/job.c
index 032554a0ac..bd3a741ffd 100644
--- a/src/core/job.c
+++ b/src/core/job.c
@@ -1407,6 +1407,10 @@ bool job_may_gc(Job *j) {
if (!UNIT_VTABLE(j->unit)->gc_jobs)
return false;
+ /* Make sure to send out pending D-Bus events before we unload the unit */
+ if (j->in_dbus_queue)
+ return false;
+
if (sd_bus_track_count(j->bus_track) > 0)
return false;
diff --git a/src/core/unit.c b/src/core/unit.c
index 4360351bd9..03eb3aaecf 100644
--- a/src/core/unit.c
+++ b/src/core/unit.c
@@ -423,6 +423,10 @@ bool unit_may_gc(Unit *u) {
if (u->in_cgroup_empty_queue || u->in_cgroup_oom_queue)
return false;
+ /* Make sure to send out D-Bus events before we unload the unit */
+ if (u->in_dbus_queue)
+ return false;
+
if (sd_bus_track_count(u->bus_track) > 0)
return false;

View File

@ -12,10 +12,6 @@
%global system_unit_dir %{pkgdir}/system
%global user_unit_dir %{pkgdir}/user
# defining macros needed by SELinux
%global selinuxtype targeted
%global modulename systemd-container-coredump
# Bootstrap may be needed to break intercircular dependencies with
# cryptsetup, e.g. when re-building cryptsetup on a json-c SONAME-bump.
%bcond_with bootstrap
@ -25,7 +21,7 @@
Name: systemd
Url: https://systemd.io
Version: 252
Release: 46%{?dist}
Release: 51%{?dist}
# For a breakdown of the licensing, see README
License: LGPLv2+ and MIT and GPLv2+
Summary: System and Service Manager
@ -74,8 +70,6 @@ Source25: rc.local
%global rhel_nns_version 0.5
Source26: https://gitlab.com/mschmidt2/rhel-net-naming-sysattrs/-/archive/v%{rhel_nns_version}/rhel-net-naming-sysattrs-v%{rhel_nns_version}.tar.gz
Source27: %{modulename}.pp.bz2
%if 0
GIT_DIR=../../src/systemd/.git git format-patch-ab --no-signature -M -N v235..v235-stable
i=1; for j in 00*patch; do printf "Patch%04d: %s\n" $i $j; i=$((i+1));done|xclip
@ -1131,6 +1125,74 @@ Patch1039: 1039-efi-add-helper-API-for-detecting-confidential-virtua.patch
Patch1040: 1040-efi-don-t-pull-kernel-cmdline-from-SMBIOS-in-a-confi.patch
Patch1041: 1041-Fix-detection-of-TDX-confidential-VM-on-Azure-platfo.patch
Patch1042: 1042-ukify-Skip-test-on-architectures-without-UEFI.patch
Patch1043: 1043-man-using-WantedBy-default.target-is-not-a-good-idea.patch
Patch1044: 1044-logind-tighten-for-which-classes-of-sessions-we-do-s.patch
Patch1045: 1045-Fix-configuration-for-Packit-1.0.0.patch
Patch1046: 1046-udev-net_id-introduce-naming-scheme-for-RHEL-9.6.patch
Patch1047: 1047-hwdb-Fix-accelerometer-mount-matrix-for-ASUS-T100TAS.patch
Patch1048: 1048-hwdb.d-60-keyboard.hwdb-add-Clevo-mic-mute-quirk-for.patch
Patch1049: 1049-hwdb-add-entry-for-Dell-AlpsPS-2-ALPS-DualPoint-Touc.patch
Patch1050: 1050-hwdb-Mark-Apple-Wireless-keyboards-as-not-having-Num.patch
Patch1051: 1051-update-keyboard-hwdb-to-add-acer-Predator-PHN16-72.patch
Patch1052: 1052-hwdb-death-to-tabs.patch
Patch1053: 1053-hwdb.d-60-keyboard.hwdb-add-Clevo-mic-mute-quirk-for.patch
Patch1054: 1054-Add-ACCEL_MOUNT_MATRIX-for-Chuwi-Hi10-Max.patch
Patch1055: 1055-Add-HUAWEI-MateBook-D-15-AMD-ACCEL-properties.patch
Patch1056: 1056-hwdb-add-Kensington-SlimBlade-Pro-trackball-Bluetoot.patch
Patch1057: 1057-hwdb-Add-accel-orientation-quirk-for-the-IdeaPad-Due.patch
Patch1058: 1058-hwdb-add-keymaps-for-Acer-Nitro-5-AN515-47-34493.patch
Patch1059: 1059-hwdb-make-key-map-match-comment-for-one-laptop.patch
Patch1060: 1060-hwdb-there-s-KEY_BRIGHTNESS_AUTO-these-days-hence-ho.patch
Patch1061: 1061-hwdb-use-KEY_ROTATE_DISPLAY-for-various-cases-of-dis.patch
Patch1062: 1062-hwbd-use-newer-KEY_PICKUP_PHONE-KEY_HANGUP_PHONE-KEY.patch
Patch1063: 1063-hwdb-add-SCAI-SKU-prefix-for-Samsung-keyboard-mappin.patch
Patch1064: 1064-tree-wide-drop-doubled-empty-lines.patch
Patch1065: 1065-hwdb-move-key-66-65-handling-from-specific-to-generi.patch
Patch1066: 1066-hwdb-fix-key-toggle-touchpad-and-programmable-buttom.patch
Patch1067: 1067-hwdb-add-Stream-Deck-Neo-34903.patch
Patch1068: 1068-hwdb-update-autosuspend-rules.patch
Patch1069: 1069-hwdb-import-newest-autosuspend-rules-from-chromeos.patch
Patch1070: 1070-update-hwdb.patch
Patch1071: 1071-Update-hwdb.patch
Patch1072: 1072-hwdb-fix-broken-numpad-paren-keys-on-Lenovo-Thinkboo.patch
Patch1073: 1073-Update-hwdb.patch
Patch1074: 1074-hwdb-add-new-Cube-Mix-Plus-i18D-rotation-info.patch
Patch1075: 1075-hwdb-Add-quirk-for-Logitech-MX-Keys-for-Mac.patch
Patch1076: 1076-hwdb-add-support-for-PineTab2-to-60-sensor.hwdb-3530.patch
Patch1077: 1077-hwdb-add-entry-for-Chuwi-Hi10-X1-35331.patch
Patch1078: 1078-hwdb-update.patch
Patch1079: 1079-hwdb-Make-3D-mice-work-out-of-the-box.patch
Patch1080: 1080-hwdb-Add-Chuwi-MiniBook-X-trackpad-fuzz.patch
Patch1081: 1081-Update-hwdb.patch
Patch1082: 1082-hwdb-disable-inclusion-of-the-PCI-domain-in-MANA-net.patch
Patch1083: 1083-hwdb-move-down-touchpad-toggle-section-from-generic-.patch
Patch1084: 1084-hwdb-add-scancodes-for-HP-Elitebook-2170p-runnning-c.patch
Patch1085: 1085-hwdb-Make-remote-controllable-lights-work-out-of-the.patch
Patch1086: 1086-hwdb-fix-key-toggle-touchpad-for-VAIO-VJFH52-35645.patch
Patch1087: 1087-hwdb-comment-out-the-entry-for-Logitech-MX-Keys-for-.patch
Patch1088: 1088-60-sensor.hwdb-Loosen-model-mask-to-include-entire-s.patch
Patch1089: 1089-Correct-ACCEL_MOUNT_MATRIX-for-Chuwi-Hi10-Max.patch
Patch1090: 1090-hwdb-Add-macro-keys-for-HP-430-Programmable-Wireless.patch
Patch1091: 1091-journal-again-create-user-journals-for-users-with-hi.patch
Patch1092: 1092-install-don-t-translate-unit-instances-to-paths-when.patch
Patch1093: 1093-test-systemctl-enable-fix-typo.patch
Patch1094: 1094-udev-Handle-PTP-device-symlink-properly-on-udev-acti.patch
Patch1095: 1095-systemctl-print-warning-about-missing-proc-only-as-d.patch
Patch1096: 1096-repart-avoid-use-of-uninitialized-TPM2B_PUBLIC-data.patch
Patch1097: 1097-ci-use-ubuntu-22-04-for-deploy-of-man-pages.patch
Patch1098: 1098-man-tmpfiles-fix-off-by-one-in-example.patch
Patch1099: 1099-test-drop-removed-SCSI-passthrough-feature.patch
Patch1100: 1100-nspawn-call-json_dispatch-with-a-correct-pointer.patch
Patch1101: 1101-varlink-json-introduce-new-varlink_dispatch-helper.patch
Patch1102: 1102-json-add-json_dispatch_const_user_group_name.patch
Patch1103: 1103-sd-varlink-add-new-sd_varlink_error_is_invalid_param.patch
Patch1104: 1104-userdb-return-ESRCH-if-userdb-service-refuses-a-user.patch
Patch1105: 1105-test-rename-assert.sh-to-util.sh.patch
Patch1106: 1106-core-Don-t-GC-unit-if-it-is-in-cgroup_empty_queue.patch
Patch1107: 1107-core-Handle-cgroup-pruning-in-on_cgroup_empty_event.patch
Patch1108: 1108-Fix-failing-test.patch
Patch1109: 1109-unit-don-t-gc-unit-in-oom-queue.patch
Patch1110: 1110-core-do-not-GC-units-jobs-that-are-in-the-D-Bus-queu.patch
# Downstream-only patches (90009999)
@ -1199,7 +1261,6 @@ BuildRequires: git-core
%if 0%{?have_gnu_efi}
BuildRequires: gnu-efi gnu-efi-devel
%endif
BuildRequires: selinux-policy-devel
BuildRequires: libfido2-devel
Requires(post): coreutils
@ -1207,11 +1268,6 @@ Requires(post): sed
Requires(post): acl
Requires(post): grep
# selinux
Requires(post): libselinux-utils
Requires(post): policycoreutils
Requires(post): selinux-policy
# systemd-machine-id-setup requires libssl
Requires(post): openssl-libs
Requires(pre): coreutils
@ -1711,9 +1767,6 @@ install -m 0644 -D -t %{buildroot}%{_rpmconfigdir}/fileattrs/ %{SOURCE22}
install -m 0755 -D -t %{buildroot}%{_rpmconfigdir}/ %{SOURCE23}
install -m 0755 -D -t %{buildroot}%{_rpmconfigdir}/ %{SOURCE24}
# install policy modules
install -m 0644 -D -t %{buildroot}%{_datadir}/selinux/packages/%{selinuxtype}/ %{SOURCE27}
%find_lang %{name}
# Split files in build root into rpms. See split-files.py for the
@ -1771,9 +1824,10 @@ getent group cdrom &>/dev/null || groupadd -r -g 11 cdrom &>/dev/null || :
getent group utmp &>/dev/null || groupadd -r -g 22 utmp &>/dev/null || :
getent group tape &>/dev/null || groupadd -r -g 33 tape &>/dev/null || :
getent group dialout &>/dev/null || groupadd -r -g 18 dialout &>/dev/null || :
getent group input &>/dev/null || groupadd -r input &>/dev/null || :
getent group input &>/dev/null || groupadd -r -g 104 input &>/dev/null || :
getent group kvm &>/dev/null || groupadd -r -g 36 kvm &>/dev/null || :
getent group render &>/dev/null || groupadd -r render &>/dev/null || :
getent group render &>/dev/null || groupadd -r -g 105 render &>/dev/null || :
getent group sgx &>/dev/null || groupadd -r -g 106 sgx &>/dev/null || :
getent group systemd-journal &>/dev/null || groupadd -r -g 190 systemd-journal 2>&1 || :
getent group systemd-coredump &>/dev/null || groupadd -r systemd-coredump 2>&1 || :
@ -1816,9 +1870,6 @@ chmod g+s /{run,var}/log/journal/{,${machine_id}} &>/dev/null || :
# Apply ACL to the journal directory
setfacl -Rnm g:wheel:rx,d:g:wheel:rx,g:adm:rx,d:g:adm:rx /var/log/journal/ &>/dev/null || :
# Install our own selinux-policy module that allows systemd-coredump access to containers
%selinux_modules_install -s %{selinuxtype} %{_datadir}/selinux/packages/%{selinuxtype}/%{modulename}.pp.bz2
[ $1 -eq 1 ] || exit 0
# We reset the enablement of all services upon initial installation
@ -1881,7 +1932,7 @@ fi
%{?ldconfig:%postun libs -p %ldconfig}
%global udev_services systemd-udev{d,-settle,-trigger}.service systemd-udevd-{control,kernel}.socket %{?have_gnu_efi:systemd-boot-update.service}
%global udev_services systemd-udev{d,-settle,-trigger}.service systemd-udevd-{control,kernel}.socket %{?have_gnu_efi:systemd-boot-update.service} systemd-pstore.service
%post udev
# Move old stuff around in /var/lib
@ -1963,7 +2014,6 @@ systemd-hwdb update &>/dev/null || :
%global _docdir_fmt %{name}
%files -f %{name}.lang -f .file-list-main
%{_datadir}/selinux/packages/%{selinuxtype}/%{modulename}.pp.*
%doc %{_pkgdocdir}
%exclude %{_pkgdocdir}/LICENSE.*
%license LICENSE.GPL2 LICENSE.LGPL2.1
@ -1983,7 +2033,6 @@ systemd-hwdb update &>/dev/null || :
%ghost %dir %attr(0755,-,-) /etc/systemd/system/system-update.target.wants
%ghost %dir %attr(0755,-,-) /etc/systemd/system/timers.target.wants
%ghost %dir %attr(0755,-,-) /var/lib/rpm-state/systemd
%ghost %verify(not md5 size mode mtime) %{_sharedstatedir}/selinux/%{selinuxtype}/active/modules/200/%{modulename}
%files libs -f .file-list-libs
%license LICENSE.LGPL2.1
@ -2021,6 +2070,85 @@ systemd-hwdb update &>/dev/null || :
%{_prefix}/lib/dracut/modules.d/70rhel-net-naming-sysattrs/*
%changelog
* Tue Jan 28 2025 systemd maintenance team <systemd-maint@redhat.com> - 252-51
- ci: use ubuntu 22:04 for deploy of man pages (RHEL-70884)
- man/tmpfiles: fix off-by-one in example (RHEL-74015)
- test: drop removed SCSI passthrough feature (RHEL-70884)
- nspawn: call json_dispatch() with a correct pointer (RHEL-55266)
- varlink,json: introduce new varlink_dispatch() helper (RHEL-55266)
- json: add json_dispatch_const_user_group_name() (RHEL-55266)
- sd-varlink: add new sd_varlink_error_is_invalid_parameter() helper (RHEL-55266)
- userdb: return ESRCH if userdb service refuses a user/group name as invalid (RHEL-55266)
- test: rename assert.sh to util.sh (RHEL-55301)
- core: Don't GC unit if it is in cgroup_empty_queue (RHEL-55301)
- core: Handle cgroup pruning in on_cgroup_empty_event (RHEL-55301)
- Fix failing test (RHEL-55301)
- unit: don't gc unit in oom queue (RHEL-55301)
- core: do not GC units/jobs that are in the D-Bus queue (RHEL-55301)
* Tue Jan 14 2025 systemd maintenance team <systemd-maint@redhat.com> - 252-50
- journal: again create user journals for users with high uids (RHEL-70103)
- install: don't translate unit instances to paths when reenabling them (RHEL-5956)
- test-systemctl-enable: fix typo (RHEL-5956)
- udev: Handle PTP device symlink properly on udev action 'change' (RHEL-59088)
- systemctl: print warning about missing /proc only as debug message (RHEL-3906)
- repart: avoid use of uninitialized TPM2B_PUBLIC data (RHEL-56793)
* Tue Jan 07 2025 systemd maintenance team <systemd-maint@redhat.com> - 252-49
- logind: tighten for which classes of sessions we do stop-on-idle (RHEL-24340)
- Fix configuration for Packit 1.0.0 (RHEL-70884)
- udev/net_id: introduce naming scheme for RHEL-9.6 (RHEL-25515)
- hwdb: Fix accelerometer mount matrix for ASUS T100TAS (RHEL-49810)
- hwdb.d/60-keyboard.hwdb: add Clevo mic mute quirk for V5x dGPU (RHEL-49810)
- hwdb: add entry for Dell AlpsPS/2 ALPS DualPoint TouchPad (RHEL-49810)
- hwdb: Mark Apple Wireless keyboards as not having NumLock LED (RHEL-49810)
- update keyboard hwdb to add acer Predator PHN16-72 (RHEL-49810)
- hwdb: death to tabs! (RHEL-49810)
- hwdb.d/60-keyboard.hwdb: add Clevo mic mute quirk for V5x iGPU, NV41PZ (RHEL-49810)
- Add ACCEL_MOUNT_MATRIX for Chuwi Hi10 Max. (RHEL-49810)
- Add HUAWEI MateBook D 15 AMD ACCEL properties (RHEL-49810)
- hwdb: add Kensington SlimBlade Pro trackball (Bluetooth mode) (RHEL-49810)
- hwdb: Add accel orientation quirk for the IdeaPad Duet 3 10IGL5-LTE (RHEL-49810)
- hwdb: add keymaps for Acer Nitro 5 AN515-47 (#34493) (RHEL-49810)
- hwdb: make key map match comment for one laptop (RHEL-49810)
- hwdb: there's KEY_BRIGHTNESS_AUTO these days, hence hook it up where a FIXME suggests that (RHEL-49810)
- hwdb: use KEY_ROTATE_DISPLAY for various cases of display rotation keys (RHEL-49810)
- hwbd: use newer KEY_PICKUP_PHONE, KEY_HANGUP_PHONE, KEY_SELECTIVE_SCREENSHOT, KEY_NOTIFICATION_CENTER keycodes where appropriate (RHEL-49810)
- hwdb: add SCAI SKU prefix for Samsung keyboard mapping (#34648) (RHEL-49810)
- tree-wide: drop doubled empty lines (RHEL-49810)
- hwdb: move key 66/65 handling from specific to generic HP laptop coverage (RHEL-49810)
- hwdb: fix key toggle touchpad and programmable buttom for Positivo V142N (#34725) (RHEL-49810)
- hwdb: add Stream Deck Neo (#34903) (RHEL-49810)
- hwdb: update autosuspend rules (RHEL-49810)
- hwdb: import newest autosuspend rules from chromeos (RHEL-49810)
- update hwdb (RHEL-49810)
- Update hwdb (RHEL-49810)
- hwdb: fix broken numpad paren keys on Lenovo Thinkbook 16 G6+ 2024 (RHEL-49810)
- Update hwdb (RHEL-49810)
- hwdb: add new Cube Mix Plus (i18D) rotation info (RHEL-49810)
- hwdb: Add quirk for Logitech MX Keys for Mac (RHEL-49810)
- hwdb: add support for PineTab2 to 60-sensor.hwdb (#35304) (RHEL-49810)
- hwdb: add entry for Chuwi Hi10 X1 (#35331) (RHEL-49810)
- hwdb: update (RHEL-49810)
- hwdb: Make 3D mice work out-of-the-box (RHEL-49810)
- hwdb: Add Chuwi MiniBook X trackpad fuzz (RHEL-49810)
- Update hwdb (RHEL-49810)
- hwdb: disable inclusion of the PCI domain in MANA network interface naming (RHEL-49810)
- hwdb: move down touchpad toggle section from generic to product specific (RHEL-49810)
- hwdb: add scancodes for HP Elitebook 2170p runnning coreboot (RHEL-49810)
- hwdb: Make remote controllable lights work out-of-the-box (RHEL-49810)
- hwdb: fix key toggle touchpad for VAIO VJFH52 (#35645) (RHEL-49810)
- hwdb: comment out the entry for Logitech MX Keys for Mac (RHEL-49810)
- 60-sensor.hwdb: Loosen model mask to include entire series (RHEL-49810)
- Correct ACCEL_MOUNT_MATRIX for Chuwi Hi10 Max (RHEL-49810)
- hwdb: Add macro keys for HP 430 Programmable Wireless Keypad (RHEL-49810)
* Tue Oct 15 2024 systemd maintenance team <systemd-maint@redhat.com> - 252-48
- man: using WantedBy=default.target is not a good idea (RHEL-36531)
* Tue Sep 10 2024 systemd maintenance team <systemd-maint@redhat.com> - 252-47
- get rid of SELinux policy module (RHEL-58179)
* Fri Aug 30 2024 systemd maintenance team <systemd-maint@redhat.com> - 252-46
- ukify: Skip test on architectures without UEFI (RHEL-56019)