From 74aa0bc6779af38018a03fd2cf4419fe85917904 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 07:31:45 +0200 Subject: Adding upstream version 2.9.4. Signed-off-by: Daniel Baumann --- src/sss_iface/sbus_sss_client_sync.c | 303 +++++++++++++++++++++++++++++++++++ 1 file changed, 303 insertions(+) create mode 100644 src/sss_iface/sbus_sss_client_sync.c (limited to 'src/sss_iface/sbus_sss_client_sync.c') diff --git a/src/sss_iface/sbus_sss_client_sync.c b/src/sss_iface/sbus_sss_client_sync.c new file mode 100644 index 0000000..32d6ef8 --- /dev/null +++ b/src/sss_iface/sbus_sss_client_sync.c @@ -0,0 +1,303 @@ +/* + 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; +} -- cgit v1.2.3