/* Generated by sbus code generator Copyright (C) 2017 Red Hat This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include #include "sbus/sbus_sync.h" #include "sbus/sbus_sync_private.h" #include "sbus/sbus_message.h" #include "sbus/interface/sbus_iterator_readers.h" #include "sbus/interface_dbus/sbus_dbus_client_sync.h" #include "sss_iface/sbus_sss_arguments.h" #include "sss_iface/sbus_sss_client_properties.h" static errno_t sbus_method_in_ss_out_o (TALLOC_CTX *mem_ctx, struct sbus_sync_connection *conn, const char *bus, const char *path, const char *iface, const char *method, const char * arg0, const char * arg1, const char ** _arg0) { TALLOC_CTX *tmp_ctx; struct _sbus_sss_invoker_args_ss in; struct _sbus_sss_invoker_args_o *out; DBusMessage *reply; errno_t ret; tmp_ctx = talloc_new(NULL); if (tmp_ctx == NULL) { DEBUG(SSSDBG_FATAL_FAILURE, "Out of memory!\n"); return ENOMEM; } out = talloc_zero(tmp_ctx, struct _sbus_sss_invoker_args_o); if (out == NULL) { DEBUG(SSSDBG_CRIT_FAILURE, "Unable to allocate space for output parameters!\n"); ret = ENOMEM; goto done; } in.arg0 = arg0; in.arg1 = arg1; ret = sbus_sync_call_method(tmp_ctx, conn, NULL, (sbus_invoker_writer_fn)_sbus_sss_invoker_write_ss, bus, path, iface, method, &in, &reply); if (ret != EOK) { goto done; } ret = sbus_read_output(out, reply, (sbus_invoker_reader_fn)_sbus_sss_invoker_read_o, out); if (ret != EOK) { goto done; } *_arg0 = talloc_steal(mem_ctx, out->arg0); ret = EOK; done: talloc_free(tmp_ctx); return ret; } errno_t sbus_call_systemd_RestartUnit (TALLOC_CTX *mem_ctx, struct sbus_sync_connection *conn, const char *busname, const char *object_path, const char * arg_name, const char * arg_mode, const char ** _arg_job) { return sbus_method_in_ss_out_o(mem_ctx, conn, busname, object_path, "org.freedesktop.systemd1.Manager", "RestartUnit", arg_name, arg_mode, _arg_job); } errno_t sbus_call_systemd_StartUnit (TALLOC_CTX *mem_ctx, struct sbus_sync_connection *conn, const char *busname, const char *object_path, const char * arg_name, const char * arg_mode, const char ** _arg_job) { return sbus_method_in_ss_out_o(mem_ctx, conn, busname, object_path, "org.freedesktop.systemd1.Manager", "StartUnit", arg_name, arg_mode, _arg_job); } errno_t sbus_call_systemd_StopUnit (TALLOC_CTX *mem_ctx, struct sbus_sync_connection *conn, const char *busname, const char *object_path, const char * arg_name, const char * arg_mode, const char ** _arg_job) { return sbus_method_in_ss_out_o(mem_ctx, conn, busname, object_path, "org.freedesktop.systemd1.Manager", "StopUnit", arg_name, arg_mode, _arg_job); } static errno_t sbus_get_u (struct sbus_sync_connection *conn, const char *bus, const char *path, const char *iface, const char *property, uint32_t* _value) { TALLOC_CTX *tmp_ctx; struct _sbus_sss_invoker_args_u *out; sbus_value_reader_fn reader; sbus_value_reader_talloc_fn reader_talloc; DBusMessage *reply; errno_t ret; tmp_ctx = talloc_new(NULL); if (tmp_ctx == NULL) { DEBUG(SSSDBG_FATAL_FAILURE, "Out of memory!\n"); return ENOMEM; } out = talloc_zero(tmp_ctx, struct _sbus_sss_invoker_args_u); if (out == NULL) { DEBUG(SSSDBG_CRIT_FAILURE, "Unable to allocate space for output parameters!\n"); ret = ENOMEM; goto done; } ret = sbus_call_DBusProperties_Get(tmp_ctx, conn, bus, path, iface, property, &reply); if (ret != EOK) { goto done; } reader = (sbus_value_reader_fn)sbus_iterator_read_u; reader_talloc = NULL; ret = sbus_parse_get_message(out, reader, reader_talloc, reply, &out->arg0); if (ret != EOK) { goto done; } *_value = out->arg0; ret = EOK; done: talloc_free(tmp_ctx); return ret; } static errno_t sbus_set_u (struct sbus_sync_connection *conn, const char *bus, const char *path, const char *iface, const char *property, uint32_t value) { TALLOC_CTX *tmp_ctx; struct _sbus_sss_invoker_args_u in; DBusMessage *raw_message; errno_t ret; tmp_ctx = talloc_new(NULL); if (tmp_ctx == NULL) { DEBUG(SSSDBG_FATAL_FAILURE, "Out of memory!\n"); return ENOMEM; } in.arg0 = value; raw_message = sbus_create_set_call(tmp_ctx, (sbus_invoker_writer_fn)_sbus_sss_invoker_write_u, bus, path, iface, property, "u", &in); if (raw_message == NULL) { ret = ENOMEM; goto done; } ret = sbus_call_DBusProperties_Set(conn, raw_message); if (ret != EOK) { goto done; } ret = EOK; done: talloc_free(tmp_ctx); return ret; } errno_t sbus_get_service_debug_level (struct sbus_sync_connection *conn, const char *busname, const char *object_path, uint32_t* _value) { return sbus_get_u(conn, busname, object_path, "sssd.service", "debug_level", _value); } errno_t sbus_set_service_debug_level (struct sbus_sync_connection *conn, const char *busname, const char *object_path, uint32_t value) { return sbus_set_u(conn, busname, object_path, "sssd.service", "debug_level", value); } errno_t sbus_getall_service (TALLOC_CTX *mem_ctx, struct sbus_sync_connection *conn, const char *busname, const char *object_path, struct sbus_all_service **_properties) { TALLOC_CTX *tmp_ctx; struct sbus_all_service *properties; DBusMessage *reply; errno_t ret; tmp_ctx = talloc_new(NULL); if (tmp_ctx == NULL) { DEBUG(SSSDBG_FATAL_FAILURE, "Out of memory!\n"); return ENOMEM; } properties = talloc_zero(tmp_ctx, struct sbus_all_service); if (properties == NULL) { ret = ENOMEM; goto done; } struct sbus_parse_getall_table table[] = { {"debug_level", (sbus_value_reader_fn)sbus_iterator_read_u, NULL, &properties->debug_level.value, &properties->debug_level.is_set}, {NULL, NULL, NULL, NULL, NULL} }; ret = sbus_call_DBusProperties_GetAll(tmp_ctx, conn, busname, object_path, "sssd.service", &reply); if (ret != EOK) { goto done; } ret = sbus_parse_getall_message(properties, table, reply); if (ret != EOK) { goto done; } *_properties = talloc_steal(mem_ctx, properties); ret = EOK; done: talloc_free(tmp_ctx); return ret; }