|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
From 5038dc90efcd92e3fbbae06a7d459c8f5d549915 Mon Sep 17 00:00:00 2001
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
From: Yu Watanabe <watanabe.yu+github@gmail.com>
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
Date: Thu, 19 Oct 2017 22:40:04 +0900
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
Subject: [PATCH] core: fix D-Bus API
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
This fixes bugs introduced by cffaed83e87bde81378b2be74192193850d0e03a.
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
Closes #7129.
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
(cherry picked from commit 3f856a2813359ad8203ccad388e54ff41a9ecaf1)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
---
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
src/core/dbus-execute.c | 8 ++---
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
src/shared/bus-unit-util.c | 79 ++++++++++++++++++++++++++--------------------
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
2 files changed, 49 insertions(+), 38 deletions(-)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
diff --git a/src/core/dbus-execute.c b/src/core/dbus-execute.c
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
index e0aa9fdd82..26c6e039b8 100644
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
--- a/src/core/dbus-execute.c
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+++ b/src/core/dbus-execute.c
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
@@ -1189,7 +1189,7 @@ int bus_exec_context_set_transient_property(
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
} else if (streq(name, "SystemCallFilter")) {
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
int whitelist;
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- _cleanup_strv_free_ char **l;
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ _cleanup_strv_free_ char **l = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
r = sd_bus_message_enter_container(message, 'r', "bas");
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
@@ -1238,7 +1238,7 @@ int bus_exec_context_set_transient_property(
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
if (id == __NR_SCMP_ERROR)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
return -EINVAL;
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- r = set_put(c->address_families, INT_TO_PTR(id + 1));
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ r = set_put(c->syscall_filter, INT_TO_PTR(id + 1));
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
return r;
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
}
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
@@ -1250,7 +1250,7 @@ int bus_exec_context_set_transient_property(
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
if (id == __NR_SCMP_ERROR)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
return -EINVAL;
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- r = set_put(c->address_families, INT_TO_PTR(id + 1));
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ r = set_put(c->syscall_filter, INT_TO_PTR(id + 1));
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
return r;
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
}
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
@@ -1330,7 +1330,7 @@ int bus_exec_context_set_transient_property(
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
} else if (streq(name, "RestrictAddressFamilies")) {
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
int whitelist;
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- _cleanup_strv_free_ char **l;
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ _cleanup_strv_free_ char **l = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
r = sd_bus_message_enter_container(message, 'r', "bas");
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
diff --git a/src/shared/bus-unit-util.c b/src/shared/bus-unit-util.c
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
index 6e2022587a..0b8260193a 100644
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
--- a/src/shared/bus-unit-util.c
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+++ b/src/shared/bus-unit-util.c
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
@@ -602,12 +602,9 @@ int bus_append_unit_property_assignment(sd_bus_message *m, const char *assignmen
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
} else if (streq(field, "SystemCallFilter")) {
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
int whitelist;
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ _cleanup_strv_free_ char **l = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
const char *p;
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- r = sd_bus_message_open_container(m, 'v', "bas");
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- return bus_log_create_error(r);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
-
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
p = eq;
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
if (*p == '~') {
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
whitelist = 0;
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
@@ -615,18 +612,10 @@ int bus_append_unit_property_assignment(sd_bus_message *m, const char *assignmen
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
} else
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
whitelist = 1;
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- r = sd_bus_message_append_basic(m, 'b', &whitelist);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- return bus_log_create_error(r);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
-
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- r = sd_bus_message_open_container(m, 'a', "s");
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- return bus_log_create_error(r);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
-
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
if (whitelist != 0) {
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- r = sd_bus_message_append_basic(m, 's', "@default");
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ r = strv_extend(&l, "@default");
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- return bus_log_create_error(r);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ return log_oom();
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
}
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
for (;;) {
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
@@ -638,16 +627,34 @@ int bus_append_unit_property_assignment(sd_bus_message *m, const char *assignmen
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
if (r == 0)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
break;
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- r = sd_bus_message_append_basic(m, 's', word);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ r = strv_extend(&l, word);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- return bus_log_create_error(r);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ return log_oom();
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
}
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ r = sd_bus_message_open_container(m, 'v', "(bas)");
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ return bus_log_create_error(r);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ r = sd_bus_message_open_container(m, 'r', "bas");
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ return bus_log_create_error(r);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ r = sd_bus_message_append_basic(m, 'b', &whitelist);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ return bus_log_create_error(r);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ r = sd_bus_message_append_strv(m, l);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ return bus_log_create_error(r);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
r = sd_bus_message_close_container(m);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
return bus_log_create_error(r);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
r = sd_bus_message_close_container(m);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ return bus_log_create_error(r);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
} else if (streq(field, "SystemCallArchitectures")) {
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
const char *p;
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
@@ -691,27 +698,15 @@ int bus_append_unit_property_assignment(sd_bus_message *m, const char *assignmen
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
} else if (streq(field, "RestrictAddressFamilies")) {
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
int whitelist;
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- const char *p;
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ _cleanup_strv_free_ char **l = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ const char *p = eq;
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- r = sd_bus_message_open_container(m, 'v', "bas");
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- return bus_log_create_error(r);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
-
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- p = eq;
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
if (*p == '~') {
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
whitelist = 0;
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
p++;
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
} else
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
whitelist = 1;
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- r = sd_bus_message_append_basic(m, 'b', &whitelist);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- return bus_log_create_error(r);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
-
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- r = sd_bus_message_open_container(m, 'a', "s");
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- return bus_log_create_error(r);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
-
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
for (;;) {
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
_cleanup_free_ char *word = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
@@ -721,19 +716,35 @@ int bus_append_unit_property_assignment(sd_bus_message *m, const char *assignmen
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
if (r == 0)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
break;
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- r = sd_bus_message_append_basic(m, 's', word);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ r = strv_extend(&l, word);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- return bus_log_create_error(r);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ return log_oom();
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
}
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
- r = sd_bus_message_close_container(m);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ r = sd_bus_message_open_container(m, 'v', "(bas)");
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ return bus_log_create_error(r);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ r = sd_bus_message_open_container(m, 'r', "bas");
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ return bus_log_create_error(r);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ r = sd_bus_message_append_basic(m, 'b', &whitelist);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ return bus_log_create_error(r);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ r = sd_bus_message_append_strv(m, l);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
return bus_log_create_error(r);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
r = sd_bus_message_close_container(m);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ return bus_log_create_error(r);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ r = sd_bus_message_close_container(m);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
+ return bus_log_create_error(r);
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
#endif
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
-
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
} else if (streq(field, "FileDescriptorStoreMax")) {
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
unsigned u;
|
|
Zbigniew Jędrzejewski-Szmek |
35bb94 |
|