/*
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;
}