-static int set_log_level(DBusConnection *bus, char **args) {
- _cleanup_dbus_error_free_ DBusError error;
- _cleanup_dbus_message_unref_ DBusMessage *m = NULL, *reply = NULL;
- DBusMessageIter iter, sub;
- const char* property = "LogLevel";
- const char* interface = "org.freedesktop.systemd1.Manager";
- const char* value;
-
- assert(bus);
- assert(args);
-
- value = args[1];
- dbus_error_init(&error);
-
- m = dbus_message_new_method_call("org.freedesktop.systemd1",
- "/org/freedesktop/systemd1",
- "org.freedesktop.DBus.Properties",
- "Set");
- if (!m)
- return log_oom();
-
- dbus_message_iter_init_append(m, &iter);
-
- if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &interface) ||
- !dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &property) ||
- !dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT, "s", &sub))
- return log_oom();
-
- if (!dbus_message_iter_append_basic(&sub, DBUS_TYPE_STRING, &value)) {
- dbus_message_iter_abandon_container(&iter, &sub);
- return log_oom();
- }
-
- if (!dbus_message_iter_close_container(&iter, &sub))
- return log_oom();
-
- reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
- if (!reply) {
- log_error("Failed to issue method call: %s", bus_error_message(&error));
- return -EIO;
- }
-
- return 0;
-}
-