summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2013-11-21 20:49:04 +0100
committerLennart Poettering <lennart@poettering.net>2013-11-21 21:12:36 +0100
commit6ce270b10ad5538fb60dabcf409a49a9c5fd0e8d (patch)
tree5caa8aa6042f1b369d04be187dd278b5e5c6a41d /src
parent21586b77de9bad401f245dd55b75cedb0c2e9b7c (diff)
core: fix deserialization of StartTransientUnit() parameters
Diffstat (limited to 'src')
-rw-r--r--src/core/dbus-manager.c4
-rw-r--r--src/core/dbus-service.c4
-rw-r--r--src/core/dbus-unit.c11
3 files changed, 16 insertions, 3 deletions
diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c
index bc0c3109e3..b284c5e197 100644
--- a/src/core/dbus-manager.c
+++ b/src/core/dbus-manager.c
@@ -547,11 +547,11 @@ static int method_start_transient_unit(sd_bus *bus, sd_bus_message *message, voi
if (mode < 0)
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Job mode %s is invalid.", smode);
- r = manager_load_unit(m, name, NULL, error, &u);
+ r = selinux_access_check(bus, message, "start", error);
if (r < 0)
return r;
- r = selinux_unit_access_check(u, bus, message, "start", error);
+ r = manager_load_unit(m, name, NULL, error, &u);
if (r < 0)
return r;
diff --git a/src/core/dbus-service.c b/src/core/dbus-service.c
index c4bfa2c38f..3fa2d33638 100644
--- a/src/core/dbus-service.c
+++ b/src/core/dbus-service.c
@@ -169,6 +169,10 @@ static int bus_service_set_transient_property(
if (r < 0)
return r;
+ r = sd_bus_message_exit_container(message);
+ if (r < 0)
+ return r;
+
if (mode != UNIT_CHECK) {
_cleanup_free_ char *buf = NULL;
_cleanup_fclose_ FILE *f = NULL;
diff --git a/src/core/dbus-unit.c b/src/core/dbus-unit.c
index 5fca7653e0..975fc46289 100644
--- a/src/core/dbus-unit.c
+++ b/src/core/dbus-unit.c
@@ -780,7 +780,7 @@ int bus_unit_queue_job(
path = job_dbus_path(j);
if (!path)
- return r;
+ return -ENOMEM;
return sd_bus_reply_method_return(message, "o", path);
}
@@ -895,6 +895,10 @@ static int bus_unit_set_transient_property(
if (r < 0)
return r;
+ r = sd_bus_message_exit_container(message);
+ if (r < 0)
+ return r;
+
return 1;
}
@@ -941,6 +945,7 @@ int bus_unit_set_properties(
r = sd_bus_message_rewind(message, false);
if (r < 0)
return r;
+
for_real = true;
continue;
}
@@ -975,6 +980,10 @@ int bus_unit_set_properties(
n += for_real;
}
+ r = sd_bus_message_exit_container(message);
+ if (r < 0)
+ return r;
+
if (commit && n > 0 && UNIT_VTABLE(u)->bus_commit_properties)
UNIT_VTABLE(u)->bus_commit_properties(u);