Skip to content
Snippets Groups Projects
Commit ced4abee authored by importbot's avatar importbot
Browse files

import systemd-257-4.el10

parent d132ee97
No related branches found
No related tags found
No related merge requests found
Showing
with 1633 additions and 0 deletions
From 2c7a7aadc438ed266539e2ed705dfdf457a9e347 Mon Sep 17 00:00:00 2001
From: Jan Macku <jamacku@redhat.com>
Date: Tue, 14 Jan 2025 13:26:05 +0100
Subject: [PATCH] ci: use ubuntu 22:04 for deploy of man pages
rhel-only: ci
Related: RHEL-57603
---
.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
From 879603eda7440bf84a4094863283d556c8562907 Mon Sep 17 00:00:00 2001
From: Daan De Meyer <daan.j.demeyer@gmail.com>
Date: Thu, 9 Jan 2025 16:24:22 +0100
Subject: [PATCH] tree-wide: Fix python formatting
The new release of ruff formats a few more things which causes linter
failures in CI so let's fix those formatting nits.
(cherry picked from commit 96403d5121d93dd47dbe9dab5b90ff973e664ac3)
Related: RHEL-57603
---
src/ukify/ukify.py | 6 +++---
test/integration-test-wrapper.py | 6 +++---
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/src/ukify/ukify.py b/src/ukify/ukify.py
index 3f36aa7af6..be4e30eb8e 100755
--- a/src/ukify/ukify.py
+++ b/src/ukify/ukify.py
@@ -763,7 +763,7 @@ def call_systemd_measure(uki: UKI, opts: UkifyConfig, profile_start: int = 0) ->
cmd = [
measure_tool,
'calculate',
- *(f"--{s.name.removeprefix('.')}={s.content}" for s in to_measure.values()),
+ *(f'--{s.name.removeprefix(".")}={s.content}' for s in to_measure.values()),
*(f'--bank={bank}' for bank in banks),
# For measurement, the keys are not relevant, so we can lump all the phase paths
# into one call to systemd-measure calculate.
@@ -786,7 +786,7 @@ def call_systemd_measure(uki: UKI, opts: UkifyConfig, profile_start: int = 0) ->
cmd = [
measure_tool,
'sign',
- *(f"--{s.name.removeprefix('.')}={s.content}" for s in to_measure.values()),
+ *(f'--{s.name.removeprefix(".")}={s.content}' for s in to_measure.values()),
*(f'--bank={bank}' for bank in banks),
]
@@ -1284,7 +1284,7 @@ def make_uki(opts: UkifyConfig) -> None:
os.umask(umask := os.umask(0))
os.chmod(opts.output, 0o777 & ~umask)
- print(f"Wrote {'signed' if sign_args_present else 'unsigned'} {opts.output}")
+ print(f'Wrote {"signed" if sign_args_present else "unsigned"} {opts.output}')
@contextlib.contextmanager
diff --git a/test/integration-test-wrapper.py b/test/integration-test-wrapper.py
index ef6df8840f..eacfeffe9c 100755
--- a/test/integration-test-wrapper.py
+++ b/test/integration-test-wrapper.py
@@ -429,7 +429,7 @@ def main() -> None:
dropin += textwrap.dedent(
f"""
[Service]
- Environment=TEST_MATCH_SUBTEST={os.environ["TEST_MATCH_SUBTEST"]}
+ Environment=TEST_MATCH_SUBTEST={os.environ['TEST_MATCH_SUBTEST']}
"""
)
@@ -437,7 +437,7 @@ def main() -> None:
dropin += textwrap.dedent(
f"""
[Service]
- Environment=TEST_MATCH_TESTCASE={os.environ["TEST_MATCH_TESTCASE"]}
+ Environment=TEST_MATCH_TESTCASE={os.environ['TEST_MATCH_TESTCASE']}
"""
)
@@ -559,7 +559,7 @@ def main() -> None:
ops += [f'journalctl --file {journal_file} --no-hostname -o short-monotonic -u {args.unit} -p info']
- print("Test failed, relevant logs can be viewed with: \n\n" f"{(' && '.join(ops))}\n", file=sys.stderr)
+ print(f'Test failed, relevant logs can be viewed with: \n\n{(" && ".join(ops))}\n', file=sys.stderr)
# 0 also means we failed so translate that to a non-zero exit code to mark the test as failed.
exit(result.returncode or 1)
From 5588bd5336067976b13857b443b883b27fe8606e Mon Sep 17 00:00:00 2001
From: Jan Macku <jamacku@redhat.com>
Date: Wed, 15 Jan 2025 15:35:00 +0100
Subject: [PATCH] ci: fix Packit
rhel-only: ci
Related: RHEL-57603
---
.packit.yml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/.packit.yml b/.packit.yml
index d16e630817..9d6e6c1e4e 100644
--- a/.packit.yml
+++ b/.packit.yml
@@ -7,6 +7,8 @@ files_to_sync:
- .packit.yml
- src: .packit_rpm/systemd.spec
dest: systemd.spec
+upstream_package_name: systemd
+downstream_package_name: systemd
# `git describe` returns in systemd's case 'v245-xxx' which breaks RPM version
# detection (that expects 245-xxxx'). Let's tweak the version string accordingly
upstream_tag_template: "v{version}"
From 956076a7fd7f02f10b28ef6de5c365f77fed4516 Mon Sep 17 00:00:00 2001
From: Jan Macku <jamacku@redhat.com>
Date: Thu, 16 Jan 2025 14:42:48 +0100
Subject: [PATCH] ci: drop testing farm test
Test doesn't work on source-git repos, so let's drop it.
rhel-only: ci
Related: RHEL-57603
---
.packit.yml | 7 -------
1 file changed, 7 deletions(-)
diff --git a/.packit.yml b/.packit.yml
index 9d6e6c1e4e..a5d9aca0e1 100644
--- a/.packit.yml
+++ b/.packit.yml
@@ -48,10 +48,3 @@ jobs:
- centos-stream-10-ppc64le
- centos-stream-10-s390x
- centos-stream-10-x86_64
-
-- job: tests
- trigger: pull_request
- fmf_path: test/fmf
- tmt_plan: ci
- targets:
- - centos-stream-10-x86_64
From 24c7b86ce25b4bc1b55cbf0dffe4fa78925476b5 Mon Sep 17 00:00:00 2001
From: Ronan Pigott <ronan@rjp.ie>
Date: Thu, 28 Nov 2024 12:53:32 -0700
Subject: [PATCH] dbus: stash the subscriber list when we disconenct from the
bus
If we unexpectly disconnect from the bus, systemd would end up dropping
the list of subscribers, which breaks the ability of clients like logind
to monitor the state of units.
Stash the list of subscribers into the deserialized state in the event
of a disconnect so that when we recover we can renew the broken
subscriptions.
(cherry picked from commit 8402ca04d1a063c3d8a9e3d5c16df8bb8778ae98)
Resolves: RHEL-73780
---
src/core/dbus.c | 21 +++++++++++++++------
src/core/dbus.h | 2 +-
src/core/manager.c | 8 ++++----
src/shared/bus-util.c | 22 ++++++++++++++++++++++
src/shared/bus-util.h | 1 +
5 files changed, 43 insertions(+), 11 deletions(-)
diff --git a/src/core/dbus.c b/src/core/dbus.c
index 3f0f40e702..9abc35888d 100644
--- a/src/core/dbus.c
+++ b/src/core/dbus.c
@@ -860,6 +860,8 @@ int bus_init_api(Manager *m) {
if (r < 0)
return log_error_errno(r, "Failed to set up API bus: %m");
+ (void) bus_track_coldplug(bus, &m->subscribed, /* recursive= */ false, m->deserialized_subscribed);
+ m->deserialized_subscribed = strv_free(m->deserialized_subscribed);
m->api_bus = TAKE_PTR(bus);
return 0;
@@ -1004,8 +1006,17 @@ static void destroy_bus(Manager *m, sd_bus **bus) {
}
/* Get rid of tracked clients on this bus */
- if (m->subscribed && sd_bus_track_get_bus(m->subscribed) == *bus)
+ if (m->subscribed && sd_bus_track_get_bus(m->subscribed) == *bus) {
+ _cleanup_strv_free_ char **subscribed = NULL;
+ int r;
+
+ r = bus_track_to_strv(m->subscribed, &subscribed);
+ if (r < 0)
+ log_warning_errno(r, "Failed to serialize api subscribers, ignoring: %m");
+ strv_free_and_replace(m->deserialized_subscribed, subscribed);
+
m->subscribed = sd_bus_track_unref(m->subscribed);
+ }
HASHMAP_FOREACH(j, m->jobs)
if (j->bus_track && sd_bus_track_get_bus(j->bus_track) == *bus)
@@ -1064,7 +1075,6 @@ void bus_done(Manager *m) {
assert(!m->subscribed);
- m->deserialized_subscribed = strv_free(m->deserialized_subscribed);
m->polkit_registry = hashmap_free(m->polkit_registry);
}
@@ -1153,20 +1163,19 @@ void bus_track_serialize(sd_bus_track *t, FILE *f, const char *prefix) {
}
}
-int bus_track_coldplug(Manager *m, sd_bus_track **t, bool recursive, char **l) {
+int bus_track_coldplug(sd_bus *bus, sd_bus_track **t, bool recursive, char **l) {
int r;
- assert(m);
assert(t);
if (strv_isempty(l))
return 0;
- if (!m->api_bus)
+ if (!bus)
return 0;
if (!*t) {
- r = sd_bus_track_new(m->api_bus, t, NULL, NULL);
+ r = sd_bus_track_new(bus, t, NULL, NULL);
if (r < 0)
return r;
}
diff --git a/src/core/dbus.h b/src/core/dbus.h
index d00c14d3b7..eb1baf6049 100644
--- a/src/core/dbus.h
+++ b/src/core/dbus.h
@@ -19,7 +19,7 @@ void bus_done(Manager *m);
int bus_fdset_add_all(Manager *m, FDSet *fds);
void bus_track_serialize(sd_bus_track *t, FILE *f, const char *prefix);
-int bus_track_coldplug(Manager *m, sd_bus_track **t, bool recursive, char **l);
+int bus_track_coldplug(sd_bus *bus, sd_bus_track **t, bool recursive, char **l);
int bus_foreach_bus(Manager *m, sd_bus_track *subscribed2, int (*send_message)(sd_bus *bus, void *userdata), void *userdata);
diff --git a/src/core/manager.c b/src/core/manager.c
index 485fdd1a66..068ea2ab03 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -1803,6 +1803,9 @@ Manager* manager_free(Manager *m) {
free(m->switch_root);
free(m->switch_root_init);
+ sd_bus_track_unref(m->subscribed);
+ strv_free(m->deserialized_subscribed);
+
unit_defaults_done(&m->defaults);
FOREACH_ARRAY(map, m->units_needing_mounts_for, _UNIT_MOUNT_DEPENDENCY_TYPE_MAX) {
@@ -2139,7 +2142,7 @@ int manager_startup(Manager *m, FILE *serialization, FDSet *fds, const char *roo
manager_setup_bus(m);
/* Now that we are connected to all possible buses, let's deserialize who is tracking us. */
- r = bus_track_coldplug(m, &m->subscribed, false, m->deserialized_subscribed);
+ r = bus_track_coldplug(m->api_bus, &m->subscribed, false, m->deserialized_subscribed);
if (r < 0)
log_warning_errno(r, "Failed to deserialized tracked clients, ignoring: %m");
m->deserialized_subscribed = strv_free(m->deserialized_subscribed);
@@ -3813,9 +3816,6 @@ int manager_reload(Manager *m) {
/* Clean up runtime objects no longer referenced */
manager_vacuum(m);
- /* Clean up deserialized tracked clients */
- m->deserialized_subscribed = strv_free(m->deserialized_subscribed);
-
/* Consider the reload process complete now. */
assert(m->n_reloading > 0);
m->n_reloading--;
diff --git a/src/shared/bus-util.c b/src/shared/bus-util.c
index ff80e580fc..2cdde97b78 100644
--- a/src/shared/bus-util.c
+++ b/src/shared/bus-util.c
@@ -698,6 +698,28 @@ int bus_track_add_name_many(sd_bus_track *t, char **l) {
return r;
}
+int bus_track_to_strv(sd_bus_track *t, char ***ret) {
+ _cleanup_strv_free_ char **subscribed = NULL;
+ int r = 0;
+
+ assert(ret);
+
+ for (const char *n = sd_bus_track_first(t); n; n = sd_bus_track_next(t)) {
+ r = sd_bus_track_count_name(t, n);
+ if (r < 0)
+ return r;
+
+ for (int j = 0; j < r; j++) {
+ r = strv_extend(&subscribed, n);
+ if (r < 0)
+ return r;
+ }
+ }
+
+ *ret = TAKE_PTR(subscribed);
+ return r;
+}
+
int bus_open_system_watch_bind_with_description(sd_bus **ret, const char *description) {
_cleanup_(sd_bus_close_unrefp) sd_bus *bus = NULL;
const char *e;
diff --git a/src/shared/bus-util.h b/src/shared/bus-util.h
index fbccb24314..83522ad1c1 100644
--- a/src/shared/bus-util.h
+++ b/src/shared/bus-util.h
@@ -63,6 +63,7 @@ int bus_path_encode_unique(sd_bus *b, const char *prefix, const char *sender_id,
int bus_path_decode_unique(const char *path, const char *prefix, char **ret_sender, char **ret_external);
int bus_track_add_name_many(sd_bus_track *t, char **l);
+int bus_track_to_strv(sd_bus_track *t, char ***ret);
int bus_open_system_watch_bind_with_description(sd_bus **ret, const char *description);
static inline int bus_open_system_watch_bind(sd_bus **ret) {
From dedad9da3b54cbbe61086cac8cfe699feafeabd6 Mon Sep 17 00:00:00 2001
From: Ronan Pigott <ronan@rjp.ie>
Date: Wed, 11 Dec 2024 12:47:10 -0700
Subject: [PATCH] manager: s/deserialized_subscribed/subscribed_as_strv
Now that this field may get populated at runtime, the deserialized name
is misleading. Change the name to reflect its updated purpose.
(cherry picked from commit e1315a621ae26473fcc9cd0d6013836f5f498d40)
Resolves: RHEL-73780
---
src/core/dbus.c | 6 +++---
src/core/manager-serialize.c | 2 +-
src/core/manager.c | 6 +++---
src/core/manager.h | 2 +-
4 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/src/core/dbus.c b/src/core/dbus.c
index 9abc35888d..58cd1ee175 100644
--- a/src/core/dbus.c
+++ b/src/core/dbus.c
@@ -860,8 +860,8 @@ int bus_init_api(Manager *m) {
if (r < 0)
return log_error_errno(r, "Failed to set up API bus: %m");
- (void) bus_track_coldplug(bus, &m->subscribed, /* recursive= */ false, m->deserialized_subscribed);
- m->deserialized_subscribed = strv_free(m->deserialized_subscribed);
+ (void) bus_track_coldplug(bus, &m->subscribed, /* recursive= */ false, m->subscribed_as_strv);
+ m->subscribed_as_strv = strv_free(m->subscribed_as_strv);
m->api_bus = TAKE_PTR(bus);
return 0;
@@ -1013,7 +1013,7 @@ static void destroy_bus(Manager *m, sd_bus **bus) {
r = bus_track_to_strv(m->subscribed, &subscribed);
if (r < 0)
log_warning_errno(r, "Failed to serialize api subscribers, ignoring: %m");
- strv_free_and_replace(m->deserialized_subscribed, subscribed);
+ strv_free_and_replace(m->subscribed_as_strv, subscribed);
m->subscribed = sd_bus_track_unref(m->subscribed);
}
diff --git a/src/core/manager-serialize.c b/src/core/manager-serialize.c
index 3f624619df..bc29ac91c6 100644
--- a/src/core/manager-serialize.c
+++ b/src/core/manager-serialize.c
@@ -493,7 +493,7 @@ int manager_deserialize(Manager *m, FILE *f, FDSet *fds) {
(void) exec_shared_runtime_deserialize_one(m, val, fds);
else if ((val = startswith(l, "subscribed="))) {
- r = strv_extend(&m->deserialized_subscribed, val);
+ r = strv_extend(&m->subscribed_as_strv, val);
if (r < 0)
return r;
} else if ((val = startswith(l, "varlink-server-socket-address="))) {
diff --git a/src/core/manager.c b/src/core/manager.c
index 068ea2ab03..4a7132274f 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -1804,7 +1804,7 @@ Manager* manager_free(Manager *m) {
free(m->switch_root_init);
sd_bus_track_unref(m->subscribed);
- strv_free(m->deserialized_subscribed);
+ strv_free(m->subscribed_as_strv);
unit_defaults_done(&m->defaults);
@@ -2142,10 +2142,10 @@ int manager_startup(Manager *m, FILE *serialization, FDSet *fds, const char *roo
manager_setup_bus(m);
/* Now that we are connected to all possible buses, let's deserialize who is tracking us. */
- r = bus_track_coldplug(m->api_bus, &m->subscribed, false, m->deserialized_subscribed);
+ r = bus_track_coldplug(m->api_bus, &m->subscribed, false, m->subscribed_as_strv);
if (r < 0)
log_warning_errno(r, "Failed to deserialized tracked clients, ignoring: %m");
- m->deserialized_subscribed = strv_free(m->deserialized_subscribed);
+ m->subscribed_as_strv = strv_free(m->subscribed_as_strv);
r = manager_varlink_init(m);
if (r < 0)
diff --git a/src/core/manager.h b/src/core/manager.h
index e4cada80ff..7016eab2d3 100644
--- a/src/core/manager.h
+++ b/src/core/manager.h
@@ -340,7 +340,7 @@ struct Manager {
considered subscribes, since they last for very short only,
and it is much simpler that way. */
sd_bus_track *subscribed;
- char **deserialized_subscribed;
+ char **subscribed_as_strv;
/* This is used during reloading: before the reload we queue
* the reply message here, and afterwards we send it */
From 744459cb070eff2c30853bfd799f48878cea987a Mon Sep 17 00:00:00 2001
From: Mike Yuan <me@yhndnzj.com>
Date: Sat, 11 Jan 2025 16:52:05 +0100
Subject: [PATCH] shared/bus-util: move bus_message_read_id128() to
bus-message-util
(cherry picked from commit ab33edb05b7d4c90fb80f46aa6b951c505048798)
Resolves: RHEL-73780
---
src/core/dbus-manager.c | 1 +
src/hostname/hostnamectl.c | 1 +
src/machine/machinectl.c | 1 +
src/machine/machined-dbus.c | 1 +
src/run/run.c | 1 +
src/shared/bus-map-properties.c | 1 +
src/shared/bus-message-util.c | 29 +++++++++++++++++++++++++++++
src/shared/bus-message-util.h | 2 ++
src/shared/bus-util.c | 28 ----------------------------
src/shared/bus-util.h | 2 --
10 files changed, 37 insertions(+), 30 deletions(-)
diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c
index c4a7e2a20b..8e39d67a00 100644
--- a/src/core/dbus-manager.c
+++ b/src/core/dbus-manager.c
@@ -11,6 +11,7 @@
#include "bus-common-errors.h"
#include "bus-get-properties.h"
#include "bus-log-control-api.h"
+#include "bus-message-util.h"
#include "bus-util.h"
#include "chase.h"
#include "confidential-virt.h"
diff --git a/src/hostname/hostnamectl.c b/src/hostname/hostnamectl.c
index cd4f86af80..2d1334f654 100644
--- a/src/hostname/hostnamectl.c
+++ b/src/hostname/hostnamectl.c
@@ -18,6 +18,7 @@
#include "bus-error.h"
#include "bus-locator.h"
#include "bus-map-properties.h"
+#include "bus-message-util.h"
#include "format-table.h"
#include "hostname-setup.h"
#include "hostname-util.h"
diff --git a/src/machine/machinectl.c b/src/machine/machinectl.c
index 7843b9aa63..8854d9a550 100644
--- a/src/machine/machinectl.c
+++ b/src/machine/machinectl.c
@@ -21,6 +21,7 @@
#include "bus-error.h"
#include "bus-locator.h"
#include "bus-map-properties.h"
+#include "bus-message-util.h"
#include "bus-print-properties.h"
#include "bus-unit-procs.h"
#include "bus-unit-util.h"
diff --git a/src/machine/machined-dbus.c b/src/machine/machined-dbus.c
index f4915f67da..05e44b5030 100644
--- a/src/machine/machined-dbus.c
+++ b/src/machine/machined-dbus.c
@@ -10,6 +10,7 @@
#include "bus-common-errors.h"
#include "bus-get-properties.h"
#include "bus-locator.h"
+#include "bus-message-util.h"
#include "bus-polkit.h"
#include "cgroup-util.h"
#include "discover-image.h"
diff --git a/src/run/run.c b/src/run/run.c
index 1b13e74b83..c4e79adc7a 100644
--- a/src/run/run.c
+++ b/src/run/run.c
@@ -15,6 +15,7 @@
#include "bus-error.h"
#include "bus-locator.h"
#include "bus-map-properties.h"
+#include "bus-message-util.h"
#include "bus-unit-util.h"
#include "bus-wait-for-jobs.h"
#include "calendarspec.h"
diff --git a/src/shared/bus-map-properties.c b/src/shared/bus-map-properties.c
index a6cd752894..18d83c336f 100644
--- a/src/shared/bus-map-properties.c
+++ b/src/shared/bus-map-properties.c
@@ -5,6 +5,7 @@
#include "bus-util.h"
#include "strv.h"
#include "bus-message.h"
+#include "bus-message-util.h"
int bus_map_id128(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata) {
sd_id128_t *p = userdata;
diff --git a/src/shared/bus-message-util.c b/src/shared/bus-message-util.c
index d8c483ef62..e93be9b3c5 100644
--- a/src/shared/bus-message-util.c
+++ b/src/shared/bus-message-util.c
@@ -7,6 +7,35 @@
#include "copy.h"
#include "resolve-util.h"
+int bus_message_read_id128(sd_bus_message *m, sd_id128_t *ret) {
+ const void *a;
+ size_t sz;
+ int r;
+
+ assert(m);
+
+ r = sd_bus_message_read_array(m, 'y', &a, &sz);
+ if (r < 0)
+ return r;
+
+ switch (sz) {
+
+ case 0:
+ if (ret)
+ *ret = SD_ID128_NULL;
+ return 0;
+
+ case sizeof(sd_id128_t):
+ if (ret)
+ memcpy(ret, a, sz);
+ return !memeqzero(a, sz); /* This mimics sd_id128_is_null(), but ret may be NULL,
+ * and a may be misaligned, so use memeqzero() here. */
+
+ default:
+ return -EINVAL;
+ }
+}
+
int bus_message_read_ifindex(sd_bus_message *message, sd_bus_error *error, int *ret) {
int ifindex, r;
diff --git a/src/shared/bus-message-util.h b/src/shared/bus-message-util.h
index 50025766c2..698960561c 100644
--- a/src/shared/bus-message-util.h
+++ b/src/shared/bus-message-util.h
@@ -6,6 +6,8 @@
#include "in-addr-util.h"
#include "socket-netlink.h"
+int bus_message_read_id128(sd_bus_message *m, sd_id128_t *ret);
+
int bus_message_read_ifindex(sd_bus_message *message, sd_bus_error *error, int *ret);
int bus_message_read_family(sd_bus_message *message, sd_bus_error *error, int *ret);
int bus_message_read_in_addr_auto(sd_bus_message *message, sd_bus_error *error, int *ret_family, union in_addr_union *ret_addr);
diff --git a/src/shared/bus-util.c b/src/shared/bus-util.c
index 2cdde97b78..d3d3f1733e 100644
--- a/src/shared/bus-util.c
+++ b/src/shared/bus-util.c
@@ -953,34 +953,6 @@ int bus_query_sender_pidref(
return bus_creds_get_pidref(creds, ret);
}
-int bus_message_read_id128(sd_bus_message *m, sd_id128_t *ret) {
- const void *a;
- size_t sz;
- int r;
-
- assert(m);
-
- r = sd_bus_message_read_array(m, 'y', &a, &sz);
- if (r < 0)
- return r;
-
- switch (sz) {
- case 0:
- if (ret)
- *ret = SD_ID128_NULL;
- return 0;
-
- case sizeof(sd_id128_t):
- if (ret)
- memcpy(ret, a, sz);
- return !memeqzero(a, sz); /* This mimics sd_id128_is_null(), but ret may be NULL,
- * and a may be misaligned, so use memeqzero() here. */
-
- default:
- return -EINVAL;
- }
-}
-
static const char* const bus_transport_table[] = {
[BUS_TRANSPORT_LOCAL] = "local",
[BUS_TRANSPORT_REMOTE] = "remote",
diff --git a/src/shared/bus-util.h b/src/shared/bus-util.h
index 83522ad1c1..c2b9b126c8 100644
--- a/src/shared/bus-util.h
+++ b/src/shared/bus-util.h
@@ -84,6 +84,4 @@ int bus_property_get_string_set(sd_bus *bus, const char *path, const char *inter
int bus_creds_get_pidref(sd_bus_creds *c, PidRef *ret);
int bus_query_sender_pidref(sd_bus_message *m, PidRef *ret);
-int bus_message_read_id128(sd_bus_message *m, sd_id128_t *ret);
-
const char* bus_transport_to_string(BusTransport transport) _const_;
From 3a71e1dba1e5d56a3f0784df2ac53f5ad73a9451 Mon Sep 17 00:00:00 2001
From: Mike Yuan <me@yhndnzj.com>
Date: Sat, 11 Jan 2025 17:10:43 +0100
Subject: [PATCH] shared/bus-util: move bus_message_hash_ops to
bus-message-util
(cherry picked from commit e3d37628aabff92e4b756e63ef0a6cd4569ce743)
Resolves: RHEL-73780
---
src/home/homed-manager-bus.c | 9 +++++----
src/login/logind-brightness.c | 4 ++--
src/shared/bus-message-util.c | 4 ++++
src/shared/bus-message-util.h | 2 ++
src/shared/bus-util.c | 10 ----------
src/shared/bus-util.h | 2 --
src/systemctl/systemctl-list-units.c | 1 +
src/timedate/timedated.c | 1 +
8 files changed, 15 insertions(+), 18 deletions(-)
diff --git a/src/home/homed-manager-bus.c b/src/home/homed-manager-bus.c
index 69c7680b9e..08c917aee2 100644
--- a/src/home/homed-manager-bus.c
+++ b/src/home/homed-manager-bus.c
@@ -4,6 +4,7 @@
#include "alloc-util.h"
#include "bus-common-errors.h"
+#include "bus-message-util.h"
#include "bus-polkit.h"
#include "format-util.h"
#include "home-util.h"
@@ -704,17 +705,17 @@ static int method_rebalance(sd_bus_message *message, void *userdata, sd_bus_erro
int r;
r = manager_schedule_rebalance(m, /* immediately= */ true);
- if (r == 0)
- return sd_bus_reply_method_errorf(message, BUS_ERROR_REBALANCE_NOT_NEEDED, "No home directories need rebalancing.");
if (r < 0)
return r;
+ if (r == 0)
+ return sd_bus_reply_method_errorf(message, BUS_ERROR_REBALANCE_NOT_NEEDED, "No home directories need rebalancing.");
/* Keep a reference to this message, so that we can reply to it once we are done */
- r = set_ensure_put(&m->rebalance_queued_method_calls, &bus_message_hash_ops, message);
+ r = set_ensure_consume(&m->rebalance_queued_method_calls, &bus_message_hash_ops, sd_bus_message_ref(message));
if (r < 0)
return log_error_errno(r, "Failed to track rebalance bus message: %m");
+ assert(r > 0);
- sd_bus_message_ref(message);
return 1;
}
diff --git a/src/login/logind-brightness.c b/src/login/logind-brightness.c
index 40bcb39ce0..b3e7718394 100644
--- a/src/login/logind-brightness.c
+++ b/src/login/logind-brightness.c
@@ -1,5 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#include "bus-message-util.h"
#include "bus-util.h"
#include "device-util.h"
#include "hash-funcs.h"
@@ -173,10 +174,9 @@ static int set_add_message(Set **set, sd_bus_message *message) {
if (r <= 0)
return r;
- r = set_ensure_put(set, &bus_message_hash_ops, message);
+ r = set_ensure_consume(set, &bus_message_hash_ops, sd_bus_message_ref(message));
if (r <= 0)
return r;
- sd_bus_message_ref(message);
return 1;
}
diff --git a/src/shared/bus-message-util.c b/src/shared/bus-message-util.c
index e93be9b3c5..a6523ff00e 100644
--- a/src/shared/bus-message-util.c
+++ b/src/shared/bus-message-util.c
@@ -246,3 +246,7 @@ int bus_message_dump_fd(sd_bus_message *message) {
return 0;
}
+
+DEFINE_HASH_OPS_WITH_VALUE_DESTRUCTOR(bus_message_hash_ops,
+ void, trivial_hash_func, trivial_compare_func,
+ sd_bus_message, sd_bus_message_unref);
diff --git a/src/shared/bus-message-util.h b/src/shared/bus-message-util.h
index 698960561c..baec1cb92b 100644
--- a/src/shared/bus-message-util.h
+++ b/src/shared/bus-message-util.h
@@ -21,3 +21,5 @@ int bus_message_read_dns_servers(
int bus_message_dump_string(sd_bus_message *message);
int bus_message_dump_fd(sd_bus_message *message);
+
+extern const struct hash_ops bus_message_hash_ops;
diff --git a/src/shared/bus-util.c b/src/shared/bus-util.c
index d3d3f1733e..362dd78537 100644
--- a/src/shared/bus-util.c
+++ b/src/shared/bus-util.c
@@ -862,16 +862,6 @@ int bus_register_malloc_status(sd_bus *bus, const char *destination) {
return 0;
}
-static void bus_message_unref_wrapper(void *m) {
- sd_bus_message_unref(m);
-}
-
-const struct hash_ops bus_message_hash_ops = {
- .hash = trivial_hash_func,
- .compare = trivial_compare_func,
- .free_value = bus_message_unref_wrapper,
-};
-
int bus_message_append_string_set(sd_bus_message *m, Set *set) {
const char *s;
int r;
diff --git a/src/shared/bus-util.h b/src/shared/bus-util.h
index c2b9b126c8..a2193ebf97 100644
--- a/src/shared/bus-util.h
+++ b/src/shared/bus-util.h
@@ -75,8 +75,6 @@ int bus_reply_pair_array(sd_bus_message *m, char **l);
/* Listen to GetMallocInfo() calls to 'destination' and return malloc_info() via FD */
int bus_register_malloc_status(sd_bus *bus, const char *destination);
-extern const struct hash_ops bus_message_hash_ops;
-
int bus_message_append_string_set(sd_bus_message *m, Set *s);
int bus_property_get_string_set(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
diff --git a/src/systemctl/systemctl-list-units.c b/src/systemctl/systemctl-list-units.c
index a2f3074358..b7cb103513 100644
--- a/src/systemctl/systemctl-list-units.c
+++ b/src/systemctl/systemctl-list-units.c
@@ -5,6 +5,7 @@
#include "ansi-color.h"
#include "bus-error.h"
#include "bus-locator.h"
+#include "bus-message-util.h"
#include "format-table.h"
#include "locale-util.h"
#include "path-util.h"
diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c
index c79bb864df..b196034a25 100644
--- a/src/timedate/timedated.c
+++ b/src/timedate/timedated.c
@@ -17,6 +17,7 @@
#include "bus-locator.h"
#include "bus-log-control-api.h"
#include "bus-map-properties.h"
+#include "bus-message-util.h"
#include "bus-polkit.h"
#include "bus-unit-util.h"
#include "clock-util.h"
From b1e0b30efe89592eff532a35b14345bc48b2afce Mon Sep 17 00:00:00 2001
From: Mike Yuan <me@yhndnzj.com>
Date: Sat, 11 Jan 2025 18:04:37 +0100
Subject: [PATCH] shared/bus-util: move string set append/get funcs to
bus-message-util and bus-get-properties, respectively
(cherry picked from commit 91080bc9733b5b2478bfc0ed58f6a7ae5da7e639)
Resolves: RHEL-73780
---
src/core/dbus-cgroup.c | 1 +
src/shared/bus-get-properties.c | 19 +++++++++++++++++
src/shared/bus-get-properties.h | 2 ++
src/shared/bus-message-util.c | 19 +++++++++++++++++
src/shared/bus-message-util.h | 2 ++
src/shared/bus-util.c | 37 ---------------------------------
src/shared/bus-util.h | 4 ----
7 files changed, 43 insertions(+), 41 deletions(-)
diff --git a/src/core/dbus-cgroup.c b/src/core/dbus-cgroup.c
index fd48f3b07c..c99f1e29ac 100644
--- a/src/core/dbus-cgroup.c
+++ b/src/core/dbus-cgroup.c
@@ -7,6 +7,7 @@
#include "bpf-firewall.h"
#include "bpf-foreign.h"
#include "bus-get-properties.h"
+#include "bus-message-util.h"
#include "bus-util.h"
#include "cgroup-util.h"
#include "cgroup.h"
diff --git a/src/shared/bus-get-properties.c b/src/shared/bus-get-properties.c
index 53e5d6b99f..bf267a23a5 100644
--- a/src/shared/bus-get-properties.c
+++ b/src/shared/bus-get-properties.c
@@ -1,6 +1,7 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#include "bus-get-properties.h"
+#include "bus-message-util.h"
#include "rlimit-util.h"
#include "stdio-util.h"
#include "string-util.h"
@@ -164,3 +165,21 @@ int bus_property_get_rlimit(
return sd_bus_message_append(reply, "t", u);
}
+
+int bus_property_get_string_set(
+ sd_bus *bus,
+ const char *path,
+ const char *interface,
+ const char *property,
+ sd_bus_message *reply,
+ void *userdata,
+ sd_bus_error *error) {
+
+ Set **s = ASSERT_PTR(userdata);
+
+ assert(bus);
+ assert(property);
+ assert(reply);
+
+ return bus_message_append_string_set(reply, *s);
+}
diff --git a/src/shared/bus-get-properties.h b/src/shared/bus-get-properties.h
index 4c35126502..9ddf5454de 100644
--- a/src/shared/bus-get-properties.h
+++ b/src/shared/bus-get-properties.h
@@ -52,6 +52,8 @@ assert_cc(sizeof(mode_t) == sizeof(uint32_t));
int bus_property_get_rlimit(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
+int bus_property_get_string_set(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
+
#define BUS_DEFINE_PROPERTY_GET_GLOBAL(function, bus_type, val) \
int function(sd_bus *bus, \
const char *path, \
diff --git a/src/shared/bus-message-util.c b/src/shared/bus-message-util.c
index a6523ff00e..8da112cacc 100644
--- a/src/shared/bus-message-util.c
+++ b/src/shared/bus-message-util.c
@@ -216,6 +216,25 @@ clear:
return r;
}
+int bus_message_append_string_set(sd_bus_message *m, const Set *set) {
+ int r;
+
+ assert(m);
+
+ r = sd_bus_message_open_container(m, 'a', "s");
+ if (r < 0)
+ return r;
+
+ const char *s;
+ SET_FOREACH(s, set) {
+ r = sd_bus_message_append(m, "s", s);
+ if (r < 0)
+ return r;
+ }
+
+ return sd_bus_message_close_container(m);
+}
+
int bus_message_dump_string(sd_bus_message *message) {
const char *s;
int r;
diff --git a/src/shared/bus-message-util.h b/src/shared/bus-message-util.h
index baec1cb92b..d4a05f5b9c 100644
--- a/src/shared/bus-message-util.h
+++ b/src/shared/bus-message-util.h
@@ -19,6 +19,8 @@ int bus_message_read_dns_servers(
struct in_addr_full ***ret_dns,
size_t *ret_n_dns);
+int bus_message_append_string_set(sd_bus_message *m, const Set *s);
+
int bus_message_dump_string(sd_bus_message *message);
int bus_message_dump_fd(sd_bus_message *message);
diff --git a/src/shared/bus-util.c b/src/shared/bus-util.c
index 362dd78537..bdce97790d 100644
--- a/src/shared/bus-util.c
+++ b/src/shared/bus-util.c
@@ -862,43 +862,6 @@ int bus_register_malloc_status(sd_bus *bus, const char *destination) {
return 0;
}
-int bus_message_append_string_set(sd_bus_message *m, Set *set) {
- const char *s;
- int r;
-
- assert(m);
-
- r = sd_bus_message_open_container(m, 'a', "s");
- if (r < 0)
- return r;
-
- SET_FOREACH(s, set) {
- r = sd_bus_message_append(m, "s", s);
- if (r < 0)
- return r;
- }
-
- return sd_bus_message_close_container(m);
-}
-
-int bus_property_get_string_set(
- sd_bus *bus,
- const char *path,
- const char *interface,
- const char *property,
- sd_bus_message *reply,
- void *userdata,
- sd_bus_error *error) {
-
- Set **s = ASSERT_PTR(userdata);
-
- assert(bus);
- assert(property);
- assert(reply);
-
- return bus_message_append_string_set(reply, *s);
-}
-
int bus_creds_get_pidref(
sd_bus_creds *c,
PidRef *ret) {
diff --git a/src/shared/bus-util.h b/src/shared/bus-util.h
index a2193ebf97..e49ba66a10 100644
--- a/src/shared/bus-util.h
+++ b/src/shared/bus-util.h
@@ -75,10 +75,6 @@ int bus_reply_pair_array(sd_bus_message *m, char **l);
/* Listen to GetMallocInfo() calls to 'destination' and return malloc_info() via FD */
int bus_register_malloc_status(sd_bus *bus, const char *destination);
-int bus_message_append_string_set(sd_bus_message *m, Set *s);
-
-int bus_property_get_string_set(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
-
int bus_creds_get_pidref(sd_bus_creds *c, PidRef *ret);
int bus_query_sender_pidref(sd_bus_message *m, PidRef *ret);
From 47224a5d1eae82421419fb9bcf2916ee1de041dd Mon Sep 17 00:00:00 2001
From: Mike Yuan <me@yhndnzj.com>
Date: Mon, 13 Jan 2025 16:35:13 +0100
Subject: [PATCH] shared/serialize: make input params const
(cherry picked from commit 3f03d39ca3b2f25f521342f2b0e49f60c51246e1)
Resolves: RHEL-73780
---
src/shared/serialize.c | 9 ++++++---
src/shared/serialize.h | 4 ++--
2 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/src/shared/serialize.c b/src/shared/serialize.c
index 735caf4978..58773e5ddd 100644
--- a/src/shared/serialize.c
+++ b/src/shared/serialize.c
@@ -164,11 +164,14 @@ int serialize_dual_timestamp(FILE *f, const char *name, const dual_timestamp *t)
return serialize_item_format(f, name, USEC_FMT " " USEC_FMT, t->realtime, t->monotonic);
}
-int serialize_strv(FILE *f, const char *key, char **l) {
+int serialize_strv(FILE *f, const char *key, char * const *l) {
int ret = 0, r;
/* Returns the first error, or positive if anything was serialized, 0 otherwise. */
+ assert(f);
+ assert(key);
+
STRV_FOREACH(i, l) {
r = serialize_item_escaped(f, key, *i);
if ((ret >= 0 && r < 0) ||
@@ -267,8 +270,7 @@ int serialize_item_base64mem(FILE *f, const char *key, const void *p, size_t l)
return 1;
}
-int serialize_string_set(FILE *f, const char *key, Set *s) {
- const char *e;
+int serialize_string_set(FILE *f, const char *key, const Set *s) {
int r;
assert(f);
@@ -279,6 +281,7 @@ int serialize_string_set(FILE *f, const char *key, Set *s) {
/* Serialize as individual items, as each element might contain separators and escapes */
+ const char *e;
SET_FOREACH(e, s) {
r = serialize_item(f, key, e);
if (r < 0)
diff --git a/src/shared/serialize.h b/src/shared/serialize.h
index 355eff9b8f..a1350533cf 100644
--- a/src/shared/serialize.h
+++ b/src/shared/serialize.h
@@ -21,10 +21,10 @@ int serialize_fd(FILE *f, FDSet *fds, const char *key, int fd);
int serialize_fd_many(FILE *f, FDSet *fds, const char *key, const int fd_array[], size_t n_fd_array);
int serialize_usec(FILE *f, const char *key, usec_t usec);
int serialize_dual_timestamp(FILE *f, const char *key, const dual_timestamp *t);
-int serialize_strv(FILE *f, const char *key, char **l);
+int serialize_strv(FILE *f, const char *key, char * const *l);
int serialize_pidref(FILE *f, FDSet *fds, const char *key, PidRef *pidref);
int serialize_ratelimit(FILE *f, const char *key, const RateLimit *rl);
-int serialize_string_set(FILE *f, const char *key, Set *s);
+int serialize_string_set(FILE *f, const char *key, const Set *s);
int serialize_image_policy(FILE *f, const char *key, const ImagePolicy *p);
static inline int serialize_bool(FILE *f, const char *key, bool b) {
From 6eda0675d5a30080c6dd68c863707e22192b9e42 Mon Sep 17 00:00:00 2001
From: Mike Yuan <me@yhndnzj.com>
Date: Mon, 13 Jan 2025 16:35:58 +0100
Subject: [PATCH] shared/serialize: introduce serialize_id128()
(cherry picked from commit 38a2c2bf6a89def24007c0dac529c07da713abfb)
Resolves: RHEL-73780
---
src/core/unit-serialize.c | 3 +--
src/shared/serialize.c | 10 ++++++++++
src/shared/serialize.h | 3 +++
3 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/src/core/unit-serialize.c b/src/core/unit-serialize.c
index 82102c0c32..2b5b472c47 100644
--- a/src/core/unit-serialize.c
+++ b/src/core/unit-serialize.c
@@ -117,8 +117,7 @@ int unit_serialize_state(Unit *u, FILE *f, FDSet *fds, bool switching_root) {
if (gid_is_valid(u->ref_gid))
(void) serialize_item_format(f, "ref-gid", GID_FMT, u->ref_gid);
- if (!sd_id128_is_null(u->invocation_id))
- (void) serialize_item_format(f, "invocation-id", SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL(u->invocation_id));
+ (void) serialize_id128(f, "invocation-id", u->invocation_id);
(void) serialize_item(f, "freezer-state", freezer_state_to_string(u->freezer_state));
diff --git a/src/shared/serialize.c b/src/shared/serialize.c
index 58773e5ddd..44148bea2c 100644
--- a/src/shared/serialize.c
+++ b/src/shared/serialize.c
@@ -182,6 +182,16 @@ int serialize_strv(FILE *f, const char *key, char * const *l) {
return ret;
}
+int serialize_id128(FILE *f, const char *key, sd_id128_t id) {
+ assert(f);
+ assert(key);
+
+ if (sd_id128_is_null(id))
+ return 0;
+
+ return serialize_item_format(f, key, SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL(id));
+}
+
int serialize_pidref(FILE *f, FDSet *fds, const char *key, PidRef *pidref) {
int r;
diff --git a/src/shared/serialize.h b/src/shared/serialize.h
index a1350533cf..f2be84807a 100644
--- a/src/shared/serialize.h
+++ b/src/shared/serialize.h
@@ -3,6 +3,8 @@
#include <stdio.h>
+#include "sd-id128.h"
+
#include "fdset.h"
#include "image-policy.h"
#include "macro.h"
@@ -22,6 +24,7 @@ int serialize_fd_many(FILE *f, FDSet *fds, const char *key, const int fd_array[]
int serialize_usec(FILE *f, const char *key, usec_t usec);
int serialize_dual_timestamp(FILE *f, const char *key, const dual_timestamp *t);
int serialize_strv(FILE *f, const char *key, char * const *l);
+int serialize_id128(FILE *f, const char *key, sd_id128_t id);
int serialize_pidref(FILE *f, FDSet *fds, const char *key, PidRef *pidref);
int serialize_ratelimit(FILE *f, const char *key, const RateLimit *rl);
int serialize_string_set(FILE *f, const char *key, const Set *s);
From 370d94580947ffbc2e3e1bee30564b98896d9d02 Mon Sep 17 00:00:00 2001
From: Mike Yuan <me@yhndnzj.com>
Date: Sat, 11 Jan 2025 16:26:55 +0100
Subject: [PATCH] bus-util: do not reset the count returned by
sd_bus_track_count_name()
Follow-up for 8402ca04d1a063c3d8a9e3d5c16df8bb8778ae98
While at it, turn the retval check for sd_bus_track_count_name()
into assertion, given we're working with already established tracks
(service_name_is_valid() should never yield false in this case).
Addresses https://github.com/systemd/systemd/pull/35406#discussion_r1912066774
(cherry picked from commit 33eeea4128f31df7ab4bd8866b582062d70114ae)
Resolves: RHEL-73780
---
src/shared/bus-util.c | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/src/shared/bus-util.c b/src/shared/bus-util.c
index bdce97790d..1fda013697 100644
--- a/src/shared/bus-util.c
+++ b/src/shared/bus-util.c
@@ -700,16 +700,15 @@ int bus_track_add_name_many(sd_bus_track *t, char **l) {
int bus_track_to_strv(sd_bus_track *t, char ***ret) {
_cleanup_strv_free_ char **subscribed = NULL;
- int r = 0;
+ int r;
assert(ret);
for (const char *n = sd_bus_track_first(t); n; n = sd_bus_track_next(t)) {
- r = sd_bus_track_count_name(t, n);
- if (r < 0)
- return r;
+ int c = sd_bus_track_count_name(t, n);
+ assert(c >= 0);
- for (int j = 0; j < r; j++) {
+ for (int j = 0; j < c; j++) {
r = strv_extend(&subscribed, n);
if (r < 0)
return r;
@@ -717,7 +716,7 @@ int bus_track_to_strv(sd_bus_track *t, char ***ret) {
}
*ret = TAKE_PTR(subscribed);
- return r;
+ return 0;
}
int bus_open_system_watch_bind_with_description(sd_bus **ret, const char *description) {
From 19b9d9140cbb9270119f807e8b7fe4047d5aae4a Mon Sep 17 00:00:00 2001
From: Mike Yuan <me@yhndnzj.com>
Date: Mon, 13 Jan 2025 17:06:21 +0100
Subject: [PATCH] core/manager: use FOREACH_ARRAY at one more place
(cherry picked from commit a7516260b32dd26fb61b1dd702b9bc718cd420f9)
Resolves: RHEL-73780
---
src/core/manager.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/src/core/manager.c b/src/core/manager.c
index 4a7132274f..96fc8941eb 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -1816,15 +1816,16 @@ Manager* manager_free(Manager *m) {
hashmap_free(m->uid_refs);
hashmap_free(m->gid_refs);
- for (ExecDirectoryType dt = 0; dt < _EXEC_DIRECTORY_TYPE_MAX; dt++)
- m->prefix[dt] = mfree(m->prefix[dt]);
+ FOREACH_ARRAY(i, m->prefix, _EXEC_DIRECTORY_TYPE_MAX)
+ free(*i);
+
free(m->received_credentials_directory);
free(m->received_encrypted_credentials_directory);
free(m->watchdog_pretimeout_governor);
free(m->watchdog_pretimeout_governor_overridden);
- m->fw_ctx = fw_ctx_free(m->fw_ctx);
+ fw_ctx_free(m->fw_ctx);
#if BPF_FRAMEWORK
bpf_restrict_fs_destroy(m->restrict_fs);
From 860690d1fb190600ec6c8db9052ec4c9fac0666f Mon Sep 17 00:00:00 2001
From: Mike Yuan <me@yhndnzj.com>
Date: Sat, 11 Jan 2025 18:38:49 +0100
Subject: [PATCH] core/manager: drop duplicate bus track deserialization
bus_init_api() now does this internally
(after 8402ca04d1a063c3d8a9e3d5c16df8bb8778ae98).
(cherry picked from commit af0e10354e567bfd0b9521376b2aad55f12a4e3d)
Resolves: RHEL-73780
---
src/core/manager.c | 6 ------
1 file changed, 6 deletions(-)
diff --git a/src/core/manager.c b/src/core/manager.c
index 96fc8941eb..38fe53c319 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -2142,12 +2142,6 @@ int manager_startup(Manager *m, FILE *serialization, FDSet *fds, const char *roo
/* Connect to the bus if we are good for it */
manager_setup_bus(m);
- /* Now that we are connected to all possible buses, let's deserialize who is tracking us. */
- r = bus_track_coldplug(m->api_bus, &m->subscribed, false, m->subscribed_as_strv);
- if (r < 0)
- log_warning_errno(r, "Failed to deserialized tracked clients, ignoring: %m");
- m->subscribed_as_strv = strv_free(m->subscribed_as_strv);
-
r = manager_varlink_init(m);
if (r < 0)
log_warning_errno(r, "Failed to set up Varlink, ignoring: %m");
From b5b61bf95b6d7d7ab1b01eb7e5195eb99b06635d Mon Sep 17 00:00:00 2001
From: Mike Yuan <me@yhndnzj.com>
Date: Mon, 13 Jan 2025 16:42:34 +0100
Subject: [PATCH] bus-util: introduce bus_get_instance_id()
(cherry picked from commit a9a8d2e12fe01b928135895f00c5bca465b7d13b)
Resolves: RHEL-73780
---
src/shared/bus-util.c | 23 +++++++++++++++++++++++
src/shared/bus-util.h | 2 ++
2 files changed, 25 insertions(+)
diff --git a/src/shared/bus-util.c b/src/shared/bus-util.c
index 1fda013697..8eb3fbbf54 100644
--- a/src/shared/bus-util.c
+++ b/src/shared/bus-util.c
@@ -905,6 +905,29 @@ int bus_query_sender_pidref(
return bus_creds_get_pidref(creds, ret);
}
+int bus_get_instance_id(sd_bus *bus, sd_id128_t *ret) {
+ _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
+ int r;
+
+ assert(bus);
+ assert(ret);
+
+ r = sd_bus_call_method(bus,
+ "org.freedesktop.DBus", "/org/freedesktop/DBus", "org.freedesktop.DBus", "GetId",
+ /* error = */ NULL, &reply,
+ NULL);
+ if (r < 0)
+ return r;
+
+ const char *id;
+
+ r = sd_bus_message_read_basic(reply, 's', &id);
+ if (r < 0)
+ return r;
+
+ return sd_id128_from_string(id, ret);
+}
+
static const char* const bus_transport_table[] = {
[BUS_TRANSPORT_LOCAL] = "local",
[BUS_TRANSPORT_REMOTE] = "remote",
diff --git a/src/shared/bus-util.h b/src/shared/bus-util.h
index e49ba66a10..fe85d815b8 100644
--- a/src/shared/bus-util.h
+++ b/src/shared/bus-util.h
@@ -78,4 +78,6 @@ int bus_register_malloc_status(sd_bus *bus, const char *destination);
int bus_creds_get_pidref(sd_bus_creds *c, PidRef *ret);
int bus_query_sender_pidref(sd_bus_message *m, PidRef *ret);
+int bus_get_instance_id(sd_bus *bus, sd_id128_t *ret);
+
const char* bus_transport_to_string(BusTransport transport) _const_;
From 1c3965954b88c0ac3811d29a186382633f336db7 Mon Sep 17 00:00:00 2001
From: Mike Yuan <me@yhndnzj.com>
Date: Mon, 13 Jan 2025 17:06:35 +0100
Subject: [PATCH] core: serialize API bus id and validate before deserializing
bus tracks
(cherry picked from commit 1446e3c3921067e3a6228a3e172b5dfd95437136)
Resolves: RHEL-73780
---
src/core/dbus.c | 55 +++++++++++++++++++-----------------
src/core/dbus.h | 1 -
src/core/manager-serialize.c | 8 +++++-
src/core/manager.h | 11 +++++---
src/shared/bus-util.c | 2 +-
src/shared/bus-util.h | 2 +-
6 files changed, 45 insertions(+), 34 deletions(-)
diff --git a/src/core/dbus.c b/src/core/dbus.c
index 58cd1ee175..a2a2611a03 100644
--- a/src/core/dbus.c
+++ b/src/core/dbus.c
@@ -5,6 +5,7 @@
#include <unistd.h>
#include "sd-bus.h"
+#include "sd-id128.h"
#include "alloc-util.h"
#include "bus-common-errors.h"
@@ -774,6 +775,24 @@ static int bus_on_connection(sd_event_source *s, int fd, uint32_t revents, void
return 0;
}
+static int bus_track_coldplug(sd_bus *bus, sd_bus_track **t, char * const *l) {
+ int r;
+
+ assert(bus);
+ assert(t);
+
+ if (strv_isempty(l))
+ return 0;
+
+ if (!*t) {
+ r = sd_bus_track_new(bus, t, NULL, NULL);
+ if (r < 0)
+ return r;
+ }
+
+ return bus_track_add_name_many(*t, l);
+}
+
static int bus_setup_api(Manager *m, sd_bus *bus) {
char *name;
Unit *u;
@@ -860,10 +879,15 @@ int bus_init_api(Manager *m) {
if (r < 0)
return log_error_errno(r, "Failed to set up API bus: %m");
- (void) bus_track_coldplug(bus, &m->subscribed, /* recursive= */ false, m->subscribed_as_strv);
+ r = bus_get_instance_id(bus, &m->bus_id);
+ if (r < 0)
+ log_warning_errno(r, "Failed to query API bus instance ID, not deserializing subscriptions: %m");
+ else if (sd_id128_is_null(m->deserialized_bus_id) || sd_id128_equal(m->bus_id, m->deserialized_bus_id))
+ (void) bus_track_coldplug(bus, &m->subscribed, m->subscribed_as_strv);
m->subscribed_as_strv = strv_free(m->subscribed_as_strv);
- m->api_bus = TAKE_PTR(bus);
+ m->deserialized_bus_id = SD_ID128_NULL;
+ m->api_bus = TAKE_PTR(bus);
return 0;
}
@@ -1015,6 +1039,9 @@ static void destroy_bus(Manager *m, sd_bus **bus) {
log_warning_errno(r, "Failed to serialize api subscribers, ignoring: %m");
strv_free_and_replace(m->subscribed_as_strv, subscribed);
+ m->deserialized_bus_id = m->bus_id;
+ m->bus_id = SD_ID128_NULL;
+
m->subscribed = sd_bus_track_unref(m->subscribed);
}
@@ -1163,30 +1190,6 @@ void bus_track_serialize(sd_bus_track *t, FILE *f, const char *prefix) {
}
}
-int bus_track_coldplug(sd_bus *bus, sd_bus_track **t, bool recursive, char **l) {
- int r;
-
- assert(t);
-
- if (strv_isempty(l))
- return 0;
-
- if (!bus)
- return 0;
-
- if (!*t) {
- r = sd_bus_track_new(bus, t, NULL, NULL);
- if (r < 0)
- return r;
- }
-
- r = sd_bus_track_set_recursive(*t, recursive);
- if (r < 0)
- return r;
-
- return bus_track_add_name_many(*t, l);
-}
-
uint64_t manager_bus_n_queued_write(Manager *m) {
uint64_t c = 0;
sd_bus *b;
diff --git a/src/core/dbus.h b/src/core/dbus.h
index eb1baf6049..0f81102fc1 100644
--- a/src/core/dbus.h
+++ b/src/core/dbus.h
@@ -19,7 +19,6 @@ void bus_done(Manager *m);
int bus_fdset_add_all(Manager *m, FDSet *fds);
void bus_track_serialize(sd_bus_track *t, FILE *f, const char *prefix);
-int bus_track_coldplug(sd_bus *bus, sd_bus_track **t, bool recursive, char **l);
int bus_foreach_bus(Manager *m, sd_bus_track *subscribed2, int (*send_message)(sd_bus *bus, void *userdata), void *userdata);
diff --git a/src/core/manager-serialize.c b/src/core/manager-serialize.c
index bc29ac91c6..b225799ed9 100644
--- a/src/core/manager-serialize.c
+++ b/src/core/manager-serialize.c
@@ -158,6 +158,7 @@ int manager_serialize(
(void) serialize_ratelimit(f, "dump-ratelimit", &m->dump_ratelimit);
(void) serialize_ratelimit(f, "reload-reexec-ratelimit", &m->reload_reexec_ratelimit);
+ (void) serialize_id128(f, "bus-id", m->bus_id);
bus_track_serialize(m->subscribed, f, "subscribed");
r = dynamic_user_serialize(m, f, fds);
@@ -491,7 +492,12 @@ int manager_deserialize(Manager *m, FILE *f, FDSet *fds) {
manager_deserialize_gid_refs_one(m, val);
else if ((val = startswith(l, "exec-runtime=")))
(void) exec_shared_runtime_deserialize_one(m, val, fds);
- else if ((val = startswith(l, "subscribed="))) {
+ else if ((val = startswith(l, "bus-id="))) {
+
+ r = sd_id128_from_string(val, &m->deserialized_bus_id);
+ if (r < 0)
+ return r;
+ } else if ((val = startswith(l, "subscribed="))) {
r = strv_extend(&m->subscribed_as_strv, val);
if (r < 0)
diff --git a/src/core/manager.h b/src/core/manager.h
index 7016eab2d3..c5bd242968 100644
--- a/src/core/manager.h
+++ b/src/core/manager.h
@@ -335,13 +335,16 @@ struct Manager {
int private_listen_fd;
sd_event_source *private_listen_event_source;
- /* Contains all the clients that are subscribed to signals via
- the API bus. Note that private bus connections are always
- considered subscribes, since they last for very short only,
- and it is much simpler that way. */
+ /* Contains all the clients that are subscribed to signals via the API bus. Note that private bus
+ * connections are always considered subscribes, since they last for very short only, and it is
+ * much simpler that way. */
sd_bus_track *subscribed;
char **subscribed_as_strv;
+ /* The bus id of API bus acquired through org.freedesktop.DBus.GetId, which before deserializing
+ * subscriptions we'd use to verify the bus is still the same instance as before. */
+ sd_id128_t bus_id, deserialized_bus_id;
+
/* This is used during reloading: before the reload we queue
* the reply message here, and afterwards we send it */
sd_bus_message *pending_reload_message;
diff --git a/src/shared/bus-util.c b/src/shared/bus-util.c
index 8eb3fbbf54..9255dbc9b6 100644
--- a/src/shared/bus-util.c
+++ b/src/shared/bus-util.c
@@ -686,7 +686,7 @@ int bus_path_decode_unique(const char *path, const char *prefix, char **ret_send
return 1;
}
-int bus_track_add_name_many(sd_bus_track *t, char **l) {
+int bus_track_add_name_many(sd_bus_track *t, char * const *l) {
int r = 0;
assert(t);
diff --git a/src/shared/bus-util.h b/src/shared/bus-util.h
index fe85d815b8..024b54648d 100644
--- a/src/shared/bus-util.h
+++ b/src/shared/bus-util.h
@@ -62,7 +62,7 @@ int bus_log_connect_error(int r, BusTransport transport, RuntimeScope scope);
int bus_path_encode_unique(sd_bus *b, const char *prefix, const char *sender_id, const char *external_id, char **ret_path);
int bus_path_decode_unique(const char *path, const char *prefix, char **ret_sender, char **ret_external);
-int bus_track_add_name_many(sd_bus_track *t, char **l);
+int bus_track_add_name_many(sd_bus_track *t, char * const *l);
int bus_track_to_strv(sd_bus_track *t, char ***ret);
int bus_open_system_watch_bind_with_description(sd_bus **ret, const char *description);
From ce3d2da71072a3bb4d2ea49159cba8a671bcde90 Mon Sep 17 00:00:00 2001
From: Mike Yuan <me@yhndnzj.com>
Date: Mon, 13 Jan 2025 17:30:51 +0100
Subject: [PATCH] core/manager: restore bus track deserialization cleanup in
manager_reload()
There's zero explanation why it got (spuriously) removed in
8402ca04d1a063c3d8a9e3d5c16df8bb8778ae98...
(cherry picked from commit 34f4b817f67b002eae7e2c09b19bf4b66c4791b6)
Resolves: RHEL-73780
---
src/core/manager.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/src/core/manager.c b/src/core/manager.c
index 38fe53c319..cd8cdd87a5 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -3805,6 +3805,11 @@ int manager_reload(Manager *m) {
(void) manager_setup_handoff_timestamp_fd(m);
(void) manager_setup_pidref_transport_fd(m);
+ /* Clean up deserialized bus track information. They're never consumed during reload (as opposed to
+ * reexec) since we do not disconnect from the bus. */
+ m->subscribed_as_strv = strv_free(m->subscribed_as_strv);
+ m->deserialized_bus_id = SD_ID128_NULL;
+
/* Third, fire things up! */
manager_coldplug(m);
From 4ffeaa184cc33612e7229328a9272059f4d3ce34 Mon Sep 17 00:00:00 2001
From: Jan Macku <jamacku@redhat.com>
Date: Wed, 15 Jan 2025 15:06:46 +0100
Subject: [PATCH] shared/bus-util: add missing `set.h` include
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
```
In file included from ../src/shared/bus-get-properties.c:4:
../src/shared/bus-message-util.h:22:60: error: unknown type name ‘Set’
22 | int bus_message_append_string_set(sd_bus_message *m, const Set *s);
| ^~~
../src/shared/bus-get-properties.c: In function ‘bus_property_get_string_set’:
../src/shared/bus-get-properties.c:178:9: error: unknown type name ‘Set’
178 | Set **s = ASSERT_PTR(userdata);
| ^~~
```
follow-up to https://github.com/systemd/systemd/commit/91080bc9733b5b2478bfc0ed58f6a7ae5da7e639
(cherry picked from commit ca97d48bd425685d4ec20397812c3b1b006f5070)
Resolves: RHEL-73780
---
src/shared/bus-message-util.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/shared/bus-message-util.h b/src/shared/bus-message-util.h
index d4a05f5b9c..02c670695e 100644
--- a/src/shared/bus-message-util.h
+++ b/src/shared/bus-message-util.h
@@ -4,6 +4,7 @@
#include "sd-bus.h"
#include "in-addr-util.h"
+#include "set.h"
#include "socket-netlink.h"
int bus_message_read_id128(sd_bus_message *m, sd_id128_t *ret);
From 6368b96d9333723c70413511d87630df896ff48c Mon Sep 17 00:00:00 2001
From: Yu Watanabe <watanabe.yu+github@gmail.com>
Date: Sat, 11 Jan 2025 05:27:44 +0900
Subject: [PATCH] udevadm-test: add missing oom check
(cherry picked from commit 22ca9406c45bb07a02d28da13f6e3909071c9176)
Resolves: RHEL-75774
---
src/udev/udevadm-test.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/udev/udevadm-test.c b/src/udev/udevadm-test.c
index 748bcaf364..34bc80ff4b 100644
--- a/src/udev/udevadm-test.c
+++ b/src/udev/udevadm-test.c
@@ -129,6 +129,10 @@ int test_main(int argc, char *argv[], void *userdata) {
device_seal(dev);
event = udev_event_new(dev, NULL, EVENT_UDEVADM_TEST);
+ if (!event) {
+ log_oom();
+ goto out;
+ }
assert_se(sigfillset(&mask) >= 0);
assert_se(sigprocmask(SIG_SETMASK, &mask, &sigmask_orig) >= 0);
From 69af60a47f87b85bc4f4bd82f61baa791c631138 Mon Sep 17 00:00:00 2001
From: Yu Watanabe <watanabe.yu+github@gmail.com>
Date: Sat, 11 Jan 2025 03:57:34 +0900
Subject: [PATCH] udev-rules: replace 'type *func()' -> 'type* func()'
(cherry picked from commit a75aeca78c3ad88dc9840f45963f86097d20cf6f)
Resolves: RHEL-75774
---
src/udev/udev-rules.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
index 85ae1c2163..8d00702595 100644
--- a/src/udev/udev-rules.c
+++ b/src/udev/udev-rules.c
@@ -345,7 +345,7 @@ static void log_event_truncated(
/*** Other functions ***/
-static UdevRuleToken *udev_rule_token_free(UdevRuleToken *token) {
+static UdevRuleToken* udev_rule_token_free(UdevRuleToken *token) {
if (!token)
return NULL;
@@ -364,7 +364,7 @@ static void udev_rule_line_clear_tokens(UdevRuleLine *rule_line) {
udev_rule_token_free(i);
}
-static UdevRuleLine *udev_rule_line_free(UdevRuleLine *rule_line) {
+static UdevRuleLine* udev_rule_line_free(UdevRuleLine *rule_line) {
if (!rule_line)
return NULL;
@@ -379,7 +379,7 @@ static UdevRuleLine *udev_rule_line_free(UdevRuleLine *rule_line) {
DEFINE_TRIVIAL_CLEANUP_FUNC(UdevRuleLine*, udev_rule_line_free);
-static UdevRuleFile *udev_rule_file_free(UdevRuleFile *rule_file) {
+static UdevRuleFile* udev_rule_file_free(UdevRuleFile *rule_file) {
if (!rule_file)
return NULL;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment