chiark / gitweb /
core: fix deserialization of StartTransientUnit() parameters
authorLennart Poettering <lennart@poettering.net>
Thu, 21 Nov 2013 19:49:04 +0000 (20:49 +0100)
committerLennart Poettering <lennart@poettering.net>
Thu, 21 Nov 2013 20:12:36 +0000 (21:12 +0100)
src/core/dbus-manager.c
src/core/dbus-service.c
src/core/dbus-unit.c

index bc0c3109e393f41a3d6cda7d4eb9753ea3221b15..b284c5e1972faa937736e84d7c09ae1d7ea42423 100644 (file)
@@ -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;
 
index c4bfa2c38f42f7434ee3f6a2da749fab7b412858..3fa2d3363871f41eaf21c9dba91518f41c43310b 100644 (file)
@@ -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;
index 5fca7653e0b2a795f47070a531468a359aaadeb3..975fc4628984f64d67f9464c48b0eabd53f10015 100644 (file)
@@ -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);