diff options
Diffstat (limited to 'meta/recipes-core/systemd/systemd')
3 files changed, 273 insertions, 45 deletions
diff --git a/meta/recipes-core/systemd/systemd/0001-binfmt-Don-t-install-dependency-links-at-install-tim.patch b/meta/recipes-core/systemd/systemd/0001-binfmt-Don-t-install-dependency-links-at-install-tim.patch index 2676c144f2..643b9547b7 100644 --- a/meta/recipes-core/systemd/systemd/0001-binfmt-Don-t-install-dependency-links-at-install-tim.patch +++ b/meta/recipes-core/systemd/systemd/0001-binfmt-Don-t-install-dependency-links-at-install-tim.patch @@ -1,4 +1,4 @@ -From 564830719be2017c4953589d50f21a9e856a4ecc Mon Sep 17 00:00:00 2001 +From ad5b89a366785d8a19ba970f5b0c97b4de848fa3 Mon Sep 17 00:00:00 2001 From: Chen Qi <Qi.Chen@windriver.com> Date: Thu, 21 Feb 2019 16:23:24 +0800 Subject: [PATCH] binfmt: Don't install dependency links at install time for @@ -18,17 +18,16 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com> Signed-off-by: Chen Qi <Qi.Chen@windriver.com> [rebased for systemd 243] Signed-off-by: Scott Murray <scott.murray@konsulko.com> - --- units/meson.build | 6 ++---- units/proc-sys-fs-binfmt_misc.automount | 3 +++ units/systemd-binfmt.service.in | 4 ++++ 3 files changed, 9 insertions(+), 4 deletions(-) -Index: systemd-stable/units/meson.build -=================================================================== ---- systemd-stable.orig/units/meson.build -+++ systemd-stable/units/meson.build +diff --git a/units/meson.build b/units/meson.build +index 031237c..0d43bdb 100644 +--- a/units/meson.build ++++ b/units/meson.build @@ -54,8 +54,7 @@ units = [ ['poweroff.target', '', (with_runlevels ? 'runlevel0.target' : '')], @@ -38,8 +37,8 @@ Index: systemd-stable/units/meson.build + ['proc-sys-fs-binfmt_misc.automount', 'ENABLE_BINFMT'], ['proc-sys-fs-binfmt_misc.mount', 'ENABLE_BINFMT'], ['reboot.target', '', - (with_runlevels ? 'runlevel6.target ctrl-alt-del.target' : 'ctrl-alt-del.target')], -@@ -162,8 +161,7 @@ in_units = [ + 'ctrl-alt-del.target' + (with_runlevels ? ' runlevel6.target' : '')], +@@ -164,8 +163,7 @@ in_units = [ ['rc-local.service', 'HAVE_SYSV_COMPAT'], ['rescue.service', ''], ['systemd-backlight@.service', 'ENABLE_BACKLIGHT'], @@ -49,10 +48,10 @@ Index: systemd-stable/units/meson.build ['systemd-bless-boot.service', 'ENABLE_EFI HAVE_BLKID'], ['systemd-boot-check-no-failures.service', ''], ['systemd-coredump@.service', 'ENABLE_COREDUMP'], -Index: systemd-stable/units/proc-sys-fs-binfmt_misc.automount -=================================================================== ---- systemd-stable.orig/units/proc-sys-fs-binfmt_misc.automount -+++ systemd-stable/units/proc-sys-fs-binfmt_misc.automount +diff --git a/units/proc-sys-fs-binfmt_misc.automount b/units/proc-sys-fs-binfmt_misc.automount +index 30a6bc9..4231f3b 100644 +--- a/units/proc-sys-fs-binfmt_misc.automount ++++ b/units/proc-sys-fs-binfmt_misc.automount @@ -18,3 +18,6 @@ ConditionPathIsReadWrite=/proc/sys/ [Automount] @@ -60,11 +59,11 @@ Index: systemd-stable/units/proc-sys-fs-binfmt_misc.automount + +[Install] +WantedBy=sysinit.target -Index: systemd-stable/units/systemd-binfmt.service.in -=================================================================== ---- systemd-stable.orig/units/systemd-binfmt.service.in -+++ systemd-stable/units/systemd-binfmt.service.in -@@ -14,6 +14,7 @@ Documentation=https://www.kernel.org/doc +diff --git a/units/systemd-binfmt.service.in b/units/systemd-binfmt.service.in +index e54e95e..372a598 100644 +--- a/units/systemd-binfmt.service.in ++++ b/units/systemd-binfmt.service.in +@@ -14,6 +14,7 @@ Documentation=https://www.kernel.org/doc/html/latest/admin-guide/binfmt-misc.htm Documentation=https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems DefaultDependencies=no Conflicts=shutdown.target @@ -79,3 +78,6 @@ Index: systemd-stable/units/systemd-binfmt.service.in + +[Install] +WantedBy=sysinit.target +-- +2.7.4 + diff --git a/meta/recipes-core/systemd/systemd/0001-logind-Restore-chvt-as-non-root-user-without-polkit.patch b/meta/recipes-core/systemd/systemd/0001-logind-Restore-chvt-as-non-root-user-without-polkit.patch new file mode 100644 index 0000000000..89ef39bc3e --- /dev/null +++ b/meta/recipes-core/systemd/systemd/0001-logind-Restore-chvt-as-non-root-user-without-polkit.patch @@ -0,0 +1,227 @@ +From 150d9cade6d475570395cb418b824524dead9577 Mon Sep 17 00:00:00 2001 +From: Joshua Watt <JPEWhacker@gmail.com> +Date: Fri, 30 Oct 2020 08:15:43 -0500 +Subject: [PATCH] logind: Restore chvt as non-root user without polkit + +4acf0cfd2f ("logind: check PolicyKit before allowing VT switch") broke +the ability to write user sessions that run graphical sessions (e.g. +weston/X11). This was partially amended in 19bb87fbfa ("login: allow +non-console sessions to change vt") by changing the default PolicyKit +policy so that non-root users are again allowed to switch the VT. This +makes the policy when PolKit is not enabled (as on many embedded +systems) match the default PolKit policy and allows launching graphical +sessions as a non-root user. + +Closes #17473 +--- + src/login/logind-dbus.c | 11 ++------- + src/login/logind-polkit.c | 26 +++++++++++++++++++++ + src/login/logind-polkit.h | 10 ++++++++ + src/login/logind-seat-dbus.c | 41 ++++----------------------------- + src/login/logind-session-dbus.c | 11 ++------- + src/login/meson.build | 1 + + 6 files changed, 46 insertions(+), 54 deletions(-) + create mode 100644 src/login/logind-polkit.c + create mode 100644 src/login/logind-polkit.h + +diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c +index 0f83ed99bc..a3765d88ba 100644 +--- a/src/login/logind-dbus.c ++++ b/src/login/logind-dbus.c +@@ -30,6 +30,7 @@ + #include "format-util.h" + #include "fs-util.h" + #include "logind-dbus.h" ++#include "logind-polkit.h" + #include "logind-seat-dbus.h" + #include "logind-session-dbus.h" + #include "logind-user-dbus.h" +@@ -1047,15 +1048,7 @@ static int method_activate_session_on_seat(sd_bus_message *message, void *userda + return sd_bus_error_setf(error, BUS_ERROR_SESSION_NOT_ON_SEAT, + "Session %s not on seat %s", session_name, seat_name); + +- r = bus_verify_polkit_async( +- message, +- CAP_SYS_ADMIN, +- "org.freedesktop.login1.chvt", +- NULL, +- false, +- UID_INVALID, +- &m->polkit_registry, +- error); ++ r = check_polkit_chvt(message, m, error); + if (r < 0) + return r; + if (r == 0) +diff --git a/src/login/logind-polkit.c b/src/login/logind-polkit.c +new file mode 100644 +index 0000000000..9072570cc6 +--- /dev/null ++++ b/src/login/logind-polkit.c +@@ -0,0 +1,26 @@ ++/* SPDX-License-Identifier: LGPL-2.1+ */ ++ ++#include "bus-polkit.h" ++#include "logind-polkit.h" ++#include "missing_capability.h" ++#include "user-util.h" ++ ++int check_polkit_chvt(sd_bus_message *message, Manager *manager, sd_bus_error *error) { ++#if ENABLE_POLKIT ++ return bus_verify_polkit_async( ++ message, ++ CAP_SYS_ADMIN, ++ "org.freedesktop.login1.chvt", ++ NULL, ++ false, ++ UID_INVALID, ++ &manager->polkit_registry, ++ error); ++#else ++ /* Allow chvt when polkit is not present. This allows a service to start a graphical session as a ++ * non-root user when polkit is not compiled in, matching the default polkit policy */ ++ return 1; ++#endif ++} ++ ++ +diff --git a/src/login/logind-polkit.h b/src/login/logind-polkit.h +new file mode 100644 +index 0000000000..476c077a8a +--- /dev/null ++++ b/src/login/logind-polkit.h +@@ -0,0 +1,10 @@ ++/* SPDX-License-Identifier: LGPL-2.1+ */ ++#pragma once ++ ++#include "sd-bus.h" ++ ++#include "bus-object.h" ++#include "logind.h" ++ ++int check_polkit_chvt(sd_bus_message *message, Manager *manager, sd_bus_error *error); ++ +diff --git a/src/login/logind-seat-dbus.c b/src/login/logind-seat-dbus.c +index a945132284..f22e9e2734 100644 +--- a/src/login/logind-seat-dbus.c ++++ b/src/login/logind-seat-dbus.c +@@ -9,6 +9,7 @@ + #include "bus-polkit.h" + #include "bus-util.h" + #include "logind-dbus.h" ++#include "logind-polkit.h" + #include "logind-seat-dbus.h" + #include "logind-seat.h" + #include "logind-session-dbus.h" +@@ -179,15 +180,7 @@ static int method_activate_session(sd_bus_message *message, void *userdata, sd_b + if (session->seat != s) + return sd_bus_error_setf(error, BUS_ERROR_SESSION_NOT_ON_SEAT, "Session %s not on seat %s", name, s->id); + +- r = bus_verify_polkit_async( +- message, +- CAP_SYS_ADMIN, +- "org.freedesktop.login1.chvt", +- NULL, +- false, +- UID_INVALID, +- &s->manager->polkit_registry, +- error); ++ r = check_polkit_chvt(message, s->manager, error); + if (r < 0) + return r; + if (r == 0) +@@ -215,15 +208,7 @@ static int method_switch_to(sd_bus_message *message, void *userdata, sd_bus_erro + if (to <= 0) + return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid virtual terminal"); + +- r = bus_verify_polkit_async( +- message, +- CAP_SYS_ADMIN, +- "org.freedesktop.login1.chvt", +- NULL, +- false, +- UID_INVALID, +- &s->manager->polkit_registry, +- error); ++ r = check_polkit_chvt(message, s->manager, error); + if (r < 0) + return r; + if (r == 0) +@@ -243,15 +228,7 @@ static int method_switch_to_next(sd_bus_message *message, void *userdata, sd_bus + assert(message); + assert(s); + +- r = bus_verify_polkit_async( +- message, +- CAP_SYS_ADMIN, +- "org.freedesktop.login1.chvt", +- NULL, +- false, +- UID_INVALID, +- &s->manager->polkit_registry, +- error); ++ r = check_polkit_chvt(message, s->manager, error); + if (r < 0) + return r; + if (r == 0) +@@ -271,15 +248,7 @@ static int method_switch_to_previous(sd_bus_message *message, void *userdata, sd + assert(message); + assert(s); + +- r = bus_verify_polkit_async( +- message, +- CAP_SYS_ADMIN, +- "org.freedesktop.login1.chvt", +- NULL, +- false, +- UID_INVALID, +- &s->manager->polkit_registry, +- error); ++ r = check_polkit_chvt(message, s->manager, error); + if (r < 0) + return r; + if (r == 0) +diff --git a/src/login/logind-session-dbus.c b/src/login/logind-session-dbus.c +index ccc5ac8df2..57c8a4e900 100644 +--- a/src/login/logind-session-dbus.c ++++ b/src/login/logind-session-dbus.c +@@ -11,6 +11,7 @@ + #include "fd-util.h" + #include "logind-brightness.h" + #include "logind-dbus.h" ++#include "logind-polkit.h" + #include "logind-seat-dbus.h" + #include "logind-session-dbus.h" + #include "logind-session-device.h" +@@ -192,15 +193,7 @@ int bus_session_method_activate(sd_bus_message *message, void *userdata, sd_bus_ + assert(message); + assert(s); + +- r = bus_verify_polkit_async( +- message, +- CAP_SYS_ADMIN, +- "org.freedesktop.login1.chvt", +- NULL, +- false, +- UID_INVALID, +- &s->manager->polkit_registry, +- error); ++ r = check_polkit_chvt(message, s->manager, error); + if (r < 0) + return r; + if (r == 0) +diff --git a/src/login/meson.build b/src/login/meson.build +index 0a7d3d5440..7e46be2add 100644 +--- a/src/login/meson.build ++++ b/src/login/meson.build +@@ -26,6 +26,7 @@ liblogind_core_sources = files(''' + logind-device.h + logind-inhibit.c + logind-inhibit.h ++ logind-polkit.c + logind-seat-dbus.c + logind-seat-dbus.h + logind-seat.c +-- +2.28.0 + diff --git a/meta/recipes-core/systemd/systemd/0002-don-t-use-glibc-specific-qsort_r.patch b/meta/recipes-core/systemd/systemd/0002-don-t-use-glibc-specific-qsort_r.patch index 30fe9a14df..3be5095f07 100644 --- a/meta/recipes-core/systemd/systemd/0002-don-t-use-glibc-specific-qsort_r.patch +++ b/meta/recipes-core/systemd/systemd/0002-don-t-use-glibc-specific-qsort_r.patch @@ -1,4 +1,4 @@ -From 3eb12a6ba0bce149717eaabeb1505d379b3d705a Mon Sep 17 00:00:00 2001 +From 263e4100a849f28f62fcfcc1456e9e6de8ee836b Mon Sep 17 00:00:00 2001 From: Chen Qi <Qi.Chen@windriver.com> Date: Mon, 25 Feb 2019 13:41:41 +0800 Subject: [PATCH] don't use glibc-specific qsort_r @@ -12,16 +12,16 @@ Signed-off-by: Chen Qi <Qi.Chen@windriver.com> Signed-off-by: Andrej Valek <andrej.valek@siemens.com> --- - src/basic/sort-util.h | 14 ------------ - src/libsystemd/sd-hwdb/hwdb-util.c | 19 +++++++++++----- - src/shared/format-table.c | 36 ++++++++++++++++++++---------- + src/basic/sort-util.h | 14 -------------- + src/libsystemd/sd-hwdb/hwdb-util.c | 19 ++++++++++++++----- + src/shared/format-table.c | 36 ++++++++++++++++++++++++------------ 3 files changed, 38 insertions(+), 31 deletions(-) -Index: systemd-stable/src/basic/sort-util.h -=================================================================== ---- systemd-stable.orig/src/basic/sort-util.h -+++ systemd-stable/src/basic/sort-util.h -@@ -54,17 +54,3 @@ static inline void _qsort_safe(void *bas +diff --git a/src/basic/sort-util.h b/src/basic/sort-util.h +index a8dc3bb..9541061 100644 +--- a/src/basic/sort-util.h ++++ b/src/basic/sort-util.h +@@ -54,17 +54,3 @@ static inline void _qsort_safe(void *base, size_t nmemb, size_t size, __compar_f int (*_func_)(const typeof(p[0])*, const typeof(p[0])*) = func; \ _qsort_safe((p), (n), sizeof((p)[0]), (__compar_fn_t) _func_); \ }) @@ -39,11 +39,11 @@ Index: systemd-stable/src/basic/sort-util.h - int (*_func_)(const typeof(p[0])*, const typeof(p[0])*, typeof(userdata)) = func; \ - qsort_r_safe((p), (n), sizeof((p)[0]), (__compar_d_fn_t) _func_, userdata); \ - }) -Index: systemd-stable/src/libsystemd/sd-hwdb/hwdb-util.c -=================================================================== ---- systemd-stable.orig/src/libsystemd/sd-hwdb/hwdb-util.c -+++ systemd-stable/src/libsystemd/sd-hwdb/hwdb-util.c -@@ -128,9 +128,13 @@ static void trie_free(struct trie *trie) +diff --git a/src/libsystemd/sd-hwdb/hwdb-util.c b/src/libsystemd/sd-hwdb/hwdb-util.c +index 5c75216..3986fc8 100644 +--- a/src/libsystemd/sd-hwdb/hwdb-util.c ++++ b/src/libsystemd/sd-hwdb/hwdb-util.c +@@ -128,9 +128,13 @@ static void trie_free(struct trie *trie) { DEFINE_TRIVIAL_CLEANUP_FUNC(struct trie*, trie_free); @@ -60,7 +60,7 @@ Index: systemd-stable/src/libsystemd/sd-hwdb/hwdb-util.c } static int trie_node_add_value(struct trie *trie, struct trie_node *node, -@@ -158,7 +162,10 @@ static int trie_node_add_value(struct tr +@@ -158,7 +162,10 @@ static int trie_node_add_value(struct trie *trie, struct trie_node *node, .value_off = v, }; @@ -72,7 +72,7 @@ Index: systemd-stable/src/libsystemd/sd-hwdb/hwdb-util.c if (val) { /* At this point we have 2 identical properties on the same match-string. * Since we process files in order, we just replace the previous value. */ -@@ -184,7 +191,9 @@ static int trie_node_add_value(struct tr +@@ -184,7 +191,9 @@ static int trie_node_add_value(struct trie *trie, struct trie_node *node, .line_number = line_number, }; node->values_count++; @@ -83,11 +83,11 @@ Index: systemd-stable/src/libsystemd/sd-hwdb/hwdb-util.c return 0; } -Index: systemd-stable/src/shared/format-table.c -=================================================================== ---- systemd-stable.orig/src/shared/format-table.c -+++ systemd-stable/src/shared/format-table.c -@@ -1246,31 +1246,33 @@ static int cell_data_compare(TableData * +diff --git a/src/shared/format-table.c b/src/shared/format-table.c +index 612402c..04638b2 100644 +--- a/src/shared/format-table.c ++++ b/src/shared/format-table.c +@@ -1243,30 +1243,32 @@ static int cell_data_compare(TableData *a, size_t index_a, TableData *b, size_t return CMP(index_a, index_b); } @@ -95,7 +95,6 @@ Index: systemd-stable/src/shared/format-table.c +static Table *user_table; +static int table_data_compare(const void *x, const void *y) { + const size_t *a = x, *b=y; - size_t i; int r; - assert(t); @@ -115,8 +114,8 @@ Index: systemd-stable/src/shared/format-table.c return 1; /* Order other lines by the sorting map */ -- for (i = 0; i < t->n_sort_map; i++) { -+ for (i = 0; i < user_table->n_sort_map; i++) { +- for (size_t i = 0; i < t->n_sort_map; i++) { ++ for (size_t i = 0; i < user_table->n_sort_map; i++) { TableData *d, *dd; - d = t->data[*a + t->sort_map[i]]; @@ -131,8 +130,8 @@ Index: systemd-stable/src/shared/format-table.c } /* Order identical lines by the order there were originally added in */ -@@ -1798,7 +1800,12 @@ int table_print(Table *t, FILE *f) { - for (i = 0; i < n_rows; i++) +@@ -1844,7 +1846,12 @@ int table_print(Table *t, FILE *f) { + for (size_t i = 0; i < n_rows; i++) sorted[i] = i * t->n_columns; - typesafe_qsort_r(sorted, n_rows, table_data_compare, t); @@ -145,8 +144,8 @@ Index: systemd-stable/src/shared/format-table.c } if (t->display_map) -@@ -2375,7 +2382,12 @@ int table_to_json(Table *t, JsonVariant - for (i = 0; i < n_rows; i++) +@@ -2440,7 +2447,12 @@ int table_to_json(Table *t, JsonVariant **ret) { + for (size_t i = 0; i < n_rows; i++) sorted[i] = i * t->n_columns; - typesafe_qsort_r(sorted, n_rows, table_data_compare, t); |