summaryrefslogtreecommitdiffstats
path: root/src/sss_iface
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 05:31:45 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 05:31:45 +0000
commit74aa0bc6779af38018a03fd2cf4419fe85917904 (patch)
tree9cb0681aac9a94a49c153d5823e7a55d1513d91f /src/sss_iface
parentInitial commit. (diff)
downloadsssd-74aa0bc6779af38018a03fd2cf4419fe85917904.tar.xz
sssd-74aa0bc6779af38018a03fd2cf4419fe85917904.zip
Adding upstream version 2.9.4.upstream/2.9.4
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/sss_iface')
-rw-r--r--src/sss_iface/external_iface.xml32
-rw-r--r--src/sss_iface/sbus_sss_arguments.c810
-rw-r--r--src/sss_iface/sbus_sss_arguments.h327
-rw-r--r--src/sss_iface/sbus_sss_client_async.c2545
-rw-r--r--src/sss_iface/sbus_sss_client_async.h512
-rw-r--r--src/sss_iface/sbus_sss_client_properties.h35
-rw-r--r--src/sss_iface/sbus_sss_client_sync.c303
-rw-r--r--src/sss_iface/sbus_sss_client_sync.h83
-rw-r--r--src/sss_iface/sbus_sss_interface.h1011
-rw-r--r--src/sss_iface/sbus_sss_invokers.c3577
-rw-r--r--src/sss_iface/sbus_sss_invokers.h63
-rw-r--r--src/sss_iface/sbus_sss_keygens.c175
-rw-r--r--src/sss_iface/sbus_sss_keygens.h81
-rw-r--r--src/sss_iface/sbus_sss_server.h27
-rw-r--r--src/sss_iface/sbus_sss_symbols.c495
-rw-r--r--src/sss_iface/sbus_sss_symbols.h142
-rw-r--r--src/sss_iface/sss_iface.c193
-rw-r--r--src/sss_iface/sss_iface.h83
-rw-r--r--src/sss_iface/sss_iface.xml202
-rw-r--r--src/sss_iface/sss_iface_async.h61
-rw-r--r--src/sss_iface/sss_iface_sync.h27
-rw-r--r--src/sss_iface/sss_iface_types.c442
-rw-r--r--src/sss_iface/sss_iface_types.h43
23 files changed, 11269 insertions, 0 deletions
diff --git a/src/sss_iface/external_iface.xml b/src/sss_iface/external_iface.xml
new file mode 100644
index 0000000..387f198
--- /dev/null
+++ b/src/sss_iface/external_iface.xml
@@ -0,0 +1,32 @@
+<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
+ "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+<node>
+ <interface name="org.freedesktop.systemd1.Manager">
+ <annotation name="codegen.Name" value="systemd" />
+ <annotation name="codegen.AsyncCaller" value="false" />
+ <method name="StartUnit">
+ <arg type="s" name="name" direction="in" />
+ <arg type="s" name="mode" direction="in" />
+ <arg type="o" name="job" direction="out" />
+ </method>
+ <method name="StopUnit">
+ <arg type="s" name="name" direction="in" />
+ <arg type="s" name="mode" direction="in" />
+ <arg type="o" name="job" direction="out" />
+ </method>
+ <method name="RestartUnit">
+ <arg type="s" name="name" direction="in" />
+ <arg type="s" name="mode" direction="in" />
+ <arg type="o" name="job" direction="out" />
+ </method>
+ </interface>
+ <interface name="org.freedesktop.FleetCommanderClient">
+ <annotation name="codegen.Name" value="fleet" />
+ <annotation name="codegen.SyncCaller" value="false" />
+ <method name="ProcessSSSDFiles">
+ <arg type="u" name="uid" direction="in" />
+ <arg type="s" name="user_dir" direction="in" />
+ <arg type="q" name="prio" direction="in" />
+ </method>
+ </interface>
+</node>
diff --git a/src/sss_iface/sbus_sss_arguments.c b/src/sss_iface/sbus_sss_arguments.c
new file mode 100644
index 0000000..14d705b
--- /dev/null
+++ b/src/sss_iface/sbus_sss_arguments.c
@@ -0,0 +1,810 @@
+/*
+ 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 <http://www.gnu.org/licenses/>.
+*/
+
+#include <errno.h>
+#include <stdint.h>
+#include <talloc.h>
+#include <stdbool.h>
+#include <dbus/dbus.h>
+
+#include "sbus/interface/sbus_iterator_readers.h"
+#include "sbus/interface/sbus_iterator_writers.h"
+#include "sss_iface/sbus_sss_arguments.h"
+
+errno_t _sbus_sss_invoker_read_as
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_as *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_read_as(mem_ctx, iter, &args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_write_as
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_as *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_write_as(iter, args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_read_b
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_b *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_read_b(iter, &args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_write_b
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_b *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_write_b(iter, args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_read_o
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_o *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_read_o(mem_ctx, iter, &args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_write_o
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_o *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_write_o(iter, args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_read_pam_data
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_pam_data *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_read_pam_data(mem_ctx, iter, &args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_write_pam_data
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_pam_data *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_write_pam_data(iter, args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_read_pam_response
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_pam_response *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_read_pam_response(mem_ctx, iter, &args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_write_pam_response
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_pam_response *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_write_pam_response(iter, args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_read_q
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_q *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_read_q(iter, &args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_write_q
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_q *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_write_q(iter, args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_read_qus
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_qus *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_read_q(iter, &args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_read_u(iter, &args->arg1);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_read_s(mem_ctx, iter, &args->arg2);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_write_qus
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_qus *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_write_q(iter, args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_write_u(iter, args->arg1);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_write_s(iter, args->arg2);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_read_s
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_s *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_read_s(mem_ctx, iter, &args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_write_s
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_s *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_write_s(iter, args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_read_sqq
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_sqq *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_read_s(mem_ctx, iter, &args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_read_q(iter, &args->arg1);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_read_q(iter, &args->arg2);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_write_sqq
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_sqq *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_write_s(iter, args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_write_q(iter, args->arg1);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_write_q(iter, args->arg2);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_read_ss
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_ss *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_read_s(mem_ctx, iter, &args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_read_s(mem_ctx, iter, &args->arg1);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_write_ss
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_ss *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_write_s(iter, args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_write_s(iter, args->arg1);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_read_ssau
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_ssau *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_read_s(mem_ctx, iter, &args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_read_s(mem_ctx, iter, &args->arg1);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_read_au(mem_ctx, iter, &args->arg2);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_write_ssau
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_ssau *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_write_s(iter, args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_write_s(iter, args->arg1);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_write_au(iter, args->arg2);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_read_u
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_u *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_read_u(iter, &args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_write_u
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_u *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_write_u(iter, args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_read_usq
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_usq *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_read_u(iter, &args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_read_s(mem_ctx, iter, &args->arg1);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_read_q(iter, &args->arg2);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_write_usq
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_usq *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_write_u(iter, args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_write_s(iter, args->arg1);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_write_q(iter, args->arg2);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_read_ussu
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_ussu *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_read_u(iter, &args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_read_s(mem_ctx, iter, &args->arg1);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_read_s(mem_ctx, iter, &args->arg2);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_read_u(iter, &args->arg3);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_write_ussu
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_ussu *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_write_u(iter, args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_write_s(iter, args->arg1);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_write_s(iter, args->arg2);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_write_u(iter, args->arg3);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_read_usu
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_usu *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_read_u(iter, &args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_read_s(mem_ctx, iter, &args->arg1);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_read_u(iter, &args->arg2);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_write_usu
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_usu *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_write_u(iter, args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_write_s(iter, args->arg1);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_write_u(iter, args->arg2);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_read_uusssu
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_uusssu *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_read_u(iter, &args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_read_u(iter, &args->arg1);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_read_s(mem_ctx, iter, &args->arg2);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_read_s(mem_ctx, iter, &args->arg3);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_read_s(mem_ctx, iter, &args->arg4);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_read_u(iter, &args->arg5);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_write_uusssu
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_uusssu *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_write_u(iter, args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_write_u(iter, args->arg1);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_write_s(iter, args->arg2);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_write_s(iter, args->arg3);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_write_s(iter, args->arg4);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_write_u(iter, args->arg5);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_read_uusu
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_uusu *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_read_u(iter, &args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_read_u(iter, &args->arg1);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_read_s(mem_ctx, iter, &args->arg2);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_read_u(iter, &args->arg3);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_write_uusu
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_uusu *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_write_u(iter, args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_write_u(iter, args->arg1);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_write_s(iter, args->arg2);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_write_u(iter, args->arg3);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_read_uuusu
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_uuusu *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_read_u(iter, &args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_read_u(iter, &args->arg1);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_read_u(iter, &args->arg2);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_read_s(mem_ctx, iter, &args->arg3);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_read_u(iter, &args->arg4);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
+
+errno_t _sbus_sss_invoker_write_uuusu
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_uuusu *args)
+{
+ errno_t ret;
+
+ ret = sbus_iterator_write_u(iter, args->arg0);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_write_u(iter, args->arg1);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_write_u(iter, args->arg2);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_write_s(iter, args->arg3);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ ret = sbus_iterator_write_u(iter, args->arg4);
+ if (ret != EOK) {
+ return ret;
+ }
+
+ return EOK;
+}
diff --git a/src/sss_iface/sbus_sss_arguments.h b/src/sss_iface/sbus_sss_arguments.h
new file mode 100644
index 0000000..41067aa
--- /dev/null
+++ b/src/sss_iface/sbus_sss_arguments.h
@@ -0,0 +1,327 @@
+/*
+ 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 <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _SBUS_SSS_ARGUMENTS_H_
+#define _SBUS_SSS_ARGUMENTS_H_
+
+#include <errno.h>
+#include <stdint.h>
+#include <talloc.h>
+#include <stdbool.h>
+#include <dbus/dbus.h>
+
+#include "sss_iface/sss_iface_types.h"
+
+struct _sbus_sss_invoker_args_as {
+ const char ** arg0;
+};
+
+errno_t
+_sbus_sss_invoker_read_as
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_as *args);
+
+errno_t
+_sbus_sss_invoker_write_as
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_as *args);
+
+struct _sbus_sss_invoker_args_b {
+ bool arg0;
+};
+
+errno_t
+_sbus_sss_invoker_read_b
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_b *args);
+
+errno_t
+_sbus_sss_invoker_write_b
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_b *args);
+
+struct _sbus_sss_invoker_args_o {
+ const char * arg0;
+};
+
+errno_t
+_sbus_sss_invoker_read_o
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_o *args);
+
+errno_t
+_sbus_sss_invoker_write_o
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_o *args);
+
+struct _sbus_sss_invoker_args_pam_data {
+ struct pam_data * arg0;
+};
+
+errno_t
+_sbus_sss_invoker_read_pam_data
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_pam_data *args);
+
+errno_t
+_sbus_sss_invoker_write_pam_data
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_pam_data *args);
+
+struct _sbus_sss_invoker_args_pam_response {
+ struct pam_data * arg0;
+};
+
+errno_t
+_sbus_sss_invoker_read_pam_response
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_pam_response *args);
+
+errno_t
+_sbus_sss_invoker_write_pam_response
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_pam_response *args);
+
+struct _sbus_sss_invoker_args_q {
+ uint16_t arg0;
+};
+
+errno_t
+_sbus_sss_invoker_read_q
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_q *args);
+
+errno_t
+_sbus_sss_invoker_write_q
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_q *args);
+
+struct _sbus_sss_invoker_args_qus {
+ uint16_t arg0;
+ uint32_t arg1;
+ const char * arg2;
+};
+
+errno_t
+_sbus_sss_invoker_read_qus
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_qus *args);
+
+errno_t
+_sbus_sss_invoker_write_qus
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_qus *args);
+
+struct _sbus_sss_invoker_args_s {
+ const char * arg0;
+};
+
+errno_t
+_sbus_sss_invoker_read_s
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_s *args);
+
+errno_t
+_sbus_sss_invoker_write_s
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_s *args);
+
+struct _sbus_sss_invoker_args_sqq {
+ const char * arg0;
+ uint16_t arg1;
+ uint16_t arg2;
+};
+
+errno_t
+_sbus_sss_invoker_read_sqq
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_sqq *args);
+
+errno_t
+_sbus_sss_invoker_write_sqq
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_sqq *args);
+
+struct _sbus_sss_invoker_args_ss {
+ const char * arg0;
+ const char * arg1;
+};
+
+errno_t
+_sbus_sss_invoker_read_ss
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_ss *args);
+
+errno_t
+_sbus_sss_invoker_write_ss
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_ss *args);
+
+struct _sbus_sss_invoker_args_ssau {
+ const char * arg0;
+ const char * arg1;
+ uint32_t * arg2;
+};
+
+errno_t
+_sbus_sss_invoker_read_ssau
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_ssau *args);
+
+errno_t
+_sbus_sss_invoker_write_ssau
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_ssau *args);
+
+struct _sbus_sss_invoker_args_u {
+ uint32_t arg0;
+};
+
+errno_t
+_sbus_sss_invoker_read_u
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_u *args);
+
+errno_t
+_sbus_sss_invoker_write_u
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_u *args);
+
+struct _sbus_sss_invoker_args_usq {
+ uint32_t arg0;
+ const char * arg1;
+ uint16_t arg2;
+};
+
+errno_t
+_sbus_sss_invoker_read_usq
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_usq *args);
+
+errno_t
+_sbus_sss_invoker_write_usq
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_usq *args);
+
+struct _sbus_sss_invoker_args_ussu {
+ uint32_t arg0;
+ const char * arg1;
+ const char * arg2;
+ uint32_t arg3;
+};
+
+errno_t
+_sbus_sss_invoker_read_ussu
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_ussu *args);
+
+errno_t
+_sbus_sss_invoker_write_ussu
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_ussu *args);
+
+struct _sbus_sss_invoker_args_usu {
+ uint32_t arg0;
+ const char * arg1;
+ uint32_t arg2;
+};
+
+errno_t
+_sbus_sss_invoker_read_usu
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_usu *args);
+
+errno_t
+_sbus_sss_invoker_write_usu
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_usu *args);
+
+struct _sbus_sss_invoker_args_uusssu {
+ uint32_t arg0;
+ uint32_t arg1;
+ const char * arg2;
+ const char * arg3;
+ const char * arg4;
+ uint32_t arg5;
+};
+
+errno_t
+_sbus_sss_invoker_read_uusssu
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_uusssu *args);
+
+errno_t
+_sbus_sss_invoker_write_uusssu
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_uusssu *args);
+
+struct _sbus_sss_invoker_args_uusu {
+ uint32_t arg0;
+ uint32_t arg1;
+ const char * arg2;
+ uint32_t arg3;
+};
+
+errno_t
+_sbus_sss_invoker_read_uusu
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_uusu *args);
+
+errno_t
+_sbus_sss_invoker_write_uusu
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_uusu *args);
+
+struct _sbus_sss_invoker_args_uuusu {
+ uint32_t arg0;
+ uint32_t arg1;
+ uint32_t arg2;
+ const char * arg3;
+ uint32_t arg4;
+};
+
+errno_t
+_sbus_sss_invoker_read_uuusu
+ (TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_uuusu *args);
+
+errno_t
+_sbus_sss_invoker_write_uuusu
+ (DBusMessageIter *iter,
+ struct _sbus_sss_invoker_args_uuusu *args);
+
+#endif /* _SBUS_SSS_ARGUMENTS_H_ */
diff --git a/src/sss_iface/sbus_sss_client_async.c b/src/sss_iface/sbus_sss_client_async.c
new file mode 100644
index 0000000..5ca9252
--- /dev/null
+++ b/src/sss_iface/sbus_sss_client_async.c
@@ -0,0 +1,2545 @@
+/*
+ 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 <http://www.gnu.org/licenses/>.
+*/
+
+#include <errno.h>
+#include <talloc.h>
+#include <tevent.h>
+#include <dbus/dbus.h>
+
+#include "sbus/sbus_private.h"
+#include "sbus/interface/sbus_iterator_readers.h"
+#include "sbus/interface_dbus/sbus_dbus_client_async.h"
+#include "sss_iface/sbus_sss_arguments.h"
+#include "sss_iface/sbus_sss_keygens.h"
+#include "sss_iface/sbus_sss_client_properties.h"
+
+struct sbus_method_in__out__state {
+ int dummy;
+};
+
+static void sbus_method_in__out__done(struct tevent_req *subreq);
+
+static struct tevent_req *
+sbus_method_in__out__send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ sbus_invoker_keygen keygen,
+ const char *bus,
+ const char *path,
+ const char *iface,
+ const char *method)
+{
+ struct sbus_method_in__out__state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct sbus_method_in__out__state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+
+ subreq = sbus_call_method_send(state, conn, NULL, keygen, NULL,
+ bus, path, iface, method, NULL);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, sbus_method_in__out__done, req);
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, conn->ev);
+ }
+
+ return req;
+}
+
+static void sbus_method_in__out__done(struct tevent_req *subreq)
+{
+ struct sbus_method_in__out__state *state;
+ struct tevent_req *req;
+ DBusMessage *reply;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct sbus_method_in__out__state);
+
+ ret = sbus_call_method_recv(state, subreq, &reply);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+static errno_t
+sbus_method_in__out__recv
+ (struct tevent_req *req)
+{
+ TEVENT_REQ_RETURN_ON_ERROR(req);
+
+ return EOK;
+}
+
+struct sbus_method_in_pam_data_out_pam_response_state {
+ struct _sbus_sss_invoker_args_pam_data in;
+ struct _sbus_sss_invoker_args_pam_response *out;
+};
+
+static void sbus_method_in_pam_data_out_pam_response_done(struct tevent_req *subreq);
+
+static struct tevent_req *
+sbus_method_in_pam_data_out_pam_response_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ sbus_invoker_keygen keygen,
+ const char *bus,
+ const char *path,
+ const char *iface,
+ const char *method,
+ struct pam_data * arg0)
+{
+ struct sbus_method_in_pam_data_out_pam_response_state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct sbus_method_in_pam_data_out_pam_response_state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->out = talloc_zero(state, struct _sbus_sss_invoker_args_pam_response);
+ if (state->out == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Unable to allocate space for output parameters!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ state->in.arg0 = arg0;
+
+ subreq = sbus_call_method_send(state, conn, NULL, keygen,
+ (sbus_invoker_writer_fn)_sbus_sss_invoker_write_pam_data,
+ bus, path, iface, method, &state->in);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, sbus_method_in_pam_data_out_pam_response_done, req);
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, conn->ev);
+ }
+
+ return req;
+}
+
+static void sbus_method_in_pam_data_out_pam_response_done(struct tevent_req *subreq)
+{
+ struct sbus_method_in_pam_data_out_pam_response_state *state;
+ struct tevent_req *req;
+ DBusMessage *reply;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct sbus_method_in_pam_data_out_pam_response_state);
+
+ ret = sbus_call_method_recv(state, subreq, &reply);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ ret = sbus_read_output(state->out, reply, (sbus_invoker_reader_fn)_sbus_sss_invoker_read_pam_response, state->out);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+static errno_t
+sbus_method_in_pam_data_out_pam_response_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ struct pam_data ** _arg0)
+{
+ struct sbus_method_in_pam_data_out_pam_response_state *state;
+ state = tevent_req_data(req, struct sbus_method_in_pam_data_out_pam_response_state);
+
+ TEVENT_REQ_RETURN_ON_ERROR(req);
+
+ *_arg0 = talloc_steal(mem_ctx, state->out->arg0);
+
+ return EOK;
+}
+
+struct sbus_method_in_raw_out_qus_state {
+ struct _sbus_sss_invoker_args_qus *out;
+};
+
+static void sbus_method_in_raw_out_qus_done(struct tevent_req *subreq);
+
+static struct tevent_req *
+sbus_method_in_raw_out_qus_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ DBusMessage *raw_message)
+{
+ struct sbus_method_in_raw_out_qus_state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct sbus_method_in_raw_out_qus_state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->out = talloc_zero(state, struct _sbus_sss_invoker_args_qus);
+ if (state->out == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Unable to allocate space for output parameters!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+
+ subreq = sbus_call_method_send(state, conn, raw_message, NULL, NULL, NULL,
+ dbus_message_get_path(raw_message),
+ dbus_message_get_interface(raw_message),
+ dbus_message_get_member(raw_message), NULL);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, sbus_method_in_raw_out_qus_done, req);
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, conn->ev);
+ }
+
+ return req;
+}
+
+static void sbus_method_in_raw_out_qus_done(struct tevent_req *subreq)
+{
+ struct sbus_method_in_raw_out_qus_state *state;
+ struct tevent_req *req;
+ DBusMessage *reply;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct sbus_method_in_raw_out_qus_state);
+
+ ret = sbus_call_method_recv(state, subreq, &reply);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ ret = sbus_read_output(state->out, reply, (sbus_invoker_reader_fn)_sbus_sss_invoker_read_qus, state->out);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+static errno_t
+sbus_method_in_raw_out_qus_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ uint16_t* _arg0,
+ uint32_t* _arg1,
+ const char ** _arg2)
+{
+ struct sbus_method_in_raw_out_qus_state *state;
+ state = tevent_req_data(req, struct sbus_method_in_raw_out_qus_state);
+
+ TEVENT_REQ_RETURN_ON_ERROR(req);
+
+ *_arg0 = state->out->arg0;
+ *_arg1 = state->out->arg1;
+ *_arg2 = talloc_steal(mem_ctx, state->out->arg2);
+
+ return EOK;
+}
+
+struct sbus_method_in_s_out__state {
+ struct _sbus_sss_invoker_args_s in;
+};
+
+static void sbus_method_in_s_out__done(struct tevent_req *subreq);
+
+static struct tevent_req *
+sbus_method_in_s_out__send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ sbus_invoker_keygen keygen,
+ const char *bus,
+ const char *path,
+ const char *iface,
+ const char *method,
+ const char * arg0)
+{
+ struct sbus_method_in_s_out__state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct sbus_method_in_s_out__state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->in.arg0 = arg0;
+
+ subreq = sbus_call_method_send(state, conn, NULL, keygen,
+ (sbus_invoker_writer_fn)_sbus_sss_invoker_write_s,
+ bus, path, iface, method, &state->in);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, sbus_method_in_s_out__done, req);
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, conn->ev);
+ }
+
+ return req;
+}
+
+static void sbus_method_in_s_out__done(struct tevent_req *subreq)
+{
+ struct sbus_method_in_s_out__state *state;
+ struct tevent_req *req;
+ DBusMessage *reply;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct sbus_method_in_s_out__state);
+
+ ret = sbus_call_method_recv(state, subreq, &reply);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+static errno_t
+sbus_method_in_s_out__recv
+ (struct tevent_req *req)
+{
+ TEVENT_REQ_RETURN_ON_ERROR(req);
+
+ return EOK;
+}
+
+struct sbus_method_in_s_out_as_state {
+ struct _sbus_sss_invoker_args_s in;
+ struct _sbus_sss_invoker_args_as *out;
+};
+
+static void sbus_method_in_s_out_as_done(struct tevent_req *subreq);
+
+static struct tevent_req *
+sbus_method_in_s_out_as_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ sbus_invoker_keygen keygen,
+ const char *bus,
+ const char *path,
+ const char *iface,
+ const char *method,
+ const char * arg0)
+{
+ struct sbus_method_in_s_out_as_state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct sbus_method_in_s_out_as_state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->out = talloc_zero(state, struct _sbus_sss_invoker_args_as);
+ if (state->out == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Unable to allocate space for output parameters!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ state->in.arg0 = arg0;
+
+ subreq = sbus_call_method_send(state, conn, NULL, keygen,
+ (sbus_invoker_writer_fn)_sbus_sss_invoker_write_s,
+ bus, path, iface, method, &state->in);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, sbus_method_in_s_out_as_done, req);
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, conn->ev);
+ }
+
+ return req;
+}
+
+static void sbus_method_in_s_out_as_done(struct tevent_req *subreq)
+{
+ struct sbus_method_in_s_out_as_state *state;
+ struct tevent_req *req;
+ DBusMessage *reply;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct sbus_method_in_s_out_as_state);
+
+ ret = sbus_call_method_recv(state, subreq, &reply);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ ret = sbus_read_output(state->out, reply, (sbus_invoker_reader_fn)_sbus_sss_invoker_read_as, state->out);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+static errno_t
+sbus_method_in_s_out_as_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ const char *** _arg0)
+{
+ struct sbus_method_in_s_out_as_state *state;
+ state = tevent_req_data(req, struct sbus_method_in_s_out_as_state);
+
+ TEVENT_REQ_RETURN_ON_ERROR(req);
+
+ *_arg0 = talloc_steal(mem_ctx, state->out->arg0);
+
+ return EOK;
+}
+
+struct sbus_method_in_s_out_b_state {
+ struct _sbus_sss_invoker_args_s in;
+ struct _sbus_sss_invoker_args_b *out;
+};
+
+static void sbus_method_in_s_out_b_done(struct tevent_req *subreq);
+
+static struct tevent_req *
+sbus_method_in_s_out_b_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ sbus_invoker_keygen keygen,
+ const char *bus,
+ const char *path,
+ const char *iface,
+ const char *method,
+ const char * arg0)
+{
+ struct sbus_method_in_s_out_b_state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct sbus_method_in_s_out_b_state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->out = talloc_zero(state, struct _sbus_sss_invoker_args_b);
+ if (state->out == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Unable to allocate space for output parameters!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ state->in.arg0 = arg0;
+
+ subreq = sbus_call_method_send(state, conn, NULL, keygen,
+ (sbus_invoker_writer_fn)_sbus_sss_invoker_write_s,
+ bus, path, iface, method, &state->in);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, sbus_method_in_s_out_b_done, req);
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, conn->ev);
+ }
+
+ return req;
+}
+
+static void sbus_method_in_s_out_b_done(struct tevent_req *subreq)
+{
+ struct sbus_method_in_s_out_b_state *state;
+ struct tevent_req *req;
+ DBusMessage *reply;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct sbus_method_in_s_out_b_state);
+
+ ret = sbus_call_method_recv(state, subreq, &reply);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ ret = sbus_read_output(state->out, reply, (sbus_invoker_reader_fn)_sbus_sss_invoker_read_b, state->out);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+static errno_t
+sbus_method_in_s_out_b_recv
+ (struct tevent_req *req,
+ bool* _arg0)
+{
+ struct sbus_method_in_s_out_b_state *state;
+ state = tevent_req_data(req, struct sbus_method_in_s_out_b_state);
+
+ TEVENT_REQ_RETURN_ON_ERROR(req);
+
+ *_arg0 = state->out->arg0;
+
+ return EOK;
+}
+
+struct sbus_method_in_s_out_qus_state {
+ struct _sbus_sss_invoker_args_s in;
+ struct _sbus_sss_invoker_args_qus *out;
+};
+
+static void sbus_method_in_s_out_qus_done(struct tevent_req *subreq);
+
+static struct tevent_req *
+sbus_method_in_s_out_qus_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ sbus_invoker_keygen keygen,
+ const char *bus,
+ const char *path,
+ const char *iface,
+ const char *method,
+ const char * arg0)
+{
+ struct sbus_method_in_s_out_qus_state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct sbus_method_in_s_out_qus_state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->out = talloc_zero(state, struct _sbus_sss_invoker_args_qus);
+ if (state->out == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Unable to allocate space for output parameters!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ state->in.arg0 = arg0;
+
+ subreq = sbus_call_method_send(state, conn, NULL, keygen,
+ (sbus_invoker_writer_fn)_sbus_sss_invoker_write_s,
+ bus, path, iface, method, &state->in);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, sbus_method_in_s_out_qus_done, req);
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, conn->ev);
+ }
+
+ return req;
+}
+
+static void sbus_method_in_s_out_qus_done(struct tevent_req *subreq)
+{
+ struct sbus_method_in_s_out_qus_state *state;
+ struct tevent_req *req;
+ DBusMessage *reply;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct sbus_method_in_s_out_qus_state);
+
+ ret = sbus_call_method_recv(state, subreq, &reply);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ ret = sbus_read_output(state->out, reply, (sbus_invoker_reader_fn)_sbus_sss_invoker_read_qus, state->out);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+static errno_t
+sbus_method_in_s_out_qus_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ uint16_t* _arg0,
+ uint32_t* _arg1,
+ const char ** _arg2)
+{
+ struct sbus_method_in_s_out_qus_state *state;
+ state = tevent_req_data(req, struct sbus_method_in_s_out_qus_state);
+
+ TEVENT_REQ_RETURN_ON_ERROR(req);
+
+ *_arg0 = state->out->arg0;
+ *_arg1 = state->out->arg1;
+ *_arg2 = talloc_steal(mem_ctx, state->out->arg2);
+
+ return EOK;
+}
+
+struct sbus_method_in_s_out_s_state {
+ struct _sbus_sss_invoker_args_s in;
+ struct _sbus_sss_invoker_args_s *out;
+};
+
+static void sbus_method_in_s_out_s_done(struct tevent_req *subreq);
+
+static struct tevent_req *
+sbus_method_in_s_out_s_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ sbus_invoker_keygen keygen,
+ const char *bus,
+ const char *path,
+ const char *iface,
+ const char *method,
+ const char * arg0)
+{
+ struct sbus_method_in_s_out_s_state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct sbus_method_in_s_out_s_state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->out = talloc_zero(state, struct _sbus_sss_invoker_args_s);
+ if (state->out == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Unable to allocate space for output parameters!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ state->in.arg0 = arg0;
+
+ subreq = sbus_call_method_send(state, conn, NULL, keygen,
+ (sbus_invoker_writer_fn)_sbus_sss_invoker_write_s,
+ bus, path, iface, method, &state->in);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, sbus_method_in_s_out_s_done, req);
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, conn->ev);
+ }
+
+ return req;
+}
+
+static void sbus_method_in_s_out_s_done(struct tevent_req *subreq)
+{
+ struct sbus_method_in_s_out_s_state *state;
+ struct tevent_req *req;
+ DBusMessage *reply;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct sbus_method_in_s_out_s_state);
+
+ ret = sbus_call_method_recv(state, subreq, &reply);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ ret = sbus_read_output(state->out, reply, (sbus_invoker_reader_fn)_sbus_sss_invoker_read_s, state->out);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+static errno_t
+sbus_method_in_s_out_s_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ const char ** _arg0)
+{
+ struct sbus_method_in_s_out_s_state *state;
+ state = tevent_req_data(req, struct sbus_method_in_s_out_s_state);
+
+ TEVENT_REQ_RETURN_ON_ERROR(req);
+
+ *_arg0 = talloc_steal(mem_ctx, state->out->arg0);
+
+ return EOK;
+}
+
+struct sbus_method_in_sqq_out_q_state {
+ struct _sbus_sss_invoker_args_sqq in;
+ struct _sbus_sss_invoker_args_q *out;
+};
+
+static void sbus_method_in_sqq_out_q_done(struct tevent_req *subreq);
+
+static struct tevent_req *
+sbus_method_in_sqq_out_q_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ sbus_invoker_keygen keygen,
+ const char *bus,
+ const char *path,
+ const char *iface,
+ const char *method,
+ const char * arg0,
+ uint16_t arg1,
+ uint16_t arg2)
+{
+ struct sbus_method_in_sqq_out_q_state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct sbus_method_in_sqq_out_q_state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->out = talloc_zero(state, struct _sbus_sss_invoker_args_q);
+ if (state->out == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Unable to allocate space for output parameters!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ state->in.arg0 = arg0;
+ state->in.arg1 = arg1;
+ state->in.arg2 = arg2;
+
+ subreq = sbus_call_method_send(state, conn, NULL, keygen,
+ (sbus_invoker_writer_fn)_sbus_sss_invoker_write_sqq,
+ bus, path, iface, method, &state->in);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, sbus_method_in_sqq_out_q_done, req);
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, conn->ev);
+ }
+
+ return req;
+}
+
+static void sbus_method_in_sqq_out_q_done(struct tevent_req *subreq)
+{
+ struct sbus_method_in_sqq_out_q_state *state;
+ struct tevent_req *req;
+ DBusMessage *reply;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct sbus_method_in_sqq_out_q_state);
+
+ ret = sbus_call_method_recv(state, subreq, &reply);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ ret = sbus_read_output(state->out, reply, (sbus_invoker_reader_fn)_sbus_sss_invoker_read_q, state->out);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+static errno_t
+sbus_method_in_sqq_out_q_recv
+ (struct tevent_req *req,
+ uint16_t* _arg0)
+{
+ struct sbus_method_in_sqq_out_q_state *state;
+ state = tevent_req_data(req, struct sbus_method_in_sqq_out_q_state);
+
+ TEVENT_REQ_RETURN_ON_ERROR(req);
+
+ *_arg0 = state->out->arg0;
+
+ return EOK;
+}
+
+struct sbus_method_in_ssau_out__state {
+ struct _sbus_sss_invoker_args_ssau in;
+};
+
+static void sbus_method_in_ssau_out__done(struct tevent_req *subreq);
+
+static struct tevent_req *
+sbus_method_in_ssau_out__send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ sbus_invoker_keygen keygen,
+ const char *bus,
+ const char *path,
+ const char *iface,
+ const char *method,
+ const char * arg0,
+ const char * arg1,
+ uint32_t * arg2)
+{
+ struct sbus_method_in_ssau_out__state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct sbus_method_in_ssau_out__state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->in.arg0 = arg0;
+ state->in.arg1 = arg1;
+ state->in.arg2 = arg2;
+
+ subreq = sbus_call_method_send(state, conn, NULL, keygen,
+ (sbus_invoker_writer_fn)_sbus_sss_invoker_write_ssau,
+ bus, path, iface, method, &state->in);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, sbus_method_in_ssau_out__done, req);
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, conn->ev);
+ }
+
+ return req;
+}
+
+static void sbus_method_in_ssau_out__done(struct tevent_req *subreq)
+{
+ struct sbus_method_in_ssau_out__state *state;
+ struct tevent_req *req;
+ DBusMessage *reply;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct sbus_method_in_ssau_out__state);
+
+ ret = sbus_call_method_recv(state, subreq, &reply);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+static errno_t
+sbus_method_in_ssau_out__recv
+ (struct tevent_req *req)
+{
+ TEVENT_REQ_RETURN_ON_ERROR(req);
+
+ return EOK;
+}
+
+struct sbus_method_in_u_out__state {
+ struct _sbus_sss_invoker_args_u in;
+};
+
+static void sbus_method_in_u_out__done(struct tevent_req *subreq);
+
+static struct tevent_req *
+sbus_method_in_u_out__send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ sbus_invoker_keygen keygen,
+ const char *bus,
+ const char *path,
+ const char *iface,
+ const char *method,
+ uint32_t arg0)
+{
+ struct sbus_method_in_u_out__state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct sbus_method_in_u_out__state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->in.arg0 = arg0;
+
+ subreq = sbus_call_method_send(state, conn, NULL, keygen,
+ (sbus_invoker_writer_fn)_sbus_sss_invoker_write_u,
+ bus, path, iface, method, &state->in);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, sbus_method_in_u_out__done, req);
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, conn->ev);
+ }
+
+ return req;
+}
+
+static void sbus_method_in_u_out__done(struct tevent_req *subreq)
+{
+ struct sbus_method_in_u_out__state *state;
+ struct tevent_req *req;
+ DBusMessage *reply;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct sbus_method_in_u_out__state);
+
+ ret = sbus_call_method_recv(state, subreq, &reply);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+static errno_t
+sbus_method_in_u_out__recv
+ (struct tevent_req *req)
+{
+ TEVENT_REQ_RETURN_ON_ERROR(req);
+
+ return EOK;
+}
+
+struct sbus_method_in_usq_out__state {
+ struct _sbus_sss_invoker_args_usq in;
+};
+
+static void sbus_method_in_usq_out__done(struct tevent_req *subreq);
+
+static struct tevent_req *
+sbus_method_in_usq_out__send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ sbus_invoker_keygen keygen,
+ const char *bus,
+ const char *path,
+ const char *iface,
+ const char *method,
+ uint32_t arg0,
+ const char * arg1,
+ uint16_t arg2)
+{
+ struct sbus_method_in_usq_out__state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct sbus_method_in_usq_out__state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->in.arg0 = arg0;
+ state->in.arg1 = arg1;
+ state->in.arg2 = arg2;
+
+ subreq = sbus_call_method_send(state, conn, NULL, keygen,
+ (sbus_invoker_writer_fn)_sbus_sss_invoker_write_usq,
+ bus, path, iface, method, &state->in);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, sbus_method_in_usq_out__done, req);
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, conn->ev);
+ }
+
+ return req;
+}
+
+static void sbus_method_in_usq_out__done(struct tevent_req *subreq)
+{
+ struct sbus_method_in_usq_out__state *state;
+ struct tevent_req *req;
+ DBusMessage *reply;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct sbus_method_in_usq_out__state);
+
+ ret = sbus_call_method_recv(state, subreq, &reply);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+static errno_t
+sbus_method_in_usq_out__recv
+ (struct tevent_req *req)
+{
+ TEVENT_REQ_RETURN_ON_ERROR(req);
+
+ return EOK;
+}
+
+struct sbus_method_in_ussu_out__state {
+ struct _sbus_sss_invoker_args_ussu in;
+};
+
+static void sbus_method_in_ussu_out__done(struct tevent_req *subreq);
+
+static struct tevent_req *
+sbus_method_in_ussu_out__send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ sbus_invoker_keygen keygen,
+ const char *bus,
+ const char *path,
+ const char *iface,
+ const char *method,
+ uint32_t arg0,
+ const char * arg1,
+ const char * arg2,
+ uint32_t arg3)
+{
+ struct sbus_method_in_ussu_out__state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct sbus_method_in_ussu_out__state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->in.arg0 = arg0;
+ state->in.arg1 = arg1;
+ state->in.arg2 = arg2;
+ state->in.arg3 = arg3;
+
+ subreq = sbus_call_method_send(state, conn, NULL, keygen,
+ (sbus_invoker_writer_fn)_sbus_sss_invoker_write_ussu,
+ bus, path, iface, method, &state->in);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, sbus_method_in_ussu_out__done, req);
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, conn->ev);
+ }
+
+ return req;
+}
+
+static void sbus_method_in_ussu_out__done(struct tevent_req *subreq)
+{
+ struct sbus_method_in_ussu_out__state *state;
+ struct tevent_req *req;
+ DBusMessage *reply;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct sbus_method_in_ussu_out__state);
+
+ ret = sbus_call_method_recv(state, subreq, &reply);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+static errno_t
+sbus_method_in_ussu_out__recv
+ (struct tevent_req *req)
+{
+ TEVENT_REQ_RETURN_ON_ERROR(req);
+
+ return EOK;
+}
+
+struct sbus_method_in_ussu_out_qus_state {
+ struct _sbus_sss_invoker_args_ussu in;
+ struct _sbus_sss_invoker_args_qus *out;
+};
+
+static void sbus_method_in_ussu_out_qus_done(struct tevent_req *subreq);
+
+static struct tevent_req *
+sbus_method_in_ussu_out_qus_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ sbus_invoker_keygen keygen,
+ const char *bus,
+ const char *path,
+ const char *iface,
+ const char *method,
+ uint32_t arg0,
+ const char * arg1,
+ const char * arg2,
+ uint32_t arg3)
+{
+ struct sbus_method_in_ussu_out_qus_state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct sbus_method_in_ussu_out_qus_state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->out = talloc_zero(state, struct _sbus_sss_invoker_args_qus);
+ if (state->out == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Unable to allocate space for output parameters!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ state->in.arg0 = arg0;
+ state->in.arg1 = arg1;
+ state->in.arg2 = arg2;
+ state->in.arg3 = arg3;
+
+ subreq = sbus_call_method_send(state, conn, NULL, keygen,
+ (sbus_invoker_writer_fn)_sbus_sss_invoker_write_ussu,
+ bus, path, iface, method, &state->in);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, sbus_method_in_ussu_out_qus_done, req);
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, conn->ev);
+ }
+
+ return req;
+}
+
+static void sbus_method_in_ussu_out_qus_done(struct tevent_req *subreq)
+{
+ struct sbus_method_in_ussu_out_qus_state *state;
+ struct tevent_req *req;
+ DBusMessage *reply;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct sbus_method_in_ussu_out_qus_state);
+
+ ret = sbus_call_method_recv(state, subreq, &reply);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ ret = sbus_read_output(state->out, reply, (sbus_invoker_reader_fn)_sbus_sss_invoker_read_qus, state->out);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+static errno_t
+sbus_method_in_ussu_out_qus_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ uint16_t* _arg0,
+ uint32_t* _arg1,
+ const char ** _arg2)
+{
+ struct sbus_method_in_ussu_out_qus_state *state;
+ state = tevent_req_data(req, struct sbus_method_in_ussu_out_qus_state);
+
+ TEVENT_REQ_RETURN_ON_ERROR(req);
+
+ *_arg0 = state->out->arg0;
+ *_arg1 = state->out->arg1;
+ *_arg2 = talloc_steal(mem_ctx, state->out->arg2);
+
+ return EOK;
+}
+
+struct sbus_method_in_usu_out__state {
+ struct _sbus_sss_invoker_args_usu in;
+};
+
+static void sbus_method_in_usu_out__done(struct tevent_req *subreq);
+
+static struct tevent_req *
+sbus_method_in_usu_out__send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ sbus_invoker_keygen keygen,
+ const char *bus,
+ const char *path,
+ const char *iface,
+ const char *method,
+ uint32_t arg0,
+ const char * arg1,
+ uint32_t arg2)
+{
+ struct sbus_method_in_usu_out__state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct sbus_method_in_usu_out__state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->in.arg0 = arg0;
+ state->in.arg1 = arg1;
+ state->in.arg2 = arg2;
+
+ subreq = sbus_call_method_send(state, conn, NULL, keygen,
+ (sbus_invoker_writer_fn)_sbus_sss_invoker_write_usu,
+ bus, path, iface, method, &state->in);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, sbus_method_in_usu_out__done, req);
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, conn->ev);
+ }
+
+ return req;
+}
+
+static void sbus_method_in_usu_out__done(struct tevent_req *subreq)
+{
+ struct sbus_method_in_usu_out__state *state;
+ struct tevent_req *req;
+ DBusMessage *reply;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct sbus_method_in_usu_out__state);
+
+ ret = sbus_call_method_recv(state, subreq, &reply);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+static errno_t
+sbus_method_in_usu_out__recv
+ (struct tevent_req *req)
+{
+ TEVENT_REQ_RETURN_ON_ERROR(req);
+
+ return EOK;
+}
+
+struct sbus_method_in_uusssu_out_qus_state {
+ struct _sbus_sss_invoker_args_uusssu in;
+ struct _sbus_sss_invoker_args_qus *out;
+};
+
+static void sbus_method_in_uusssu_out_qus_done(struct tevent_req *subreq);
+
+static struct tevent_req *
+sbus_method_in_uusssu_out_qus_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ sbus_invoker_keygen keygen,
+ const char *bus,
+ const char *path,
+ const char *iface,
+ const char *method,
+ uint32_t arg0,
+ uint32_t arg1,
+ const char * arg2,
+ const char * arg3,
+ const char * arg4,
+ uint32_t arg5)
+{
+ struct sbus_method_in_uusssu_out_qus_state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct sbus_method_in_uusssu_out_qus_state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->out = talloc_zero(state, struct _sbus_sss_invoker_args_qus);
+ if (state->out == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Unable to allocate space for output parameters!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ state->in.arg0 = arg0;
+ state->in.arg1 = arg1;
+ state->in.arg2 = arg2;
+ state->in.arg3 = arg3;
+ state->in.arg4 = arg4;
+ state->in.arg5 = arg5;
+
+ subreq = sbus_call_method_send(state, conn, NULL, keygen,
+ (sbus_invoker_writer_fn)_sbus_sss_invoker_write_uusssu,
+ bus, path, iface, method, &state->in);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, sbus_method_in_uusssu_out_qus_done, req);
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, conn->ev);
+ }
+
+ return req;
+}
+
+static void sbus_method_in_uusssu_out_qus_done(struct tevent_req *subreq)
+{
+ struct sbus_method_in_uusssu_out_qus_state *state;
+ struct tevent_req *req;
+ DBusMessage *reply;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct sbus_method_in_uusssu_out_qus_state);
+
+ ret = sbus_call_method_recv(state, subreq, &reply);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ ret = sbus_read_output(state->out, reply, (sbus_invoker_reader_fn)_sbus_sss_invoker_read_qus, state->out);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+static errno_t
+sbus_method_in_uusssu_out_qus_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ uint16_t* _arg0,
+ uint32_t* _arg1,
+ const char ** _arg2)
+{
+ struct sbus_method_in_uusssu_out_qus_state *state;
+ state = tevent_req_data(req, struct sbus_method_in_uusssu_out_qus_state);
+
+ TEVENT_REQ_RETURN_ON_ERROR(req);
+
+ *_arg0 = state->out->arg0;
+ *_arg1 = state->out->arg1;
+ *_arg2 = talloc_steal(mem_ctx, state->out->arg2);
+
+ return EOK;
+}
+
+struct sbus_method_in_uusu_out_qus_state {
+ struct _sbus_sss_invoker_args_uusu in;
+ struct _sbus_sss_invoker_args_qus *out;
+};
+
+static void sbus_method_in_uusu_out_qus_done(struct tevent_req *subreq);
+
+static struct tevent_req *
+sbus_method_in_uusu_out_qus_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ sbus_invoker_keygen keygen,
+ const char *bus,
+ const char *path,
+ const char *iface,
+ const char *method,
+ uint32_t arg0,
+ uint32_t arg1,
+ const char * arg2,
+ uint32_t arg3)
+{
+ struct sbus_method_in_uusu_out_qus_state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct sbus_method_in_uusu_out_qus_state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->out = talloc_zero(state, struct _sbus_sss_invoker_args_qus);
+ if (state->out == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Unable to allocate space for output parameters!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ state->in.arg0 = arg0;
+ state->in.arg1 = arg1;
+ state->in.arg2 = arg2;
+ state->in.arg3 = arg3;
+
+ subreq = sbus_call_method_send(state, conn, NULL, keygen,
+ (sbus_invoker_writer_fn)_sbus_sss_invoker_write_uusu,
+ bus, path, iface, method, &state->in);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, sbus_method_in_uusu_out_qus_done, req);
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, conn->ev);
+ }
+
+ return req;
+}
+
+static void sbus_method_in_uusu_out_qus_done(struct tevent_req *subreq)
+{
+ struct sbus_method_in_uusu_out_qus_state *state;
+ struct tevent_req *req;
+ DBusMessage *reply;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct sbus_method_in_uusu_out_qus_state);
+
+ ret = sbus_call_method_recv(state, subreq, &reply);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ ret = sbus_read_output(state->out, reply, (sbus_invoker_reader_fn)_sbus_sss_invoker_read_qus, state->out);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+static errno_t
+sbus_method_in_uusu_out_qus_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ uint16_t* _arg0,
+ uint32_t* _arg1,
+ const char ** _arg2)
+{
+ struct sbus_method_in_uusu_out_qus_state *state;
+ state = tevent_req_data(req, struct sbus_method_in_uusu_out_qus_state);
+
+ TEVENT_REQ_RETURN_ON_ERROR(req);
+
+ *_arg0 = state->out->arg0;
+ *_arg1 = state->out->arg1;
+ *_arg2 = talloc_steal(mem_ctx, state->out->arg2);
+
+ return EOK;
+}
+
+struct sbus_method_in_uuusu_out_qus_state {
+ struct _sbus_sss_invoker_args_uuusu in;
+ struct _sbus_sss_invoker_args_qus *out;
+};
+
+static void sbus_method_in_uuusu_out_qus_done(struct tevent_req *subreq);
+
+static struct tevent_req *
+sbus_method_in_uuusu_out_qus_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ sbus_invoker_keygen keygen,
+ const char *bus,
+ const char *path,
+ const char *iface,
+ const char *method,
+ uint32_t arg0,
+ uint32_t arg1,
+ uint32_t arg2,
+ const char * arg3,
+ uint32_t arg4)
+{
+ struct sbus_method_in_uuusu_out_qus_state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct sbus_method_in_uuusu_out_qus_state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->out = talloc_zero(state, struct _sbus_sss_invoker_args_qus);
+ if (state->out == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Unable to allocate space for output parameters!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ state->in.arg0 = arg0;
+ state->in.arg1 = arg1;
+ state->in.arg2 = arg2;
+ state->in.arg3 = arg3;
+ state->in.arg4 = arg4;
+
+ subreq = sbus_call_method_send(state, conn, NULL, keygen,
+ (sbus_invoker_writer_fn)_sbus_sss_invoker_write_uuusu,
+ bus, path, iface, method, &state->in);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, sbus_method_in_uuusu_out_qus_done, req);
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, conn->ev);
+ }
+
+ return req;
+}
+
+static void sbus_method_in_uuusu_out_qus_done(struct tevent_req *subreq)
+{
+ struct sbus_method_in_uuusu_out_qus_state *state;
+ struct tevent_req *req;
+ DBusMessage *reply;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct sbus_method_in_uuusu_out_qus_state);
+
+ ret = sbus_call_method_recv(state, subreq, &reply);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ ret = sbus_read_output(state->out, reply, (sbus_invoker_reader_fn)_sbus_sss_invoker_read_qus, state->out);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+static errno_t
+sbus_method_in_uuusu_out_qus_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ uint16_t* _arg0,
+ uint32_t* _arg1,
+ const char ** _arg2)
+{
+ struct sbus_method_in_uuusu_out_qus_state *state;
+ state = tevent_req_data(req, struct sbus_method_in_uuusu_out_qus_state);
+
+ TEVENT_REQ_RETURN_ON_ERROR(req);
+
+ *_arg0 = state->out->arg0;
+ *_arg1 = state->out->arg1;
+ *_arg2 = talloc_steal(mem_ctx, state->out->arg2);
+
+ return EOK;
+}
+
+struct tevent_req *
+sbus_call_fleet_ProcessSSSDFiles_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ uint32_t arg_uid,
+ const char * arg_user_dir,
+ uint16_t arg_prio)
+{
+ return sbus_method_in_usq_out__send(mem_ctx, conn, NULL,
+ busname, object_path, "org.freedesktop.FleetCommanderClient", "ProcessSSSDFiles", arg_uid, arg_user_dir, arg_prio);
+}
+
+errno_t
+sbus_call_fleet_ProcessSSSDFiles_recv
+ (struct tevent_req *req)
+{
+ return sbus_method_in_usq_out__recv(req);
+}
+
+struct tevent_req *
+sbus_call_dp_access_RefreshRules_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path)
+{
+ return sbus_method_in__out__send(mem_ctx, conn, _sbus_sss_key_,
+ busname, object_path, "sssd.DataProvider.AccessControl", "RefreshRules");
+}
+
+errno_t
+sbus_call_dp_access_RefreshRules_recv
+ (struct tevent_req *req)
+{
+ return sbus_method_in__out__recv(req);
+}
+
+struct tevent_req *
+sbus_call_dp_autofs_Enumerate_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ uint32_t arg_dp_flags,
+ const char * arg_mapname,
+ uint32_t arg_cli_id)
+{
+ return sbus_method_in_usu_out__send(mem_ctx, conn, _sbus_sss_key_usu_0_1,
+ busname, object_path, "sssd.DataProvider.Autofs", "Enumerate", arg_dp_flags, arg_mapname, arg_cli_id);
+}
+
+errno_t
+sbus_call_dp_autofs_Enumerate_recv
+ (struct tevent_req *req)
+{
+ return sbus_method_in_usu_out__recv(req);
+}
+
+struct tevent_req *
+sbus_call_dp_autofs_GetEntry_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ uint32_t arg_dp_flags,
+ const char * arg_mapname,
+ const char * arg_entryname,
+ uint32_t arg_cli_id)
+{
+ return sbus_method_in_ussu_out__send(mem_ctx, conn, _sbus_sss_key_ussu_0_1_2,
+ busname, object_path, "sssd.DataProvider.Autofs", "GetEntry", arg_dp_flags, arg_mapname, arg_entryname, arg_cli_id);
+}
+
+errno_t
+sbus_call_dp_autofs_GetEntry_recv
+ (struct tevent_req *req)
+{
+ return sbus_method_in_ussu_out__recv(req);
+}
+
+struct tevent_req *
+sbus_call_dp_autofs_GetMap_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ uint32_t arg_dp_flags,
+ const char * arg_mapname,
+ uint32_t arg_cli_id)
+{
+ return sbus_method_in_usu_out__send(mem_ctx, conn, _sbus_sss_key_usu_0_1,
+ busname, object_path, "sssd.DataProvider.Autofs", "GetMap", arg_dp_flags, arg_mapname, arg_cli_id);
+}
+
+errno_t
+sbus_call_dp_autofs_GetMap_recv
+ (struct tevent_req *req)
+{
+ return sbus_method_in_usu_out__recv(req);
+}
+
+struct tevent_req *
+sbus_call_dp_backend_IsOnline_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ const char * arg_domain_name)
+{
+ return sbus_method_in_s_out_b_send(mem_ctx, conn, _sbus_sss_key_s_0,
+ busname, object_path, "sssd.DataProvider.Backend", "IsOnline", arg_domain_name);
+}
+
+errno_t
+sbus_call_dp_backend_IsOnline_recv
+ (struct tevent_req *req,
+ bool* _status)
+{
+ return sbus_method_in_s_out_b_recv(req, _status);
+}
+
+struct tevent_req *
+sbus_call_dp_client_Register_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ const char * arg_Name)
+{
+ return sbus_method_in_s_out__send(mem_ctx, conn, NULL,
+ busname, object_path, "sssd.DataProvider.Client", "Register", arg_Name);
+}
+
+errno_t
+sbus_call_dp_client_Register_recv
+ (struct tevent_req *req)
+{
+ return sbus_method_in_s_out__recv(req);
+}
+
+struct tevent_req *
+sbus_call_dp_failover_ActiveServer_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ const char * arg_service_name)
+{
+ return sbus_method_in_s_out_s_send(mem_ctx, conn, _sbus_sss_key_s_0,
+ busname, object_path, "sssd.DataProvider.Failover", "ActiveServer", arg_service_name);
+}
+
+errno_t
+sbus_call_dp_failover_ActiveServer_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ const char ** _server)
+{
+ return sbus_method_in_s_out_s_recv(mem_ctx, req, _server);
+}
+
+struct tevent_req *
+sbus_call_dp_failover_ListServers_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ const char * arg_service_name)
+{
+ return sbus_method_in_s_out_as_send(mem_ctx, conn, _sbus_sss_key_s_0,
+ busname, object_path, "sssd.DataProvider.Failover", "ListServers", arg_service_name);
+}
+
+errno_t
+sbus_call_dp_failover_ListServers_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ const char *** _servers)
+{
+ return sbus_method_in_s_out_as_recv(mem_ctx, req, _servers);
+}
+
+struct tevent_req *
+sbus_call_dp_failover_ListServices_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ const char * arg_domain_name)
+{
+ return sbus_method_in_s_out_as_send(mem_ctx, conn, _sbus_sss_key_s_0,
+ busname, object_path, "sssd.DataProvider.Failover", "ListServices", arg_domain_name);
+}
+
+errno_t
+sbus_call_dp_failover_ListServices_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ const char *** _services)
+{
+ return sbus_method_in_s_out_as_recv(mem_ctx, req, _services);
+}
+
+struct tevent_req *
+sbus_call_proxy_auth_PAM_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ struct pam_data * arg_pam_data)
+{
+ return sbus_method_in_pam_data_out_pam_response_send(mem_ctx, conn, NULL,
+ busname, object_path, "sssd.ProxyChild.Auth", "PAM", arg_pam_data);
+}
+
+errno_t
+sbus_call_proxy_auth_PAM_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ struct pam_data ** _pam_response)
+{
+ return sbus_method_in_pam_data_out_pam_response_recv(mem_ctx, req, _pam_response);
+}
+
+struct tevent_req *
+sbus_call_proxy_client_Register_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ uint32_t arg_ID)
+{
+ return sbus_method_in_u_out__send(mem_ctx, conn, NULL,
+ busname, object_path, "sssd.ProxyChild.Client", "Register", arg_ID);
+}
+
+errno_t
+sbus_call_proxy_client_Register_recv
+ (struct tevent_req *req)
+{
+ return sbus_method_in_u_out__recv(req);
+}
+
+struct tevent_req *
+sbus_call_resp_domain_SetActive_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ const char * arg_name)
+{
+ return sbus_method_in_s_out__send(mem_ctx, conn, _sbus_sss_key_s_0,
+ busname, object_path, "sssd.Responder.Domain", "SetActive", arg_name);
+}
+
+errno_t
+sbus_call_resp_domain_SetActive_recv
+ (struct tevent_req *req)
+{
+ return sbus_method_in_s_out__recv(req);
+}
+
+struct tevent_req *
+sbus_call_resp_domain_SetInconsistent_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ const char * arg_name)
+{
+ return sbus_method_in_s_out__send(mem_ctx, conn, _sbus_sss_key_s_0,
+ busname, object_path, "sssd.Responder.Domain", "SetInconsistent", arg_name);
+}
+
+errno_t
+sbus_call_resp_domain_SetInconsistent_recv
+ (struct tevent_req *req)
+{
+ return sbus_method_in_s_out__recv(req);
+}
+
+struct tevent_req *
+sbus_call_resp_negcache_ResetGroups_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path)
+{
+ return sbus_method_in__out__send(mem_ctx, conn, _sbus_sss_key_,
+ busname, object_path, "sssd.Responder.NegativeCache", "ResetGroups");
+}
+
+errno_t
+sbus_call_resp_negcache_ResetGroups_recv
+ (struct tevent_req *req)
+{
+ return sbus_method_in__out__recv(req);
+}
+
+struct tevent_req *
+sbus_call_resp_negcache_ResetUsers_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path)
+{
+ return sbus_method_in__out__send(mem_ctx, conn, _sbus_sss_key_,
+ busname, object_path, "sssd.Responder.NegativeCache", "ResetUsers");
+}
+
+errno_t
+sbus_call_resp_negcache_ResetUsers_recv
+ (struct tevent_req *req)
+{
+ return sbus_method_in__out__recv(req);
+}
+
+struct tevent_req *
+sbus_call_dp_dp_getAccountDomain_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ uint32_t arg_dp_flags,
+ uint32_t arg_entry_type,
+ const char * arg_filter,
+ uint32_t arg_cli_id)
+{
+ return sbus_method_in_uusu_out_qus_send(mem_ctx, conn, _sbus_sss_key_uusu_0_1_2,
+ busname, object_path, "sssd.dataprovider", "getAccountDomain", arg_dp_flags, arg_entry_type, arg_filter, arg_cli_id);
+}
+
+errno_t
+sbus_call_dp_dp_getAccountDomain_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ uint16_t* _dp_error,
+ uint32_t* _error,
+ const char ** _domain_name)
+{
+ return sbus_method_in_uusu_out_qus_recv(mem_ctx, req, _dp_error, _error, _domain_name);
+}
+
+struct tevent_req *
+sbus_call_dp_dp_getAccountInfo_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ uint32_t arg_dp_flags,
+ uint32_t arg_entry_type,
+ const char * arg_filter,
+ const char * arg_domain,
+ const char * arg_extra,
+ uint32_t arg_cli_id)
+{
+ return sbus_method_in_uusssu_out_qus_send(mem_ctx, conn, _sbus_sss_key_uusssu_0_1_2_3_4,
+ busname, object_path, "sssd.dataprovider", "getAccountInfo", arg_dp_flags, arg_entry_type, arg_filter, arg_domain, arg_extra, arg_cli_id);
+}
+
+errno_t
+sbus_call_dp_dp_getAccountInfo_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ uint16_t* _dp_error,
+ uint32_t* _error,
+ const char ** _error_message)
+{
+ return sbus_method_in_uusssu_out_qus_recv(mem_ctx, req, _dp_error, _error, _error_message);
+}
+
+struct tevent_req *
+sbus_call_dp_dp_getDomains_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ const char * arg_domain_hint)
+{
+ return sbus_method_in_s_out_qus_send(mem_ctx, conn, _sbus_sss_key_s_0,
+ busname, object_path, "sssd.dataprovider", "getDomains", arg_domain_hint);
+}
+
+errno_t
+sbus_call_dp_dp_getDomains_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ uint16_t* _dp_error,
+ uint32_t* _error,
+ const char ** _error_message)
+{
+ return sbus_method_in_s_out_qus_recv(mem_ctx, req, _dp_error, _error, _error_message);
+}
+
+struct tevent_req *
+sbus_call_dp_dp_hostHandler_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ uint32_t arg_dp_flags,
+ const char * arg_name,
+ const char * arg_alias,
+ uint32_t arg_cli_id)
+{
+ return sbus_method_in_ussu_out_qus_send(mem_ctx, conn, _sbus_sss_key_ussu_0_1,
+ busname, object_path, "sssd.dataprovider", "hostHandler", arg_dp_flags, arg_name, arg_alias, arg_cli_id);
+}
+
+errno_t
+sbus_call_dp_dp_hostHandler_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ uint16_t* _dp_error,
+ uint32_t* _error,
+ const char ** _error_message)
+{
+ return sbus_method_in_ussu_out_qus_recv(mem_ctx, req, _dp_error, _error, _error_message);
+}
+
+struct tevent_req *
+sbus_call_dp_dp_pamHandler_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ struct pam_data * arg_pam_data)
+{
+ return sbus_method_in_pam_data_out_pam_response_send(mem_ctx, conn, NULL,
+ busname, object_path, "sssd.dataprovider", "pamHandler", arg_pam_data);
+}
+
+errno_t
+sbus_call_dp_dp_pamHandler_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ struct pam_data ** _pam_response)
+{
+ return sbus_method_in_pam_data_out_pam_response_recv(mem_ctx, req, _pam_response);
+}
+
+struct tevent_req *
+sbus_call_dp_dp_resolverHandler_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ uint32_t arg_dp_flags,
+ uint32_t arg_entry_type,
+ uint32_t arg_filter_type,
+ const char * arg_filter_value,
+ uint32_t arg_cli_id)
+{
+ return sbus_method_in_uuusu_out_qus_send(mem_ctx, conn, _sbus_sss_key_uuusu_0_1_2_3,
+ busname, object_path, "sssd.dataprovider", "resolverHandler", arg_dp_flags, arg_entry_type, arg_filter_type, arg_filter_value, arg_cli_id);
+}
+
+errno_t
+sbus_call_dp_dp_resolverHandler_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ uint16_t* _dp_error,
+ uint32_t* _error,
+ const char ** _error_message)
+{
+ return sbus_method_in_uuusu_out_qus_recv(mem_ctx, req, _dp_error, _error, _error_message);
+}
+
+struct tevent_req *
+sbus_call_dp_dp_sudoHandler_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ DBusMessage *raw_message)
+{
+ return sbus_method_in_raw_out_qus_send(mem_ctx, conn, raw_message);
+}
+
+errno_t
+sbus_call_dp_dp_sudoHandler_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ uint16_t* _dp_error,
+ uint32_t* _error,
+ const char ** _error_message)
+{
+ return sbus_method_in_raw_out_qus_recv(mem_ctx, req, _dp_error, _error, _error_message);
+}
+
+struct tevent_req *
+sbus_call_monitor_RegisterService_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ const char * arg_name,
+ uint16_t arg_version,
+ uint16_t arg_type)
+{
+ return sbus_method_in_sqq_out_q_send(mem_ctx, conn, NULL,
+ busname, object_path, "sssd.monitor", "RegisterService", arg_name, arg_version, arg_type);
+}
+
+errno_t
+sbus_call_monitor_RegisterService_recv
+ (struct tevent_req *req,
+ uint16_t* _monitor_version)
+{
+ return sbus_method_in_sqq_out_q_recv(req, _monitor_version);
+}
+
+struct tevent_req *
+sbus_call_nss_memcache_InvalidateAllGroups_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path)
+{
+ return sbus_method_in__out__send(mem_ctx, conn, _sbus_sss_key_,
+ busname, object_path, "sssd.nss.MemoryCache", "InvalidateAllGroups");
+}
+
+errno_t
+sbus_call_nss_memcache_InvalidateAllGroups_recv
+ (struct tevent_req *req)
+{
+ return sbus_method_in__out__recv(req);
+}
+
+struct tevent_req *
+sbus_call_nss_memcache_InvalidateAllInitgroups_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path)
+{
+ return sbus_method_in__out__send(mem_ctx, conn, _sbus_sss_key_,
+ busname, object_path, "sssd.nss.MemoryCache", "InvalidateAllInitgroups");
+}
+
+errno_t
+sbus_call_nss_memcache_InvalidateAllInitgroups_recv
+ (struct tevent_req *req)
+{
+ return sbus_method_in__out__recv(req);
+}
+
+struct tevent_req *
+sbus_call_nss_memcache_InvalidateAllUsers_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path)
+{
+ return sbus_method_in__out__send(mem_ctx, conn, _sbus_sss_key_,
+ busname, object_path, "sssd.nss.MemoryCache", "InvalidateAllUsers");
+}
+
+errno_t
+sbus_call_nss_memcache_InvalidateAllUsers_recv
+ (struct tevent_req *req)
+{
+ return sbus_method_in__out__recv(req);
+}
+
+struct tevent_req *
+sbus_call_nss_memcache_InvalidateGroupById_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ uint32_t arg_gid)
+{
+ return sbus_method_in_u_out__send(mem_ctx, conn, _sbus_sss_key_u_0,
+ busname, object_path, "sssd.nss.MemoryCache", "InvalidateGroupById", arg_gid);
+}
+
+errno_t
+sbus_call_nss_memcache_InvalidateGroupById_recv
+ (struct tevent_req *req)
+{
+ return sbus_method_in_u_out__recv(req);
+}
+
+struct tevent_req *
+sbus_call_nss_memcache_UpdateInitgroups_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ const char * arg_user,
+ const char * arg_domain,
+ uint32_t * arg_groups)
+{
+ return sbus_method_in_ssau_out__send(mem_ctx, conn, NULL,
+ busname, object_path, "sssd.nss.MemoryCache", "UpdateInitgroups", arg_user, arg_domain, arg_groups);
+}
+
+errno_t
+sbus_call_nss_memcache_UpdateInitgroups_recv
+ (struct tevent_req *req)
+{
+ return sbus_method_in_ssau_out__recv(req);
+}
+
+struct tevent_req *
+sbus_call_service_clearEnumCache_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path)
+{
+ return sbus_method_in__out__send(mem_ctx, conn, NULL,
+ busname, object_path, "sssd.service", "clearEnumCache");
+}
+
+errno_t
+sbus_call_service_clearEnumCache_recv
+ (struct tevent_req *req)
+{
+ return sbus_method_in__out__recv(req);
+}
+
+struct tevent_req *
+sbus_call_service_clearMemcache_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path)
+{
+ return sbus_method_in__out__send(mem_ctx, conn, NULL,
+ busname, object_path, "sssd.service", "clearMemcache");
+}
+
+errno_t
+sbus_call_service_clearMemcache_recv
+ (struct tevent_req *req)
+{
+ return sbus_method_in__out__recv(req);
+}
+
+struct tevent_req *
+sbus_call_service_clearNegcache_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path)
+{
+ return sbus_method_in__out__send(mem_ctx, conn, NULL,
+ busname, object_path, "sssd.service", "clearNegcache");
+}
+
+errno_t
+sbus_call_service_clearNegcache_recv
+ (struct tevent_req *req)
+{
+ return sbus_method_in__out__recv(req);
+}
+
+struct tevent_req *
+sbus_call_service_goOffline_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path)
+{
+ return sbus_method_in__out__send(mem_ctx, conn, NULL,
+ busname, object_path, "sssd.service", "goOffline");
+}
+
+errno_t
+sbus_call_service_goOffline_recv
+ (struct tevent_req *req)
+{
+ return sbus_method_in__out__recv(req);
+}
+
+struct tevent_req *
+sbus_call_service_resetOffline_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path)
+{
+ return sbus_method_in__out__send(mem_ctx, conn, NULL,
+ busname, object_path, "sssd.service", "resetOffline");
+}
+
+errno_t
+sbus_call_service_resetOffline_recv
+ (struct tevent_req *req)
+{
+ return sbus_method_in__out__recv(req);
+}
+
+struct tevent_req *
+sbus_call_service_rotateLogs_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path)
+{
+ return sbus_method_in__out__send(mem_ctx, conn, NULL,
+ busname, object_path, "sssd.service", "rotateLogs");
+}
+
+errno_t
+sbus_call_service_rotateLogs_recv
+ (struct tevent_req *req)
+{
+ return sbus_method_in__out__recv(req);
+}
+
+struct tevent_req *
+sbus_call_service_sysbusReconnect_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path)
+{
+ return sbus_method_in__out__send(mem_ctx, conn, NULL,
+ busname, object_path, "sssd.service", "sysbusReconnect");
+}
+
+errno_t
+sbus_call_service_sysbusReconnect_recv
+ (struct tevent_req *req)
+{
+ return sbus_method_in__out__recv(req);
+}
diff --git a/src/sss_iface/sbus_sss_client_async.h b/src/sss_iface/sbus_sss_client_async.h
new file mode 100644
index 0000000..10cdaf7
--- /dev/null
+++ b/src/sss_iface/sbus_sss_client_async.h
@@ -0,0 +1,512 @@
+/*
+ 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 <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _SBUS_SSS_CLIENT_ASYNC_H_
+#define _SBUS_SSS_CLIENT_ASYNC_H_
+
+#include <errno.h>
+#include <talloc.h>
+#include <tevent.h>
+
+#include "sbus/sbus.h"
+#include "sss_iface/sbus_sss_client_properties.h"
+#include "sss_iface/sss_iface_types.h"
+
+struct tevent_req *
+sbus_call_fleet_ProcessSSSDFiles_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ uint32_t arg_uid,
+ const char * arg_user_dir,
+ uint16_t arg_prio);
+
+errno_t
+sbus_call_fleet_ProcessSSSDFiles_recv
+ (struct tevent_req *req);
+
+struct tevent_req *
+sbus_call_dp_access_RefreshRules_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path);
+
+errno_t
+sbus_call_dp_access_RefreshRules_recv
+ (struct tevent_req *req);
+
+struct tevent_req *
+sbus_call_dp_autofs_Enumerate_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ uint32_t arg_dp_flags,
+ const char * arg_mapname,
+ uint32_t arg_cli_id);
+
+errno_t
+sbus_call_dp_autofs_Enumerate_recv
+ (struct tevent_req *req);
+
+struct tevent_req *
+sbus_call_dp_autofs_GetEntry_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ uint32_t arg_dp_flags,
+ const char * arg_mapname,
+ const char * arg_entryname,
+ uint32_t arg_cli_id);
+
+errno_t
+sbus_call_dp_autofs_GetEntry_recv
+ (struct tevent_req *req);
+
+struct tevent_req *
+sbus_call_dp_autofs_GetMap_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ uint32_t arg_dp_flags,
+ const char * arg_mapname,
+ uint32_t arg_cli_id);
+
+errno_t
+sbus_call_dp_autofs_GetMap_recv
+ (struct tevent_req *req);
+
+struct tevent_req *
+sbus_call_dp_backend_IsOnline_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ const char * arg_domain_name);
+
+errno_t
+sbus_call_dp_backend_IsOnline_recv
+ (struct tevent_req *req,
+ bool* _status);
+
+struct tevent_req *
+sbus_call_dp_client_Register_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ const char * arg_Name);
+
+errno_t
+sbus_call_dp_client_Register_recv
+ (struct tevent_req *req);
+
+struct tevent_req *
+sbus_call_dp_failover_ActiveServer_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ const char * arg_service_name);
+
+errno_t
+sbus_call_dp_failover_ActiveServer_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ const char ** _server);
+
+struct tevent_req *
+sbus_call_dp_failover_ListServers_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ const char * arg_service_name);
+
+errno_t
+sbus_call_dp_failover_ListServers_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ const char *** _servers);
+
+struct tevent_req *
+sbus_call_dp_failover_ListServices_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ const char * arg_domain_name);
+
+errno_t
+sbus_call_dp_failover_ListServices_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ const char *** _services);
+
+struct tevent_req *
+sbus_call_proxy_auth_PAM_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ struct pam_data * arg_pam_data);
+
+errno_t
+sbus_call_proxy_auth_PAM_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ struct pam_data ** _pam_response);
+
+struct tevent_req *
+sbus_call_proxy_client_Register_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ uint32_t arg_ID);
+
+errno_t
+sbus_call_proxy_client_Register_recv
+ (struct tevent_req *req);
+
+struct tevent_req *
+sbus_call_resp_domain_SetActive_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ const char * arg_name);
+
+errno_t
+sbus_call_resp_domain_SetActive_recv
+ (struct tevent_req *req);
+
+struct tevent_req *
+sbus_call_resp_domain_SetInconsistent_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ const char * arg_name);
+
+errno_t
+sbus_call_resp_domain_SetInconsistent_recv
+ (struct tevent_req *req);
+
+struct tevent_req *
+sbus_call_resp_negcache_ResetGroups_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path);
+
+errno_t
+sbus_call_resp_negcache_ResetGroups_recv
+ (struct tevent_req *req);
+
+struct tevent_req *
+sbus_call_resp_negcache_ResetUsers_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path);
+
+errno_t
+sbus_call_resp_negcache_ResetUsers_recv
+ (struct tevent_req *req);
+
+struct tevent_req *
+sbus_call_dp_dp_getAccountDomain_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ uint32_t arg_dp_flags,
+ uint32_t arg_entry_type,
+ const char * arg_filter,
+ uint32_t arg_cli_id);
+
+errno_t
+sbus_call_dp_dp_getAccountDomain_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ uint16_t* _dp_error,
+ uint32_t* _error,
+ const char ** _domain_name);
+
+struct tevent_req *
+sbus_call_dp_dp_getAccountInfo_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ uint32_t arg_dp_flags,
+ uint32_t arg_entry_type,
+ const char * arg_filter,
+ const char * arg_domain,
+ const char * arg_extra,
+ uint32_t arg_cli_id);
+
+errno_t
+sbus_call_dp_dp_getAccountInfo_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ uint16_t* _dp_error,
+ uint32_t* _error,
+ const char ** _error_message);
+
+struct tevent_req *
+sbus_call_dp_dp_getDomains_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ const char * arg_domain_hint);
+
+errno_t
+sbus_call_dp_dp_getDomains_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ uint16_t* _dp_error,
+ uint32_t* _error,
+ const char ** _error_message);
+
+struct tevent_req *
+sbus_call_dp_dp_hostHandler_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ uint32_t arg_dp_flags,
+ const char * arg_name,
+ const char * arg_alias,
+ uint32_t arg_cli_id);
+
+errno_t
+sbus_call_dp_dp_hostHandler_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ uint16_t* _dp_error,
+ uint32_t* _error,
+ const char ** _error_message);
+
+struct tevent_req *
+sbus_call_dp_dp_pamHandler_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ struct pam_data * arg_pam_data);
+
+errno_t
+sbus_call_dp_dp_pamHandler_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ struct pam_data ** _pam_response);
+
+struct tevent_req *
+sbus_call_dp_dp_resolverHandler_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ uint32_t arg_dp_flags,
+ uint32_t arg_entry_type,
+ uint32_t arg_filter_type,
+ const char * arg_filter_value,
+ uint32_t arg_cli_id);
+
+errno_t
+sbus_call_dp_dp_resolverHandler_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ uint16_t* _dp_error,
+ uint32_t* _error,
+ const char ** _error_message);
+
+struct tevent_req *
+sbus_call_dp_dp_sudoHandler_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ DBusMessage *raw_message);
+
+errno_t
+sbus_call_dp_dp_sudoHandler_recv
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ uint16_t* _dp_error,
+ uint32_t* _error,
+ const char ** _error_message);
+
+struct tevent_req *
+sbus_call_monitor_RegisterService_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ const char * arg_name,
+ uint16_t arg_version,
+ uint16_t arg_type);
+
+errno_t
+sbus_call_monitor_RegisterService_recv
+ (struct tevent_req *req,
+ uint16_t* _monitor_version);
+
+struct tevent_req *
+sbus_call_nss_memcache_InvalidateAllGroups_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path);
+
+errno_t
+sbus_call_nss_memcache_InvalidateAllGroups_recv
+ (struct tevent_req *req);
+
+struct tevent_req *
+sbus_call_nss_memcache_InvalidateAllInitgroups_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path);
+
+errno_t
+sbus_call_nss_memcache_InvalidateAllInitgroups_recv
+ (struct tevent_req *req);
+
+struct tevent_req *
+sbus_call_nss_memcache_InvalidateAllUsers_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path);
+
+errno_t
+sbus_call_nss_memcache_InvalidateAllUsers_recv
+ (struct tevent_req *req);
+
+struct tevent_req *
+sbus_call_nss_memcache_InvalidateGroupById_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ uint32_t arg_gid);
+
+errno_t
+sbus_call_nss_memcache_InvalidateGroupById_recv
+ (struct tevent_req *req);
+
+struct tevent_req *
+sbus_call_nss_memcache_UpdateInitgroups_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path,
+ const char * arg_user,
+ const char * arg_domain,
+ uint32_t * arg_groups);
+
+errno_t
+sbus_call_nss_memcache_UpdateInitgroups_recv
+ (struct tevent_req *req);
+
+struct tevent_req *
+sbus_call_service_clearEnumCache_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path);
+
+errno_t
+sbus_call_service_clearEnumCache_recv
+ (struct tevent_req *req);
+
+struct tevent_req *
+sbus_call_service_clearMemcache_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path);
+
+errno_t
+sbus_call_service_clearMemcache_recv
+ (struct tevent_req *req);
+
+struct tevent_req *
+sbus_call_service_clearNegcache_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path);
+
+errno_t
+sbus_call_service_clearNegcache_recv
+ (struct tevent_req *req);
+
+struct tevent_req *
+sbus_call_service_goOffline_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path);
+
+errno_t
+sbus_call_service_goOffline_recv
+ (struct tevent_req *req);
+
+struct tevent_req *
+sbus_call_service_resetOffline_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path);
+
+errno_t
+sbus_call_service_resetOffline_recv
+ (struct tevent_req *req);
+
+struct tevent_req *
+sbus_call_service_rotateLogs_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path);
+
+errno_t
+sbus_call_service_rotateLogs_recv
+ (struct tevent_req *req);
+
+struct tevent_req *
+sbus_call_service_sysbusReconnect_send
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_connection *conn,
+ const char *busname,
+ const char *object_path);
+
+errno_t
+sbus_call_service_sysbusReconnect_recv
+ (struct tevent_req *req);
+
+#endif /* _SBUS_SSS_CLIENT_ASYNC_H_ */
diff --git a/src/sss_iface/sbus_sss_client_properties.h b/src/sss_iface/sbus_sss_client_properties.h
new file mode 100644
index 0000000..cfb77b9
--- /dev/null
+++ b/src/sss_iface/sbus_sss_client_properties.h
@@ -0,0 +1,35 @@
+/*
+ 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 <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _SBUS_SSS_CLIENT_PROPERTIES_H_
+#define _SBUS_SSS_CLIENT_PROPERTIES_H_
+
+#include <stdint.h>
+#include <stdbool.h>
+
+#include "sss_iface/sss_iface_types.h"
+
+struct sbus_all_service {
+ struct {
+ bool is_set;
+ uint32_t value;
+ } debug_level;
+};
+
+#endif /* _SBUS_SSS_CLIENT_PROPERTIES_H_ */
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 <http://www.gnu.org/licenses/>.
+*/
+
+#include <errno.h>
+#include <talloc.h>
+#include <dbus/dbus.h>
+
+#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;
+}
diff --git a/src/sss_iface/sbus_sss_client_sync.h b/src/sss_iface/sbus_sss_client_sync.h
new file mode 100644
index 0000000..c4604d3
--- /dev/null
+++ b/src/sss_iface/sbus_sss_client_sync.h
@@ -0,0 +1,83 @@
+/*
+ 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 <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _SBUS_SSS_CLIENT_SYNC_H_
+#define _SBUS_SSS_CLIENT_SYNC_H_
+
+#include <errno.h>
+#include <talloc.h>
+#include <tevent.h>
+
+#include "sbus/sbus_sync.h"
+#include "sss_iface/sbus_sss_client_properties.h"
+#include "sss_iface/sss_iface_types.h"
+
+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);
+
+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);
+
+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);
+
+errno_t
+sbus_get_service_debug_level
+ (struct sbus_sync_connection *conn,
+ const char *busname,
+ const char *object_path,
+ uint32_t* _value);
+
+errno_t
+sbus_set_service_debug_level
+ (struct sbus_sync_connection *conn,
+ const char *busname,
+ const char *object_path,
+ uint32_t 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);
+
+#endif /* _SBUS_SSS_CLIENT_SYNC_H_ */
diff --git a/src/sss_iface/sbus_sss_interface.h b/src/sss_iface/sbus_sss_interface.h
new file mode 100644
index 0000000..5b4d1c3
--- /dev/null
+++ b/src/sss_iface/sbus_sss_interface.h
@@ -0,0 +1,1011 @@
+/*
+ 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 <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _SBUS_SSS_INTERFACE_H_
+#define _SBUS_SSS_INTERFACE_H_
+
+#include "sbus/sbus_interface_declarations.h"
+#include "sss_iface/sbus_sss_invokers.h"
+#include "sss_iface/sbus_sss_symbols.h"
+#include "sss_iface/sbus_sss_keygens.h"
+
+/* Interface: org.freedesktop.FleetCommanderClient */
+#define SBUS_IFACE_org_freedesktop_FleetCommanderClient(methods, signals, properties) ({ \
+ sbus_interface("org.freedesktop.FleetCommanderClient", NULL, \
+ (methods), (signals), (properties)); \
+})
+
+/* Method: org.freedesktop.FleetCommanderClient.ProcessSSSDFiles */
+#define SBUS_METHOD_SYNC_org_freedesktop_FleetCommanderClient_ProcessSSSDFiles(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data), uint32_t, const char *, uint16_t); \
+ sbus_method_sync("ProcessSSSDFiles", \
+ &_sbus_sss_args_org_freedesktop_FleetCommanderClient_ProcessSSSDFiles, \
+ NULL, \
+ _sbus_sss_invoke_in_usq_out__send, \
+ NULL, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_org_freedesktop_FleetCommanderClient_ProcessSSSDFiles(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data), uint32_t, const char *, uint16_t); \
+ SBUS_CHECK_RECV((handler_recv)); \
+ sbus_method_async("ProcessSSSDFiles", \
+ &_sbus_sss_args_org_freedesktop_FleetCommanderClient_ProcessSSSDFiles, \
+ NULL, \
+ _sbus_sss_invoke_in_usq_out__send, \
+ NULL, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Interface: org.freedesktop.systemd1.Manager */
+#define SBUS_IFACE_org_freedesktop_systemd1_Manager(methods, signals, properties) ({ \
+ sbus_interface("org.freedesktop.systemd1.Manager", NULL, \
+ (methods), (signals), (properties)); \
+})
+
+/* Method: org.freedesktop.systemd1.Manager.RestartUnit */
+#define SBUS_METHOD_SYNC_org_freedesktop_systemd1_Manager_RestartUnit(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data), const char *, const char *, const char **); \
+ sbus_method_sync("RestartUnit", \
+ &_sbus_sss_args_org_freedesktop_systemd1_Manager_RestartUnit, \
+ NULL, \
+ _sbus_sss_invoke_in_ss_out_o_send, \
+ NULL, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_org_freedesktop_systemd1_Manager_RestartUnit(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data), const char *, const char *); \
+ SBUS_CHECK_RECV((handler_recv), const char **); \
+ sbus_method_async("RestartUnit", \
+ &_sbus_sss_args_org_freedesktop_systemd1_Manager_RestartUnit, \
+ NULL, \
+ _sbus_sss_invoke_in_ss_out_o_send, \
+ NULL, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Method: org.freedesktop.systemd1.Manager.StartUnit */
+#define SBUS_METHOD_SYNC_org_freedesktop_systemd1_Manager_StartUnit(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data), const char *, const char *, const char **); \
+ sbus_method_sync("StartUnit", \
+ &_sbus_sss_args_org_freedesktop_systemd1_Manager_StartUnit, \
+ NULL, \
+ _sbus_sss_invoke_in_ss_out_o_send, \
+ NULL, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_org_freedesktop_systemd1_Manager_StartUnit(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data), const char *, const char *); \
+ SBUS_CHECK_RECV((handler_recv), const char **); \
+ sbus_method_async("StartUnit", \
+ &_sbus_sss_args_org_freedesktop_systemd1_Manager_StartUnit, \
+ NULL, \
+ _sbus_sss_invoke_in_ss_out_o_send, \
+ NULL, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Method: org.freedesktop.systemd1.Manager.StopUnit */
+#define SBUS_METHOD_SYNC_org_freedesktop_systemd1_Manager_StopUnit(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data), const char *, const char *, const char **); \
+ sbus_method_sync("StopUnit", \
+ &_sbus_sss_args_org_freedesktop_systemd1_Manager_StopUnit, \
+ NULL, \
+ _sbus_sss_invoke_in_ss_out_o_send, \
+ NULL, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_org_freedesktop_systemd1_Manager_StopUnit(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data), const char *, const char *); \
+ SBUS_CHECK_RECV((handler_recv), const char **); \
+ sbus_method_async("StopUnit", \
+ &_sbus_sss_args_org_freedesktop_systemd1_Manager_StopUnit, \
+ NULL, \
+ _sbus_sss_invoke_in_ss_out_o_send, \
+ NULL, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Interface: sssd.DataProvider.AccessControl */
+#define SBUS_IFACE_sssd_DataProvider_AccessControl(methods, signals, properties) ({ \
+ sbus_interface("sssd.DataProvider.AccessControl", NULL, \
+ (methods), (signals), (properties)); \
+})
+
+/* Method: sssd.DataProvider.AccessControl.RefreshRules */
+#define SBUS_METHOD_SYNC_sssd_DataProvider_AccessControl_RefreshRules(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data)); \
+ sbus_method_sync("RefreshRules", \
+ &_sbus_sss_args_sssd_DataProvider_AccessControl_RefreshRules, \
+ NULL, \
+ _sbus_sss_invoke_in__out__send, \
+ _sbus_sss_key_, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_DataProvider_AccessControl_RefreshRules(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data)); \
+ SBUS_CHECK_RECV((handler_recv)); \
+ sbus_method_async("RefreshRules", \
+ &_sbus_sss_args_sssd_DataProvider_AccessControl_RefreshRules, \
+ NULL, \
+ _sbus_sss_invoke_in__out__send, \
+ _sbus_sss_key_, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Interface: sssd.DataProvider.Autofs */
+#define SBUS_IFACE_sssd_DataProvider_Autofs(methods, signals, properties) ({ \
+ sbus_interface("sssd.DataProvider.Autofs", NULL, \
+ (methods), (signals), (properties)); \
+})
+
+/* Method: sssd.DataProvider.Autofs.Enumerate */
+#define SBUS_METHOD_SYNC_sssd_DataProvider_Autofs_Enumerate(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data), uint32_t, const char *, uint32_t); \
+ sbus_method_sync("Enumerate", \
+ &_sbus_sss_args_sssd_DataProvider_Autofs_Enumerate, \
+ NULL, \
+ _sbus_sss_invoke_in_usu_out__send, \
+ _sbus_sss_key_usu_0_1, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_DataProvider_Autofs_Enumerate(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data), uint32_t, const char *, uint32_t); \
+ SBUS_CHECK_RECV((handler_recv)); \
+ sbus_method_async("Enumerate", \
+ &_sbus_sss_args_sssd_DataProvider_Autofs_Enumerate, \
+ NULL, \
+ _sbus_sss_invoke_in_usu_out__send, \
+ _sbus_sss_key_usu_0_1, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Method: sssd.DataProvider.Autofs.GetEntry */
+#define SBUS_METHOD_SYNC_sssd_DataProvider_Autofs_GetEntry(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data), uint32_t, const char *, const char *, uint32_t); \
+ sbus_method_sync("GetEntry", \
+ &_sbus_sss_args_sssd_DataProvider_Autofs_GetEntry, \
+ NULL, \
+ _sbus_sss_invoke_in_ussu_out__send, \
+ _sbus_sss_key_ussu_0_1_2, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_DataProvider_Autofs_GetEntry(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data), uint32_t, const char *, const char *, uint32_t); \
+ SBUS_CHECK_RECV((handler_recv)); \
+ sbus_method_async("GetEntry", \
+ &_sbus_sss_args_sssd_DataProvider_Autofs_GetEntry, \
+ NULL, \
+ _sbus_sss_invoke_in_ussu_out__send, \
+ _sbus_sss_key_ussu_0_1_2, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Method: sssd.DataProvider.Autofs.GetMap */
+#define SBUS_METHOD_SYNC_sssd_DataProvider_Autofs_GetMap(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data), uint32_t, const char *, uint32_t); \
+ sbus_method_sync("GetMap", \
+ &_sbus_sss_args_sssd_DataProvider_Autofs_GetMap, \
+ NULL, \
+ _sbus_sss_invoke_in_usu_out__send, \
+ _sbus_sss_key_usu_0_1, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_DataProvider_Autofs_GetMap(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data), uint32_t, const char *, uint32_t); \
+ SBUS_CHECK_RECV((handler_recv)); \
+ sbus_method_async("GetMap", \
+ &_sbus_sss_args_sssd_DataProvider_Autofs_GetMap, \
+ NULL, \
+ _sbus_sss_invoke_in_usu_out__send, \
+ _sbus_sss_key_usu_0_1, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Interface: sssd.DataProvider.Backend */
+#define SBUS_IFACE_sssd_DataProvider_Backend(methods, signals, properties) ({ \
+ sbus_interface("sssd.DataProvider.Backend", NULL, \
+ (methods), (signals), (properties)); \
+})
+
+/* Method: sssd.DataProvider.Backend.IsOnline */
+#define SBUS_METHOD_SYNC_sssd_DataProvider_Backend_IsOnline(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data), const char *, bool*); \
+ sbus_method_sync("IsOnline", \
+ &_sbus_sss_args_sssd_DataProvider_Backend_IsOnline, \
+ NULL, \
+ _sbus_sss_invoke_in_s_out_b_send, \
+ _sbus_sss_key_s_0, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_DataProvider_Backend_IsOnline(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data), const char *); \
+ SBUS_CHECK_RECV((handler_recv), bool*); \
+ sbus_method_async("IsOnline", \
+ &_sbus_sss_args_sssd_DataProvider_Backend_IsOnline, \
+ NULL, \
+ _sbus_sss_invoke_in_s_out_b_send, \
+ _sbus_sss_key_s_0, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Interface: sssd.DataProvider.Client */
+#define SBUS_IFACE_sssd_DataProvider_Client(methods, signals, properties) ({ \
+ sbus_interface("sssd.DataProvider.Client", NULL, \
+ (methods), (signals), (properties)); \
+})
+
+/* Method: sssd.DataProvider.Client.Register */
+#define SBUS_METHOD_SYNC_sssd_DataProvider_Client_Register(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data), const char *); \
+ sbus_method_sync("Register", \
+ &_sbus_sss_args_sssd_DataProvider_Client_Register, \
+ NULL, \
+ _sbus_sss_invoke_in_s_out__send, \
+ NULL, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_DataProvider_Client_Register(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data), const char *); \
+ SBUS_CHECK_RECV((handler_recv)); \
+ sbus_method_async("Register", \
+ &_sbus_sss_args_sssd_DataProvider_Client_Register, \
+ NULL, \
+ _sbus_sss_invoke_in_s_out__send, \
+ NULL, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Interface: sssd.DataProvider.Failover */
+#define SBUS_IFACE_sssd_DataProvider_Failover(methods, signals, properties) ({ \
+ sbus_interface("sssd.DataProvider.Failover", NULL, \
+ (methods), (signals), (properties)); \
+})
+
+/* Method: sssd.DataProvider.Failover.ActiveServer */
+#define SBUS_METHOD_SYNC_sssd_DataProvider_Failover_ActiveServer(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data), const char *, const char **); \
+ sbus_method_sync("ActiveServer", \
+ &_sbus_sss_args_sssd_DataProvider_Failover_ActiveServer, \
+ NULL, \
+ _sbus_sss_invoke_in_s_out_s_send, \
+ _sbus_sss_key_s_0, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_DataProvider_Failover_ActiveServer(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data), const char *); \
+ SBUS_CHECK_RECV((handler_recv), const char **); \
+ sbus_method_async("ActiveServer", \
+ &_sbus_sss_args_sssd_DataProvider_Failover_ActiveServer, \
+ NULL, \
+ _sbus_sss_invoke_in_s_out_s_send, \
+ _sbus_sss_key_s_0, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Method: sssd.DataProvider.Failover.ListServers */
+#define SBUS_METHOD_SYNC_sssd_DataProvider_Failover_ListServers(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data), const char *, const char ***); \
+ sbus_method_sync("ListServers", \
+ &_sbus_sss_args_sssd_DataProvider_Failover_ListServers, \
+ NULL, \
+ _sbus_sss_invoke_in_s_out_as_send, \
+ _sbus_sss_key_s_0, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_DataProvider_Failover_ListServers(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data), const char *); \
+ SBUS_CHECK_RECV((handler_recv), const char ***); \
+ sbus_method_async("ListServers", \
+ &_sbus_sss_args_sssd_DataProvider_Failover_ListServers, \
+ NULL, \
+ _sbus_sss_invoke_in_s_out_as_send, \
+ _sbus_sss_key_s_0, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Method: sssd.DataProvider.Failover.ListServices */
+#define SBUS_METHOD_SYNC_sssd_DataProvider_Failover_ListServices(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data), const char *, const char ***); \
+ sbus_method_sync("ListServices", \
+ &_sbus_sss_args_sssd_DataProvider_Failover_ListServices, \
+ NULL, \
+ _sbus_sss_invoke_in_s_out_as_send, \
+ _sbus_sss_key_s_0, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_DataProvider_Failover_ListServices(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data), const char *); \
+ SBUS_CHECK_RECV((handler_recv), const char ***); \
+ sbus_method_async("ListServices", \
+ &_sbus_sss_args_sssd_DataProvider_Failover_ListServices, \
+ NULL, \
+ _sbus_sss_invoke_in_s_out_as_send, \
+ _sbus_sss_key_s_0, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Interface: sssd.ProxyChild.Auth */
+#define SBUS_IFACE_sssd_ProxyChild_Auth(methods, signals, properties) ({ \
+ sbus_interface("sssd.ProxyChild.Auth", NULL, \
+ (methods), (signals), (properties)); \
+})
+
+/* Method: sssd.ProxyChild.Auth.PAM */
+#define SBUS_METHOD_SYNC_sssd_ProxyChild_Auth_PAM(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data), struct pam_data *, struct pam_data **); \
+ sbus_method_sync("PAM", \
+ &_sbus_sss_args_sssd_ProxyChild_Auth_PAM, \
+ NULL, \
+ _sbus_sss_invoke_in_pam_data_out_pam_response_send, \
+ NULL, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_ProxyChild_Auth_PAM(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data), struct pam_data *); \
+ SBUS_CHECK_RECV((handler_recv), struct pam_data **); \
+ sbus_method_async("PAM", \
+ &_sbus_sss_args_sssd_ProxyChild_Auth_PAM, \
+ NULL, \
+ _sbus_sss_invoke_in_pam_data_out_pam_response_send, \
+ NULL, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Interface: sssd.ProxyChild.Client */
+#define SBUS_IFACE_sssd_ProxyChild_Client(methods, signals, properties) ({ \
+ sbus_interface("sssd.ProxyChild.Client", NULL, \
+ (methods), (signals), (properties)); \
+})
+
+/* Method: sssd.ProxyChild.Client.Register */
+#define SBUS_METHOD_SYNC_sssd_ProxyChild_Client_Register(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data), uint32_t); \
+ sbus_method_sync("Register", \
+ &_sbus_sss_args_sssd_ProxyChild_Client_Register, \
+ NULL, \
+ _sbus_sss_invoke_in_u_out__send, \
+ NULL, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_ProxyChild_Client_Register(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data), uint32_t); \
+ SBUS_CHECK_RECV((handler_recv)); \
+ sbus_method_async("Register", \
+ &_sbus_sss_args_sssd_ProxyChild_Client_Register, \
+ NULL, \
+ _sbus_sss_invoke_in_u_out__send, \
+ NULL, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Interface: sssd.Responder.Domain */
+#define SBUS_IFACE_sssd_Responder_Domain(methods, signals, properties) ({ \
+ sbus_interface("sssd.Responder.Domain", NULL, \
+ (methods), (signals), (properties)); \
+})
+
+/* Method: sssd.Responder.Domain.SetActive */
+#define SBUS_METHOD_SYNC_sssd_Responder_Domain_SetActive(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data), const char *); \
+ sbus_method_sync("SetActive", \
+ &_sbus_sss_args_sssd_Responder_Domain_SetActive, \
+ NULL, \
+ _sbus_sss_invoke_in_s_out__send, \
+ _sbus_sss_key_s_0, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_Responder_Domain_SetActive(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data), const char *); \
+ SBUS_CHECK_RECV((handler_recv)); \
+ sbus_method_async("SetActive", \
+ &_sbus_sss_args_sssd_Responder_Domain_SetActive, \
+ NULL, \
+ _sbus_sss_invoke_in_s_out__send, \
+ _sbus_sss_key_s_0, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Method: sssd.Responder.Domain.SetInconsistent */
+#define SBUS_METHOD_SYNC_sssd_Responder_Domain_SetInconsistent(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data), const char *); \
+ sbus_method_sync("SetInconsistent", \
+ &_sbus_sss_args_sssd_Responder_Domain_SetInconsistent, \
+ NULL, \
+ _sbus_sss_invoke_in_s_out__send, \
+ _sbus_sss_key_s_0, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_Responder_Domain_SetInconsistent(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data), const char *); \
+ SBUS_CHECK_RECV((handler_recv)); \
+ sbus_method_async("SetInconsistent", \
+ &_sbus_sss_args_sssd_Responder_Domain_SetInconsistent, \
+ NULL, \
+ _sbus_sss_invoke_in_s_out__send, \
+ _sbus_sss_key_s_0, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Interface: sssd.Responder.NegativeCache */
+#define SBUS_IFACE_sssd_Responder_NegativeCache(methods, signals, properties) ({ \
+ sbus_interface("sssd.Responder.NegativeCache", NULL, \
+ (methods), (signals), (properties)); \
+})
+
+/* Method: sssd.Responder.NegativeCache.ResetGroups */
+#define SBUS_METHOD_SYNC_sssd_Responder_NegativeCache_ResetGroups(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data)); \
+ sbus_method_sync("ResetGroups", \
+ &_sbus_sss_args_sssd_Responder_NegativeCache_ResetGroups, \
+ NULL, \
+ _sbus_sss_invoke_in__out__send, \
+ _sbus_sss_key_, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_Responder_NegativeCache_ResetGroups(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data)); \
+ SBUS_CHECK_RECV((handler_recv)); \
+ sbus_method_async("ResetGroups", \
+ &_sbus_sss_args_sssd_Responder_NegativeCache_ResetGroups, \
+ NULL, \
+ _sbus_sss_invoke_in__out__send, \
+ _sbus_sss_key_, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Method: sssd.Responder.NegativeCache.ResetUsers */
+#define SBUS_METHOD_SYNC_sssd_Responder_NegativeCache_ResetUsers(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data)); \
+ sbus_method_sync("ResetUsers", \
+ &_sbus_sss_args_sssd_Responder_NegativeCache_ResetUsers, \
+ NULL, \
+ _sbus_sss_invoke_in__out__send, \
+ _sbus_sss_key_, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_Responder_NegativeCache_ResetUsers(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data)); \
+ SBUS_CHECK_RECV((handler_recv)); \
+ sbus_method_async("ResetUsers", \
+ &_sbus_sss_args_sssd_Responder_NegativeCache_ResetUsers, \
+ NULL, \
+ _sbus_sss_invoke_in__out__send, \
+ _sbus_sss_key_, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Interface: sssd.dataprovider */
+#define SBUS_IFACE_sssd_dataprovider(methods, signals, properties) ({ \
+ sbus_interface("sssd.dataprovider", NULL, \
+ (methods), (signals), (properties)); \
+})
+
+/* Method: sssd.dataprovider.getAccountDomain */
+#define SBUS_METHOD_SYNC_sssd_dataprovider_getAccountDomain(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data), uint32_t, uint32_t, const char *, uint32_t, uint16_t*, uint32_t*, const char **); \
+ sbus_method_sync("getAccountDomain", \
+ &_sbus_sss_args_sssd_dataprovider_getAccountDomain, \
+ NULL, \
+ _sbus_sss_invoke_in_uusu_out_qus_send, \
+ _sbus_sss_key_uusu_0_1_2, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_dataprovider_getAccountDomain(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data), uint32_t, uint32_t, const char *, uint32_t); \
+ SBUS_CHECK_RECV((handler_recv), uint16_t*, uint32_t*, const char **); \
+ sbus_method_async("getAccountDomain", \
+ &_sbus_sss_args_sssd_dataprovider_getAccountDomain, \
+ NULL, \
+ _sbus_sss_invoke_in_uusu_out_qus_send, \
+ _sbus_sss_key_uusu_0_1_2, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Method: sssd.dataprovider.getAccountInfo */
+#define SBUS_METHOD_SYNC_sssd_dataprovider_getAccountInfo(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data), uint32_t, uint32_t, const char *, const char *, const char *, uint32_t, uint16_t*, uint32_t*, const char **); \
+ sbus_method_sync("getAccountInfo", \
+ &_sbus_sss_args_sssd_dataprovider_getAccountInfo, \
+ NULL, \
+ _sbus_sss_invoke_in_uusssu_out_qus_send, \
+ _sbus_sss_key_uusssu_0_1_2_3_4, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_dataprovider_getAccountInfo(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data), uint32_t, uint32_t, const char *, const char *, const char *, uint32_t); \
+ SBUS_CHECK_RECV((handler_recv), uint16_t*, uint32_t*, const char **); \
+ sbus_method_async("getAccountInfo", \
+ &_sbus_sss_args_sssd_dataprovider_getAccountInfo, \
+ NULL, \
+ _sbus_sss_invoke_in_uusssu_out_qus_send, \
+ _sbus_sss_key_uusssu_0_1_2_3_4, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Method: sssd.dataprovider.getDomains */
+#define SBUS_METHOD_SYNC_sssd_dataprovider_getDomains(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data), const char *, uint16_t*, uint32_t*, const char **); \
+ sbus_method_sync("getDomains", \
+ &_sbus_sss_args_sssd_dataprovider_getDomains, \
+ NULL, \
+ _sbus_sss_invoke_in_s_out_qus_send, \
+ _sbus_sss_key_s_0, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_dataprovider_getDomains(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data), const char *); \
+ SBUS_CHECK_RECV((handler_recv), uint16_t*, uint32_t*, const char **); \
+ sbus_method_async("getDomains", \
+ &_sbus_sss_args_sssd_dataprovider_getDomains, \
+ NULL, \
+ _sbus_sss_invoke_in_s_out_qus_send, \
+ _sbus_sss_key_s_0, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Method: sssd.dataprovider.hostHandler */
+#define SBUS_METHOD_SYNC_sssd_dataprovider_hostHandler(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data), uint32_t, const char *, const char *, uint32_t, uint16_t*, uint32_t*, const char **); \
+ sbus_method_sync("hostHandler", \
+ &_sbus_sss_args_sssd_dataprovider_hostHandler, \
+ NULL, \
+ _sbus_sss_invoke_in_ussu_out_qus_send, \
+ _sbus_sss_key_ussu_0_1, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_dataprovider_hostHandler(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data), uint32_t, const char *, const char *, uint32_t); \
+ SBUS_CHECK_RECV((handler_recv), uint16_t*, uint32_t*, const char **); \
+ sbus_method_async("hostHandler", \
+ &_sbus_sss_args_sssd_dataprovider_hostHandler, \
+ NULL, \
+ _sbus_sss_invoke_in_ussu_out_qus_send, \
+ _sbus_sss_key_ussu_0_1, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Method: sssd.dataprovider.pamHandler */
+#define SBUS_METHOD_SYNC_sssd_dataprovider_pamHandler(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data), struct pam_data *, struct pam_data **); \
+ sbus_method_sync("pamHandler", \
+ &_sbus_sss_args_sssd_dataprovider_pamHandler, \
+ NULL, \
+ _sbus_sss_invoke_in_pam_data_out_pam_response_send, \
+ NULL, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_dataprovider_pamHandler(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data), struct pam_data *); \
+ SBUS_CHECK_RECV((handler_recv), struct pam_data **); \
+ sbus_method_async("pamHandler", \
+ &_sbus_sss_args_sssd_dataprovider_pamHandler, \
+ NULL, \
+ _sbus_sss_invoke_in_pam_data_out_pam_response_send, \
+ NULL, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Method: sssd.dataprovider.resolverHandler */
+#define SBUS_METHOD_SYNC_sssd_dataprovider_resolverHandler(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data), uint32_t, uint32_t, uint32_t, const char *, uint32_t, uint16_t*, uint32_t*, const char **); \
+ sbus_method_sync("resolverHandler", \
+ &_sbus_sss_args_sssd_dataprovider_resolverHandler, \
+ NULL, \
+ _sbus_sss_invoke_in_uuusu_out_qus_send, \
+ _sbus_sss_key_uuusu_0_1_2_3, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_dataprovider_resolverHandler(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data), uint32_t, uint32_t, uint32_t, const char *, uint32_t); \
+ SBUS_CHECK_RECV((handler_recv), uint16_t*, uint32_t*, const char **); \
+ sbus_method_async("resolverHandler", \
+ &_sbus_sss_args_sssd_dataprovider_resolverHandler, \
+ NULL, \
+ _sbus_sss_invoke_in_uuusu_out_qus_send, \
+ _sbus_sss_key_uuusu_0_1_2_3, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Method: sssd.dataprovider.sudoHandler */
+#define SBUS_METHOD_SYNC_sssd_dataprovider_sudoHandler(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data), DBusMessageIter *, uint16_t*, uint32_t*, const char **); \
+ sbus_method_sync("sudoHandler", \
+ &_sbus_sss_args_sssd_dataprovider_sudoHandler, \
+ NULL, \
+ _sbus_sss_invoke_in_raw_out_qus_send, \
+ NULL, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_dataprovider_sudoHandler(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data), DBusMessageIter *); \
+ SBUS_CHECK_RECV((handler_recv), uint16_t*, uint32_t*, const char **); \
+ sbus_method_async("sudoHandler", \
+ &_sbus_sss_args_sssd_dataprovider_sudoHandler, \
+ NULL, \
+ _sbus_sss_invoke_in_raw_out_qus_send, \
+ NULL, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Interface: sssd.monitor */
+#define SBUS_IFACE_sssd_monitor(methods, signals, properties) ({ \
+ sbus_interface("sssd.monitor", NULL, \
+ (methods), (signals), (properties)); \
+})
+
+/* Method: sssd.monitor.RegisterService */
+#define SBUS_METHOD_SYNC_sssd_monitor_RegisterService(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data), const char *, uint16_t, uint16_t, uint16_t*); \
+ sbus_method_sync("RegisterService", \
+ &_sbus_sss_args_sssd_monitor_RegisterService, \
+ NULL, \
+ _sbus_sss_invoke_in_sqq_out_q_send, \
+ NULL, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_monitor_RegisterService(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data), const char *, uint16_t, uint16_t); \
+ SBUS_CHECK_RECV((handler_recv), uint16_t*); \
+ sbus_method_async("RegisterService", \
+ &_sbus_sss_args_sssd_monitor_RegisterService, \
+ NULL, \
+ _sbus_sss_invoke_in_sqq_out_q_send, \
+ NULL, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Interface: sssd.nss.MemoryCache */
+#define SBUS_IFACE_sssd_nss_MemoryCache(methods, signals, properties) ({ \
+ sbus_interface("sssd.nss.MemoryCache", NULL, \
+ (methods), (signals), (properties)); \
+})
+
+/* Method: sssd.nss.MemoryCache.InvalidateAllGroups */
+#define SBUS_METHOD_SYNC_sssd_nss_MemoryCache_InvalidateAllGroups(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data)); \
+ sbus_method_sync("InvalidateAllGroups", \
+ &_sbus_sss_args_sssd_nss_MemoryCache_InvalidateAllGroups, \
+ NULL, \
+ _sbus_sss_invoke_in__out__send, \
+ _sbus_sss_key_, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_nss_MemoryCache_InvalidateAllGroups(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data)); \
+ SBUS_CHECK_RECV((handler_recv)); \
+ sbus_method_async("InvalidateAllGroups", \
+ &_sbus_sss_args_sssd_nss_MemoryCache_InvalidateAllGroups, \
+ NULL, \
+ _sbus_sss_invoke_in__out__send, \
+ _sbus_sss_key_, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Method: sssd.nss.MemoryCache.InvalidateAllInitgroups */
+#define SBUS_METHOD_SYNC_sssd_nss_MemoryCache_InvalidateAllInitgroups(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data)); \
+ sbus_method_sync("InvalidateAllInitgroups", \
+ &_sbus_sss_args_sssd_nss_MemoryCache_InvalidateAllInitgroups, \
+ NULL, \
+ _sbus_sss_invoke_in__out__send, \
+ _sbus_sss_key_, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_nss_MemoryCache_InvalidateAllInitgroups(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data)); \
+ SBUS_CHECK_RECV((handler_recv)); \
+ sbus_method_async("InvalidateAllInitgroups", \
+ &_sbus_sss_args_sssd_nss_MemoryCache_InvalidateAllInitgroups, \
+ NULL, \
+ _sbus_sss_invoke_in__out__send, \
+ _sbus_sss_key_, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Method: sssd.nss.MemoryCache.InvalidateAllUsers */
+#define SBUS_METHOD_SYNC_sssd_nss_MemoryCache_InvalidateAllUsers(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data)); \
+ sbus_method_sync("InvalidateAllUsers", \
+ &_sbus_sss_args_sssd_nss_MemoryCache_InvalidateAllUsers, \
+ NULL, \
+ _sbus_sss_invoke_in__out__send, \
+ _sbus_sss_key_, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_nss_MemoryCache_InvalidateAllUsers(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data)); \
+ SBUS_CHECK_RECV((handler_recv)); \
+ sbus_method_async("InvalidateAllUsers", \
+ &_sbus_sss_args_sssd_nss_MemoryCache_InvalidateAllUsers, \
+ NULL, \
+ _sbus_sss_invoke_in__out__send, \
+ _sbus_sss_key_, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Method: sssd.nss.MemoryCache.InvalidateGroupById */
+#define SBUS_METHOD_SYNC_sssd_nss_MemoryCache_InvalidateGroupById(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data), uint32_t); \
+ sbus_method_sync("InvalidateGroupById", \
+ &_sbus_sss_args_sssd_nss_MemoryCache_InvalidateGroupById, \
+ NULL, \
+ _sbus_sss_invoke_in_u_out__send, \
+ _sbus_sss_key_u_0, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_nss_MemoryCache_InvalidateGroupById(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data), uint32_t); \
+ SBUS_CHECK_RECV((handler_recv)); \
+ sbus_method_async("InvalidateGroupById", \
+ &_sbus_sss_args_sssd_nss_MemoryCache_InvalidateGroupById, \
+ NULL, \
+ _sbus_sss_invoke_in_u_out__send, \
+ _sbus_sss_key_u_0, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Method: sssd.nss.MemoryCache.UpdateInitgroups */
+#define SBUS_METHOD_SYNC_sssd_nss_MemoryCache_UpdateInitgroups(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data), const char *, const char *, uint32_t *); \
+ sbus_method_sync("UpdateInitgroups", \
+ &_sbus_sss_args_sssd_nss_MemoryCache_UpdateInitgroups, \
+ NULL, \
+ _sbus_sss_invoke_in_ssau_out__send, \
+ NULL, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_nss_MemoryCache_UpdateInitgroups(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data), const char *, const char *, uint32_t *); \
+ SBUS_CHECK_RECV((handler_recv)); \
+ sbus_method_async("UpdateInitgroups", \
+ &_sbus_sss_args_sssd_nss_MemoryCache_UpdateInitgroups, \
+ NULL, \
+ _sbus_sss_invoke_in_ssau_out__send, \
+ NULL, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Interface: sssd.service */
+#define SBUS_IFACE_sssd_service(methods, signals, properties) ({ \
+ sbus_interface("sssd.service", NULL, \
+ (methods), (signals), (properties)); \
+})
+
+/* Method: sssd.service.clearEnumCache */
+#define SBUS_METHOD_SYNC_sssd_service_clearEnumCache(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data)); \
+ sbus_method_sync("clearEnumCache", \
+ &_sbus_sss_args_sssd_service_clearEnumCache, \
+ NULL, \
+ _sbus_sss_invoke_in__out__send, \
+ NULL, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_service_clearEnumCache(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data)); \
+ SBUS_CHECK_RECV((handler_recv)); \
+ sbus_method_async("clearEnumCache", \
+ &_sbus_sss_args_sssd_service_clearEnumCache, \
+ NULL, \
+ _sbus_sss_invoke_in__out__send, \
+ NULL, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Method: sssd.service.clearMemcache */
+#define SBUS_METHOD_SYNC_sssd_service_clearMemcache(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data)); \
+ sbus_method_sync("clearMemcache", \
+ &_sbus_sss_args_sssd_service_clearMemcache, \
+ NULL, \
+ _sbus_sss_invoke_in__out__send, \
+ NULL, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_service_clearMemcache(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data)); \
+ SBUS_CHECK_RECV((handler_recv)); \
+ sbus_method_async("clearMemcache", \
+ &_sbus_sss_args_sssd_service_clearMemcache, \
+ NULL, \
+ _sbus_sss_invoke_in__out__send, \
+ NULL, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Method: sssd.service.clearNegcache */
+#define SBUS_METHOD_SYNC_sssd_service_clearNegcache(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data)); \
+ sbus_method_sync("clearNegcache", \
+ &_sbus_sss_args_sssd_service_clearNegcache, \
+ NULL, \
+ _sbus_sss_invoke_in__out__send, \
+ NULL, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_service_clearNegcache(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data)); \
+ SBUS_CHECK_RECV((handler_recv)); \
+ sbus_method_async("clearNegcache", \
+ &_sbus_sss_args_sssd_service_clearNegcache, \
+ NULL, \
+ _sbus_sss_invoke_in__out__send, \
+ NULL, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Method: sssd.service.goOffline */
+#define SBUS_METHOD_SYNC_sssd_service_goOffline(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data)); \
+ sbus_method_sync("goOffline", \
+ &_sbus_sss_args_sssd_service_goOffline, \
+ NULL, \
+ _sbus_sss_invoke_in__out__send, \
+ NULL, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_service_goOffline(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data)); \
+ SBUS_CHECK_RECV((handler_recv)); \
+ sbus_method_async("goOffline", \
+ &_sbus_sss_args_sssd_service_goOffline, \
+ NULL, \
+ _sbus_sss_invoke_in__out__send, \
+ NULL, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Method: sssd.service.resetOffline */
+#define SBUS_METHOD_SYNC_sssd_service_resetOffline(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data)); \
+ sbus_method_sync("resetOffline", \
+ &_sbus_sss_args_sssd_service_resetOffline, \
+ NULL, \
+ _sbus_sss_invoke_in__out__send, \
+ NULL, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_service_resetOffline(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data)); \
+ SBUS_CHECK_RECV((handler_recv)); \
+ sbus_method_async("resetOffline", \
+ &_sbus_sss_args_sssd_service_resetOffline, \
+ NULL, \
+ _sbus_sss_invoke_in__out__send, \
+ NULL, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Method: sssd.service.rotateLogs */
+#define SBUS_METHOD_SYNC_sssd_service_rotateLogs(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data)); \
+ sbus_method_sync("rotateLogs", \
+ &_sbus_sss_args_sssd_service_rotateLogs, \
+ NULL, \
+ _sbus_sss_invoke_in__out__send, \
+ NULL, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_service_rotateLogs(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data)); \
+ SBUS_CHECK_RECV((handler_recv)); \
+ sbus_method_async("rotateLogs", \
+ &_sbus_sss_args_sssd_service_rotateLogs, \
+ NULL, \
+ _sbus_sss_invoke_in__out__send, \
+ NULL, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Method: sssd.service.sysbusReconnect */
+#define SBUS_METHOD_SYNC_sssd_service_sysbusReconnect(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data)); \
+ sbus_method_sync("sysbusReconnect", \
+ &_sbus_sss_args_sssd_service_sysbusReconnect, \
+ NULL, \
+ _sbus_sss_invoke_in__out__send, \
+ NULL, \
+ (handler), (data)); \
+})
+
+#define SBUS_METHOD_ASYNC_sssd_service_sysbusReconnect(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data)); \
+ SBUS_CHECK_RECV((handler_recv)); \
+ sbus_method_async("sysbusReconnect", \
+ &_sbus_sss_args_sssd_service_sysbusReconnect, \
+ NULL, \
+ _sbus_sss_invoke_in__out__send, \
+ NULL, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+/* Property: sssd.service.debug_level */
+#define SBUS_GETTER_SYNC_sssd_service_debug_level(handler, data) ({ \
+ SBUS_CHECK_SYNC((handler), (data), uint32_t*); \
+ sbus_property_sync("debug_level", "u", SBUS_PROPERTY_READABLE, \
+ NULL, \
+ _sbus_sss_invoke_in__out_u_send, \
+ (handler), (data)); \
+})
+
+#define SBUS_GETTER_ASYNC_sssd_service_debug_level(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data)); \
+ SBUS_CHECK_RECV((handler_recv), uint32_t*); \
+ sbus_property_async("debug_level", "u", SBUS_PROPERTY_READABLE, \
+ NULL, \
+ _sbus_sss_invoke_in__out_u_send, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+#define SBUS_SETTER_SYNC_sssd_service_debug_level(handler, data) ({\
+ SBUS_CHECK_SYNC((handler), (data), uint32_t); \
+ sbus_property_sync("debug_level", "u", SBUS_PROPERTY_WRITABLE, \
+ NULL, \
+ _sbus_sss_invoke_in_u_out__send, \
+ (handler), (data)); \
+})
+
+#define SBUS_SETTER_ASYNC_sssd_service_debug_level(handler_send, handler_recv, data) ({ \
+ SBUS_CHECK_SEND((handler_send), (data), uint32_t); \
+ SBUS_CHECK_RECV((handler_recv)); \
+ sbus_property_async("debug_level", "u", SBUS_PROPERTY_WRITABLE, \
+ NULL, \
+ _sbus_sss_invoke_in_u_out__send, \
+ (handler_send), (handler_recv), (data)); \
+})
+
+#endif /* _SBUS_SSS_INTERFACE_H_ */
diff --git a/src/sss_iface/sbus_sss_invokers.c b/src/sss_iface/sbus_sss_invokers.c
new file mode 100644
index 0000000..ef03524
--- /dev/null
+++ b/src/sss_iface/sbus_sss_invokers.c
@@ -0,0 +1,3577 @@
+/*
+ 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 <http://www.gnu.org/licenses/>.
+*/
+
+#include <errno.h>
+#include <talloc.h>
+#include <tevent.h>
+#include <dbus/dbus.h>
+
+#include "sbus/sbus_private.h"
+#include "sbus/sbus_interface_declarations.h"
+#include "sss_iface/sbus_sss_arguments.h"
+#include "sss_iface/sbus_sss_invokers.h"
+
+static errno_t
+sbus_invoker_schedule(TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ void *handler,
+ void *private_data)
+{
+ /* Schedule invoker as a timed event so it is processed after other
+ * event types. This will give dispatcher a chance to catch more
+ * messages before this invoker is triggered and therefore it will
+ * allow to potentially chain more request into one, especially for
+ * synchronous handlers. */
+
+ struct tevent_timer *te;
+ struct timeval tv;
+
+ tv = tevent_timeval_current_ofs(0, 5);
+ te = tevent_add_timer(ev, mem_ctx, tv, handler, private_data);
+ if (te == NULL) {
+ /* There is not enough memory to create a timer. We can't do
+ * anything about it. */
+ DEBUG(SSSDBG_OP_FAILURE, "Could not add invoker event!\n");
+ return ENOMEM;
+ }
+
+ return EOK;
+}
+
+struct _sbus_sss_invoke_in__out__state {
+ struct {
+ enum sbus_handler_type type;
+ void *data;
+ errno_t (*sync)(TALLOC_CTX *, struct sbus_request *, void *);
+ struct tevent_req * (*send)(TALLOC_CTX *, struct tevent_context *, struct sbus_request *, void *);
+ errno_t (*recv)(TALLOC_CTX *, struct tevent_req *);
+ } handler;
+
+ struct sbus_request *sbus_req;
+ DBusMessageIter *read_iterator;
+ DBusMessageIter *write_iterator;
+};
+
+static void
+_sbus_sss_invoke_in__out__step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data);
+
+static void
+_sbus_sss_invoke_in__out__done
+ (struct tevent_req *subreq);
+
+struct tevent_req *
+_sbus_sss_invoke_in__out__send
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct sbus_request *sbus_req,
+ sbus_invoker_keygen keygen,
+ const struct sbus_handler *handler,
+ DBusMessageIter *read_iterator,
+ DBusMessageIter *write_iterator,
+ const char **_key)
+{
+ struct _sbus_sss_invoke_in__out__state *state;
+ struct tevent_req *req;
+ const char *key;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct _sbus_sss_invoke_in__out__state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->handler.type = handler->type;
+ state->handler.data = handler->data;
+ state->handler.sync = handler->sync;
+ state->handler.send = handler->async_send;
+ state->handler.recv = handler->async_recv;
+
+ state->sbus_req = sbus_req;
+ state->read_iterator = read_iterator;
+ state->write_iterator = write_iterator;
+
+ ret = sbus_invoker_schedule(state, ev, _sbus_sss_invoke_in__out__step, req);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_request_key(state, keygen, sbus_req, NULL, &key);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ if (_key != NULL) {
+ *_key = talloc_steal(mem_ctx, key);
+ }
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, ev);
+ }
+
+ return req;
+}
+
+static void _sbus_sss_invoke_in__out__step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data)
+{
+ struct _sbus_sss_invoke_in__out__state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = talloc_get_type(private_data, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in__out__state);
+
+ switch (state->handler.type) {
+ case SBUS_HANDLER_SYNC:
+ if (state->handler.sync == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: sync handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ ret = state->handler.sync(state, state->sbus_req, state->handler.data);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ goto done;
+ case SBUS_HANDLER_ASYNC:
+ if (state->handler.send == NULL || state->handler.recv == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: async handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ subreq = state->handler.send(state, ev, state->sbus_req, state->handler.data);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, _sbus_sss_invoke_in__out__done, req);
+ ret = EAGAIN;
+ goto done;
+ }
+
+ ret = ERR_INTERNAL;
+
+done:
+ if (ret == EOK) {
+ tevent_req_done(req);
+ } else if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ }
+}
+
+static void _sbus_sss_invoke_in__out__done(struct tevent_req *subreq)
+{
+ struct _sbus_sss_invoke_in__out__state *state;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in__out__state);
+
+ ret = state->handler.recv(state, subreq);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+struct _sbus_sss_invoke_in__out_u_state {
+ struct _sbus_sss_invoker_args_u out;
+ struct {
+ enum sbus_handler_type type;
+ void *data;
+ errno_t (*sync)(TALLOC_CTX *, struct sbus_request *, void *, uint32_t*);
+ struct tevent_req * (*send)(TALLOC_CTX *, struct tevent_context *, struct sbus_request *, void *);
+ errno_t (*recv)(TALLOC_CTX *, struct tevent_req *, uint32_t*);
+ } handler;
+
+ struct sbus_request *sbus_req;
+ DBusMessageIter *read_iterator;
+ DBusMessageIter *write_iterator;
+};
+
+static void
+_sbus_sss_invoke_in__out_u_step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data);
+
+static void
+_sbus_sss_invoke_in__out_u_done
+ (struct tevent_req *subreq);
+
+struct tevent_req *
+_sbus_sss_invoke_in__out_u_send
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct sbus_request *sbus_req,
+ sbus_invoker_keygen keygen,
+ const struct sbus_handler *handler,
+ DBusMessageIter *read_iterator,
+ DBusMessageIter *write_iterator,
+ const char **_key)
+{
+ struct _sbus_sss_invoke_in__out_u_state *state;
+ struct tevent_req *req;
+ const char *key;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct _sbus_sss_invoke_in__out_u_state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->handler.type = handler->type;
+ state->handler.data = handler->data;
+ state->handler.sync = handler->sync;
+ state->handler.send = handler->async_send;
+ state->handler.recv = handler->async_recv;
+
+ state->sbus_req = sbus_req;
+ state->read_iterator = read_iterator;
+ state->write_iterator = write_iterator;
+
+ ret = sbus_invoker_schedule(state, ev, _sbus_sss_invoke_in__out_u_step, req);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_request_key(state, keygen, sbus_req, NULL, &key);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ if (_key != NULL) {
+ *_key = talloc_steal(mem_ctx, key);
+ }
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, ev);
+ }
+
+ return req;
+}
+
+static void _sbus_sss_invoke_in__out_u_step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data)
+{
+ struct _sbus_sss_invoke_in__out_u_state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = talloc_get_type(private_data, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in__out_u_state);
+
+ switch (state->handler.type) {
+ case SBUS_HANDLER_SYNC:
+ if (state->handler.sync == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: sync handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ ret = state->handler.sync(state, state->sbus_req, state->handler.data, &state->out.arg0);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_write_u(state->write_iterator, &state->out);
+ goto done;
+ case SBUS_HANDLER_ASYNC:
+ if (state->handler.send == NULL || state->handler.recv == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: async handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ subreq = state->handler.send(state, ev, state->sbus_req, state->handler.data);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, _sbus_sss_invoke_in__out_u_done, req);
+ ret = EAGAIN;
+ goto done;
+ }
+
+ ret = ERR_INTERNAL;
+
+done:
+ if (ret == EOK) {
+ tevent_req_done(req);
+ } else if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ }
+}
+
+static void _sbus_sss_invoke_in__out_u_done(struct tevent_req *subreq)
+{
+ struct _sbus_sss_invoke_in__out_u_state *state;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in__out_u_state);
+
+ ret = state->handler.recv(state, subreq, &state->out.arg0);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ ret = _sbus_sss_invoker_write_u(state->write_iterator, &state->out);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+struct _sbus_sss_invoke_in_pam_data_out_pam_response_state {
+ struct _sbus_sss_invoker_args_pam_data *in;
+ struct _sbus_sss_invoker_args_pam_response out;
+ struct {
+ enum sbus_handler_type type;
+ void *data;
+ errno_t (*sync)(TALLOC_CTX *, struct sbus_request *, void *, struct pam_data *, struct pam_data **);
+ struct tevent_req * (*send)(TALLOC_CTX *, struct tevent_context *, struct sbus_request *, void *, struct pam_data *);
+ errno_t (*recv)(TALLOC_CTX *, struct tevent_req *, struct pam_data **);
+ } handler;
+
+ struct sbus_request *sbus_req;
+ DBusMessageIter *read_iterator;
+ DBusMessageIter *write_iterator;
+};
+
+static void
+_sbus_sss_invoke_in_pam_data_out_pam_response_step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data);
+
+static void
+_sbus_sss_invoke_in_pam_data_out_pam_response_done
+ (struct tevent_req *subreq);
+
+struct tevent_req *
+_sbus_sss_invoke_in_pam_data_out_pam_response_send
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct sbus_request *sbus_req,
+ sbus_invoker_keygen keygen,
+ const struct sbus_handler *handler,
+ DBusMessageIter *read_iterator,
+ DBusMessageIter *write_iterator,
+ const char **_key)
+{
+ struct _sbus_sss_invoke_in_pam_data_out_pam_response_state *state;
+ struct tevent_req *req;
+ const char *key;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct _sbus_sss_invoke_in_pam_data_out_pam_response_state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->handler.type = handler->type;
+ state->handler.data = handler->data;
+ state->handler.sync = handler->sync;
+ state->handler.send = handler->async_send;
+ state->handler.recv = handler->async_recv;
+
+ state->sbus_req = sbus_req;
+ state->read_iterator = read_iterator;
+ state->write_iterator = write_iterator;
+
+ state->in = talloc_zero(state, struct _sbus_sss_invoker_args_pam_data);
+ if (state->in == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Unable to allocate space for input parameters!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_read_pam_data(state, read_iterator, state->in);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_invoker_schedule(state, ev, _sbus_sss_invoke_in_pam_data_out_pam_response_step, req);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_request_key(state, keygen, sbus_req, state->in, &key);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ if (_key != NULL) {
+ *_key = talloc_steal(mem_ctx, key);
+ }
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, ev);
+ }
+
+ return req;
+}
+
+static void _sbus_sss_invoke_in_pam_data_out_pam_response_step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data)
+{
+ struct _sbus_sss_invoke_in_pam_data_out_pam_response_state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = talloc_get_type(private_data, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_pam_data_out_pam_response_state);
+
+ switch (state->handler.type) {
+ case SBUS_HANDLER_SYNC:
+ if (state->handler.sync == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: sync handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ ret = state->handler.sync(state, state->sbus_req, state->handler.data, state->in->arg0, &state->out.arg0);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_write_pam_response(state->write_iterator, &state->out);
+ goto done;
+ case SBUS_HANDLER_ASYNC:
+ if (state->handler.send == NULL || state->handler.recv == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: async handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ subreq = state->handler.send(state, ev, state->sbus_req, state->handler.data, state->in->arg0);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, _sbus_sss_invoke_in_pam_data_out_pam_response_done, req);
+ ret = EAGAIN;
+ goto done;
+ }
+
+ ret = ERR_INTERNAL;
+
+done:
+ if (ret == EOK) {
+ tevent_req_done(req);
+ } else if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ }
+}
+
+static void _sbus_sss_invoke_in_pam_data_out_pam_response_done(struct tevent_req *subreq)
+{
+ struct _sbus_sss_invoke_in_pam_data_out_pam_response_state *state;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_pam_data_out_pam_response_state);
+
+ ret = state->handler.recv(state, subreq, &state->out.arg0);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ ret = _sbus_sss_invoker_write_pam_response(state->write_iterator, &state->out);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+struct _sbus_sss_invoke_in_raw_out_qus_state {
+ struct _sbus_sss_invoker_args_qus out;
+ struct {
+ enum sbus_handler_type type;
+ void *data;
+ errno_t (*sync)(TALLOC_CTX *, struct sbus_request *, void *, DBusMessageIter *, uint16_t*, uint32_t*, const char **);
+ struct tevent_req * (*send)(TALLOC_CTX *, struct tevent_context *, struct sbus_request *, void *, DBusMessageIter *);
+ errno_t (*recv)(TALLOC_CTX *, struct tevent_req *, uint16_t*, uint32_t*, const char **);
+ } handler;
+
+ struct sbus_request *sbus_req;
+ DBusMessageIter *read_iterator;
+ DBusMessageIter *write_iterator;
+};
+
+static void
+_sbus_sss_invoke_in_raw_out_qus_step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data);
+
+static void
+_sbus_sss_invoke_in_raw_out_qus_done
+ (struct tevent_req *subreq);
+
+struct tevent_req *
+_sbus_sss_invoke_in_raw_out_qus_send
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct sbus_request *sbus_req,
+ sbus_invoker_keygen keygen,
+ const struct sbus_handler *handler,
+ DBusMessageIter *read_iterator,
+ DBusMessageIter *write_iterator,
+ const char **_key)
+{
+ struct _sbus_sss_invoke_in_raw_out_qus_state *state;
+ struct tevent_req *req;
+ const char *key;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct _sbus_sss_invoke_in_raw_out_qus_state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->handler.type = handler->type;
+ state->handler.data = handler->data;
+ state->handler.sync = handler->sync;
+ state->handler.send = handler->async_send;
+ state->handler.recv = handler->async_recv;
+
+ state->sbus_req = sbus_req;
+ state->read_iterator = read_iterator;
+ state->write_iterator = write_iterator;
+
+ ret = sbus_invoker_schedule(state, ev, _sbus_sss_invoke_in_raw_out_qus_step, req);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_request_key(state, keygen, sbus_req, NULL, &key);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ if (_key != NULL) {
+ *_key = talloc_steal(mem_ctx, key);
+ }
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, ev);
+ }
+
+ return req;
+}
+
+static void _sbus_sss_invoke_in_raw_out_qus_step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data)
+{
+ struct _sbus_sss_invoke_in_raw_out_qus_state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = talloc_get_type(private_data, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_raw_out_qus_state);
+
+ switch (state->handler.type) {
+ case SBUS_HANDLER_SYNC:
+ if (state->handler.sync == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: sync handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ ret = state->handler.sync(state, state->sbus_req, state->handler.data, state->read_iterator, &state->out.arg0, &state->out.arg1, &state->out.arg2);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_write_qus(state->write_iterator, &state->out);
+ goto done;
+ case SBUS_HANDLER_ASYNC:
+ if (state->handler.send == NULL || state->handler.recv == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: async handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ subreq = state->handler.send(state, ev, state->sbus_req, state->handler.data, state->read_iterator);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, _sbus_sss_invoke_in_raw_out_qus_done, req);
+ ret = EAGAIN;
+ goto done;
+ }
+
+ ret = ERR_INTERNAL;
+
+done:
+ if (ret == EOK) {
+ tevent_req_done(req);
+ } else if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ }
+}
+
+static void _sbus_sss_invoke_in_raw_out_qus_done(struct tevent_req *subreq)
+{
+ struct _sbus_sss_invoke_in_raw_out_qus_state *state;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_raw_out_qus_state);
+
+ ret = state->handler.recv(state, subreq, &state->out.arg0, &state->out.arg1, &state->out.arg2);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ ret = _sbus_sss_invoker_write_qus(state->write_iterator, &state->out);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+struct _sbus_sss_invoke_in_s_out__state {
+ struct _sbus_sss_invoker_args_s *in;
+ struct {
+ enum sbus_handler_type type;
+ void *data;
+ errno_t (*sync)(TALLOC_CTX *, struct sbus_request *, void *, const char *);
+ struct tevent_req * (*send)(TALLOC_CTX *, struct tevent_context *, struct sbus_request *, void *, const char *);
+ errno_t (*recv)(TALLOC_CTX *, struct tevent_req *);
+ } handler;
+
+ struct sbus_request *sbus_req;
+ DBusMessageIter *read_iterator;
+ DBusMessageIter *write_iterator;
+};
+
+static void
+_sbus_sss_invoke_in_s_out__step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data);
+
+static void
+_sbus_sss_invoke_in_s_out__done
+ (struct tevent_req *subreq);
+
+struct tevent_req *
+_sbus_sss_invoke_in_s_out__send
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct sbus_request *sbus_req,
+ sbus_invoker_keygen keygen,
+ const struct sbus_handler *handler,
+ DBusMessageIter *read_iterator,
+ DBusMessageIter *write_iterator,
+ const char **_key)
+{
+ struct _sbus_sss_invoke_in_s_out__state *state;
+ struct tevent_req *req;
+ const char *key;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct _sbus_sss_invoke_in_s_out__state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->handler.type = handler->type;
+ state->handler.data = handler->data;
+ state->handler.sync = handler->sync;
+ state->handler.send = handler->async_send;
+ state->handler.recv = handler->async_recv;
+
+ state->sbus_req = sbus_req;
+ state->read_iterator = read_iterator;
+ state->write_iterator = write_iterator;
+
+ state->in = talloc_zero(state, struct _sbus_sss_invoker_args_s);
+ if (state->in == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Unable to allocate space for input parameters!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_read_s(state, read_iterator, state->in);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_invoker_schedule(state, ev, _sbus_sss_invoke_in_s_out__step, req);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_request_key(state, keygen, sbus_req, state->in, &key);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ if (_key != NULL) {
+ *_key = talloc_steal(mem_ctx, key);
+ }
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, ev);
+ }
+
+ return req;
+}
+
+static void _sbus_sss_invoke_in_s_out__step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data)
+{
+ struct _sbus_sss_invoke_in_s_out__state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = talloc_get_type(private_data, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_s_out__state);
+
+ switch (state->handler.type) {
+ case SBUS_HANDLER_SYNC:
+ if (state->handler.sync == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: sync handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ ret = state->handler.sync(state, state->sbus_req, state->handler.data, state->in->arg0);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ goto done;
+ case SBUS_HANDLER_ASYNC:
+ if (state->handler.send == NULL || state->handler.recv == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: async handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ subreq = state->handler.send(state, ev, state->sbus_req, state->handler.data, state->in->arg0);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, _sbus_sss_invoke_in_s_out__done, req);
+ ret = EAGAIN;
+ goto done;
+ }
+
+ ret = ERR_INTERNAL;
+
+done:
+ if (ret == EOK) {
+ tevent_req_done(req);
+ } else if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ }
+}
+
+static void _sbus_sss_invoke_in_s_out__done(struct tevent_req *subreq)
+{
+ struct _sbus_sss_invoke_in_s_out__state *state;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_s_out__state);
+
+ ret = state->handler.recv(state, subreq);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+struct _sbus_sss_invoke_in_s_out_as_state {
+ struct _sbus_sss_invoker_args_s *in;
+ struct _sbus_sss_invoker_args_as out;
+ struct {
+ enum sbus_handler_type type;
+ void *data;
+ errno_t (*sync)(TALLOC_CTX *, struct sbus_request *, void *, const char *, const char ***);
+ struct tevent_req * (*send)(TALLOC_CTX *, struct tevent_context *, struct sbus_request *, void *, const char *);
+ errno_t (*recv)(TALLOC_CTX *, struct tevent_req *, const char ***);
+ } handler;
+
+ struct sbus_request *sbus_req;
+ DBusMessageIter *read_iterator;
+ DBusMessageIter *write_iterator;
+};
+
+static void
+_sbus_sss_invoke_in_s_out_as_step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data);
+
+static void
+_sbus_sss_invoke_in_s_out_as_done
+ (struct tevent_req *subreq);
+
+struct tevent_req *
+_sbus_sss_invoke_in_s_out_as_send
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct sbus_request *sbus_req,
+ sbus_invoker_keygen keygen,
+ const struct sbus_handler *handler,
+ DBusMessageIter *read_iterator,
+ DBusMessageIter *write_iterator,
+ const char **_key)
+{
+ struct _sbus_sss_invoke_in_s_out_as_state *state;
+ struct tevent_req *req;
+ const char *key;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct _sbus_sss_invoke_in_s_out_as_state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->handler.type = handler->type;
+ state->handler.data = handler->data;
+ state->handler.sync = handler->sync;
+ state->handler.send = handler->async_send;
+ state->handler.recv = handler->async_recv;
+
+ state->sbus_req = sbus_req;
+ state->read_iterator = read_iterator;
+ state->write_iterator = write_iterator;
+
+ state->in = talloc_zero(state, struct _sbus_sss_invoker_args_s);
+ if (state->in == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Unable to allocate space for input parameters!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_read_s(state, read_iterator, state->in);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_invoker_schedule(state, ev, _sbus_sss_invoke_in_s_out_as_step, req);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_request_key(state, keygen, sbus_req, state->in, &key);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ if (_key != NULL) {
+ *_key = talloc_steal(mem_ctx, key);
+ }
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, ev);
+ }
+
+ return req;
+}
+
+static void _sbus_sss_invoke_in_s_out_as_step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data)
+{
+ struct _sbus_sss_invoke_in_s_out_as_state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = talloc_get_type(private_data, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_s_out_as_state);
+
+ switch (state->handler.type) {
+ case SBUS_HANDLER_SYNC:
+ if (state->handler.sync == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: sync handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ ret = state->handler.sync(state, state->sbus_req, state->handler.data, state->in->arg0, &state->out.arg0);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_write_as(state->write_iterator, &state->out);
+ goto done;
+ case SBUS_HANDLER_ASYNC:
+ if (state->handler.send == NULL || state->handler.recv == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: async handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ subreq = state->handler.send(state, ev, state->sbus_req, state->handler.data, state->in->arg0);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, _sbus_sss_invoke_in_s_out_as_done, req);
+ ret = EAGAIN;
+ goto done;
+ }
+
+ ret = ERR_INTERNAL;
+
+done:
+ if (ret == EOK) {
+ tevent_req_done(req);
+ } else if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ }
+}
+
+static void _sbus_sss_invoke_in_s_out_as_done(struct tevent_req *subreq)
+{
+ struct _sbus_sss_invoke_in_s_out_as_state *state;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_s_out_as_state);
+
+ ret = state->handler.recv(state, subreq, &state->out.arg0);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ ret = _sbus_sss_invoker_write_as(state->write_iterator, &state->out);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+struct _sbus_sss_invoke_in_s_out_b_state {
+ struct _sbus_sss_invoker_args_s *in;
+ struct _sbus_sss_invoker_args_b out;
+ struct {
+ enum sbus_handler_type type;
+ void *data;
+ errno_t (*sync)(TALLOC_CTX *, struct sbus_request *, void *, const char *, bool*);
+ struct tevent_req * (*send)(TALLOC_CTX *, struct tevent_context *, struct sbus_request *, void *, const char *);
+ errno_t (*recv)(TALLOC_CTX *, struct tevent_req *, bool*);
+ } handler;
+
+ struct sbus_request *sbus_req;
+ DBusMessageIter *read_iterator;
+ DBusMessageIter *write_iterator;
+};
+
+static void
+_sbus_sss_invoke_in_s_out_b_step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data);
+
+static void
+_sbus_sss_invoke_in_s_out_b_done
+ (struct tevent_req *subreq);
+
+struct tevent_req *
+_sbus_sss_invoke_in_s_out_b_send
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct sbus_request *sbus_req,
+ sbus_invoker_keygen keygen,
+ const struct sbus_handler *handler,
+ DBusMessageIter *read_iterator,
+ DBusMessageIter *write_iterator,
+ const char **_key)
+{
+ struct _sbus_sss_invoke_in_s_out_b_state *state;
+ struct tevent_req *req;
+ const char *key;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct _sbus_sss_invoke_in_s_out_b_state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->handler.type = handler->type;
+ state->handler.data = handler->data;
+ state->handler.sync = handler->sync;
+ state->handler.send = handler->async_send;
+ state->handler.recv = handler->async_recv;
+
+ state->sbus_req = sbus_req;
+ state->read_iterator = read_iterator;
+ state->write_iterator = write_iterator;
+
+ state->in = talloc_zero(state, struct _sbus_sss_invoker_args_s);
+ if (state->in == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Unable to allocate space for input parameters!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_read_s(state, read_iterator, state->in);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_invoker_schedule(state, ev, _sbus_sss_invoke_in_s_out_b_step, req);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_request_key(state, keygen, sbus_req, state->in, &key);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ if (_key != NULL) {
+ *_key = talloc_steal(mem_ctx, key);
+ }
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, ev);
+ }
+
+ return req;
+}
+
+static void _sbus_sss_invoke_in_s_out_b_step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data)
+{
+ struct _sbus_sss_invoke_in_s_out_b_state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = talloc_get_type(private_data, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_s_out_b_state);
+
+ switch (state->handler.type) {
+ case SBUS_HANDLER_SYNC:
+ if (state->handler.sync == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: sync handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ ret = state->handler.sync(state, state->sbus_req, state->handler.data, state->in->arg0, &state->out.arg0);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_write_b(state->write_iterator, &state->out);
+ goto done;
+ case SBUS_HANDLER_ASYNC:
+ if (state->handler.send == NULL || state->handler.recv == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: async handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ subreq = state->handler.send(state, ev, state->sbus_req, state->handler.data, state->in->arg0);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, _sbus_sss_invoke_in_s_out_b_done, req);
+ ret = EAGAIN;
+ goto done;
+ }
+
+ ret = ERR_INTERNAL;
+
+done:
+ if (ret == EOK) {
+ tevent_req_done(req);
+ } else if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ }
+}
+
+static void _sbus_sss_invoke_in_s_out_b_done(struct tevent_req *subreq)
+{
+ struct _sbus_sss_invoke_in_s_out_b_state *state;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_s_out_b_state);
+
+ ret = state->handler.recv(state, subreq, &state->out.arg0);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ ret = _sbus_sss_invoker_write_b(state->write_iterator, &state->out);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+struct _sbus_sss_invoke_in_s_out_qus_state {
+ struct _sbus_sss_invoker_args_s *in;
+ struct _sbus_sss_invoker_args_qus out;
+ struct {
+ enum sbus_handler_type type;
+ void *data;
+ errno_t (*sync)(TALLOC_CTX *, struct sbus_request *, void *, const char *, uint16_t*, uint32_t*, const char **);
+ struct tevent_req * (*send)(TALLOC_CTX *, struct tevent_context *, struct sbus_request *, void *, const char *);
+ errno_t (*recv)(TALLOC_CTX *, struct tevent_req *, uint16_t*, uint32_t*, const char **);
+ } handler;
+
+ struct sbus_request *sbus_req;
+ DBusMessageIter *read_iterator;
+ DBusMessageIter *write_iterator;
+};
+
+static void
+_sbus_sss_invoke_in_s_out_qus_step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data);
+
+static void
+_sbus_sss_invoke_in_s_out_qus_done
+ (struct tevent_req *subreq);
+
+struct tevent_req *
+_sbus_sss_invoke_in_s_out_qus_send
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct sbus_request *sbus_req,
+ sbus_invoker_keygen keygen,
+ const struct sbus_handler *handler,
+ DBusMessageIter *read_iterator,
+ DBusMessageIter *write_iterator,
+ const char **_key)
+{
+ struct _sbus_sss_invoke_in_s_out_qus_state *state;
+ struct tevent_req *req;
+ const char *key;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct _sbus_sss_invoke_in_s_out_qus_state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->handler.type = handler->type;
+ state->handler.data = handler->data;
+ state->handler.sync = handler->sync;
+ state->handler.send = handler->async_send;
+ state->handler.recv = handler->async_recv;
+
+ state->sbus_req = sbus_req;
+ state->read_iterator = read_iterator;
+ state->write_iterator = write_iterator;
+
+ state->in = talloc_zero(state, struct _sbus_sss_invoker_args_s);
+ if (state->in == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Unable to allocate space for input parameters!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_read_s(state, read_iterator, state->in);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_invoker_schedule(state, ev, _sbus_sss_invoke_in_s_out_qus_step, req);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_request_key(state, keygen, sbus_req, state->in, &key);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ if (_key != NULL) {
+ *_key = talloc_steal(mem_ctx, key);
+ }
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, ev);
+ }
+
+ return req;
+}
+
+static void _sbus_sss_invoke_in_s_out_qus_step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data)
+{
+ struct _sbus_sss_invoke_in_s_out_qus_state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = talloc_get_type(private_data, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_s_out_qus_state);
+
+ switch (state->handler.type) {
+ case SBUS_HANDLER_SYNC:
+ if (state->handler.sync == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: sync handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ ret = state->handler.sync(state, state->sbus_req, state->handler.data, state->in->arg0, &state->out.arg0, &state->out.arg1, &state->out.arg2);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_write_qus(state->write_iterator, &state->out);
+ goto done;
+ case SBUS_HANDLER_ASYNC:
+ if (state->handler.send == NULL || state->handler.recv == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: async handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ subreq = state->handler.send(state, ev, state->sbus_req, state->handler.data, state->in->arg0);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, _sbus_sss_invoke_in_s_out_qus_done, req);
+ ret = EAGAIN;
+ goto done;
+ }
+
+ ret = ERR_INTERNAL;
+
+done:
+ if (ret == EOK) {
+ tevent_req_done(req);
+ } else if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ }
+}
+
+static void _sbus_sss_invoke_in_s_out_qus_done(struct tevent_req *subreq)
+{
+ struct _sbus_sss_invoke_in_s_out_qus_state *state;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_s_out_qus_state);
+
+ ret = state->handler.recv(state, subreq, &state->out.arg0, &state->out.arg1, &state->out.arg2);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ ret = _sbus_sss_invoker_write_qus(state->write_iterator, &state->out);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+struct _sbus_sss_invoke_in_s_out_s_state {
+ struct _sbus_sss_invoker_args_s *in;
+ struct _sbus_sss_invoker_args_s out;
+ struct {
+ enum sbus_handler_type type;
+ void *data;
+ errno_t (*sync)(TALLOC_CTX *, struct sbus_request *, void *, const char *, const char **);
+ struct tevent_req * (*send)(TALLOC_CTX *, struct tevent_context *, struct sbus_request *, void *, const char *);
+ errno_t (*recv)(TALLOC_CTX *, struct tevent_req *, const char **);
+ } handler;
+
+ struct sbus_request *sbus_req;
+ DBusMessageIter *read_iterator;
+ DBusMessageIter *write_iterator;
+};
+
+static void
+_sbus_sss_invoke_in_s_out_s_step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data);
+
+static void
+_sbus_sss_invoke_in_s_out_s_done
+ (struct tevent_req *subreq);
+
+struct tevent_req *
+_sbus_sss_invoke_in_s_out_s_send
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct sbus_request *sbus_req,
+ sbus_invoker_keygen keygen,
+ const struct sbus_handler *handler,
+ DBusMessageIter *read_iterator,
+ DBusMessageIter *write_iterator,
+ const char **_key)
+{
+ struct _sbus_sss_invoke_in_s_out_s_state *state;
+ struct tevent_req *req;
+ const char *key;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct _sbus_sss_invoke_in_s_out_s_state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->handler.type = handler->type;
+ state->handler.data = handler->data;
+ state->handler.sync = handler->sync;
+ state->handler.send = handler->async_send;
+ state->handler.recv = handler->async_recv;
+
+ state->sbus_req = sbus_req;
+ state->read_iterator = read_iterator;
+ state->write_iterator = write_iterator;
+
+ state->in = talloc_zero(state, struct _sbus_sss_invoker_args_s);
+ if (state->in == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Unable to allocate space for input parameters!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_read_s(state, read_iterator, state->in);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_invoker_schedule(state, ev, _sbus_sss_invoke_in_s_out_s_step, req);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_request_key(state, keygen, sbus_req, state->in, &key);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ if (_key != NULL) {
+ *_key = talloc_steal(mem_ctx, key);
+ }
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, ev);
+ }
+
+ return req;
+}
+
+static void _sbus_sss_invoke_in_s_out_s_step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data)
+{
+ struct _sbus_sss_invoke_in_s_out_s_state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = talloc_get_type(private_data, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_s_out_s_state);
+
+ switch (state->handler.type) {
+ case SBUS_HANDLER_SYNC:
+ if (state->handler.sync == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: sync handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ ret = state->handler.sync(state, state->sbus_req, state->handler.data, state->in->arg0, &state->out.arg0);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_write_s(state->write_iterator, &state->out);
+ goto done;
+ case SBUS_HANDLER_ASYNC:
+ if (state->handler.send == NULL || state->handler.recv == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: async handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ subreq = state->handler.send(state, ev, state->sbus_req, state->handler.data, state->in->arg0);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, _sbus_sss_invoke_in_s_out_s_done, req);
+ ret = EAGAIN;
+ goto done;
+ }
+
+ ret = ERR_INTERNAL;
+
+done:
+ if (ret == EOK) {
+ tevent_req_done(req);
+ } else if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ }
+}
+
+static void _sbus_sss_invoke_in_s_out_s_done(struct tevent_req *subreq)
+{
+ struct _sbus_sss_invoke_in_s_out_s_state *state;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_s_out_s_state);
+
+ ret = state->handler.recv(state, subreq, &state->out.arg0);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ ret = _sbus_sss_invoker_write_s(state->write_iterator, &state->out);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+struct _sbus_sss_invoke_in_sqq_out_q_state {
+ struct _sbus_sss_invoker_args_sqq *in;
+ struct _sbus_sss_invoker_args_q out;
+ struct {
+ enum sbus_handler_type type;
+ void *data;
+ errno_t (*sync)(TALLOC_CTX *, struct sbus_request *, void *, const char *, uint16_t, uint16_t, uint16_t*);
+ struct tevent_req * (*send)(TALLOC_CTX *, struct tevent_context *, struct sbus_request *, void *, const char *, uint16_t, uint16_t);
+ errno_t (*recv)(TALLOC_CTX *, struct tevent_req *, uint16_t*);
+ } handler;
+
+ struct sbus_request *sbus_req;
+ DBusMessageIter *read_iterator;
+ DBusMessageIter *write_iterator;
+};
+
+static void
+_sbus_sss_invoke_in_sqq_out_q_step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data);
+
+static void
+_sbus_sss_invoke_in_sqq_out_q_done
+ (struct tevent_req *subreq);
+
+struct tevent_req *
+_sbus_sss_invoke_in_sqq_out_q_send
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct sbus_request *sbus_req,
+ sbus_invoker_keygen keygen,
+ const struct sbus_handler *handler,
+ DBusMessageIter *read_iterator,
+ DBusMessageIter *write_iterator,
+ const char **_key)
+{
+ struct _sbus_sss_invoke_in_sqq_out_q_state *state;
+ struct tevent_req *req;
+ const char *key;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct _sbus_sss_invoke_in_sqq_out_q_state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->handler.type = handler->type;
+ state->handler.data = handler->data;
+ state->handler.sync = handler->sync;
+ state->handler.send = handler->async_send;
+ state->handler.recv = handler->async_recv;
+
+ state->sbus_req = sbus_req;
+ state->read_iterator = read_iterator;
+ state->write_iterator = write_iterator;
+
+ state->in = talloc_zero(state, struct _sbus_sss_invoker_args_sqq);
+ if (state->in == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Unable to allocate space for input parameters!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_read_sqq(state, read_iterator, state->in);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_invoker_schedule(state, ev, _sbus_sss_invoke_in_sqq_out_q_step, req);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_request_key(state, keygen, sbus_req, state->in, &key);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ if (_key != NULL) {
+ *_key = talloc_steal(mem_ctx, key);
+ }
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, ev);
+ }
+
+ return req;
+}
+
+static void _sbus_sss_invoke_in_sqq_out_q_step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data)
+{
+ struct _sbus_sss_invoke_in_sqq_out_q_state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = talloc_get_type(private_data, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_sqq_out_q_state);
+
+ switch (state->handler.type) {
+ case SBUS_HANDLER_SYNC:
+ if (state->handler.sync == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: sync handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ ret = state->handler.sync(state, state->sbus_req, state->handler.data, state->in->arg0, state->in->arg1, state->in->arg2, &state->out.arg0);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_write_q(state->write_iterator, &state->out);
+ goto done;
+ case SBUS_HANDLER_ASYNC:
+ if (state->handler.send == NULL || state->handler.recv == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: async handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ subreq = state->handler.send(state, ev, state->sbus_req, state->handler.data, state->in->arg0, state->in->arg1, state->in->arg2);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, _sbus_sss_invoke_in_sqq_out_q_done, req);
+ ret = EAGAIN;
+ goto done;
+ }
+
+ ret = ERR_INTERNAL;
+
+done:
+ if (ret == EOK) {
+ tevent_req_done(req);
+ } else if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ }
+}
+
+static void _sbus_sss_invoke_in_sqq_out_q_done(struct tevent_req *subreq)
+{
+ struct _sbus_sss_invoke_in_sqq_out_q_state *state;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_sqq_out_q_state);
+
+ ret = state->handler.recv(state, subreq, &state->out.arg0);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ ret = _sbus_sss_invoker_write_q(state->write_iterator, &state->out);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+struct _sbus_sss_invoke_in_ss_out_o_state {
+ struct _sbus_sss_invoker_args_ss *in;
+ struct _sbus_sss_invoker_args_o out;
+ struct {
+ enum sbus_handler_type type;
+ void *data;
+ errno_t (*sync)(TALLOC_CTX *, struct sbus_request *, void *, const char *, const char *, const char **);
+ struct tevent_req * (*send)(TALLOC_CTX *, struct tevent_context *, struct sbus_request *, void *, const char *, const char *);
+ errno_t (*recv)(TALLOC_CTX *, struct tevent_req *, const char **);
+ } handler;
+
+ struct sbus_request *sbus_req;
+ DBusMessageIter *read_iterator;
+ DBusMessageIter *write_iterator;
+};
+
+static void
+_sbus_sss_invoke_in_ss_out_o_step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data);
+
+static void
+_sbus_sss_invoke_in_ss_out_o_done
+ (struct tevent_req *subreq);
+
+struct tevent_req *
+_sbus_sss_invoke_in_ss_out_o_send
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct sbus_request *sbus_req,
+ sbus_invoker_keygen keygen,
+ const struct sbus_handler *handler,
+ DBusMessageIter *read_iterator,
+ DBusMessageIter *write_iterator,
+ const char **_key)
+{
+ struct _sbus_sss_invoke_in_ss_out_o_state *state;
+ struct tevent_req *req;
+ const char *key;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct _sbus_sss_invoke_in_ss_out_o_state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->handler.type = handler->type;
+ state->handler.data = handler->data;
+ state->handler.sync = handler->sync;
+ state->handler.send = handler->async_send;
+ state->handler.recv = handler->async_recv;
+
+ state->sbus_req = sbus_req;
+ state->read_iterator = read_iterator;
+ state->write_iterator = write_iterator;
+
+ state->in = talloc_zero(state, struct _sbus_sss_invoker_args_ss);
+ if (state->in == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Unable to allocate space for input parameters!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_read_ss(state, read_iterator, state->in);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_invoker_schedule(state, ev, _sbus_sss_invoke_in_ss_out_o_step, req);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_request_key(state, keygen, sbus_req, state->in, &key);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ if (_key != NULL) {
+ *_key = talloc_steal(mem_ctx, key);
+ }
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, ev);
+ }
+
+ return req;
+}
+
+static void _sbus_sss_invoke_in_ss_out_o_step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data)
+{
+ struct _sbus_sss_invoke_in_ss_out_o_state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = talloc_get_type(private_data, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_ss_out_o_state);
+
+ switch (state->handler.type) {
+ case SBUS_HANDLER_SYNC:
+ if (state->handler.sync == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: sync handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ ret = state->handler.sync(state, state->sbus_req, state->handler.data, state->in->arg0, state->in->arg1, &state->out.arg0);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_write_o(state->write_iterator, &state->out);
+ goto done;
+ case SBUS_HANDLER_ASYNC:
+ if (state->handler.send == NULL || state->handler.recv == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: async handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ subreq = state->handler.send(state, ev, state->sbus_req, state->handler.data, state->in->arg0, state->in->arg1);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, _sbus_sss_invoke_in_ss_out_o_done, req);
+ ret = EAGAIN;
+ goto done;
+ }
+
+ ret = ERR_INTERNAL;
+
+done:
+ if (ret == EOK) {
+ tevent_req_done(req);
+ } else if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ }
+}
+
+static void _sbus_sss_invoke_in_ss_out_o_done(struct tevent_req *subreq)
+{
+ struct _sbus_sss_invoke_in_ss_out_o_state *state;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_ss_out_o_state);
+
+ ret = state->handler.recv(state, subreq, &state->out.arg0);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ ret = _sbus_sss_invoker_write_o(state->write_iterator, &state->out);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+struct _sbus_sss_invoke_in_ssau_out__state {
+ struct _sbus_sss_invoker_args_ssau *in;
+ struct {
+ enum sbus_handler_type type;
+ void *data;
+ errno_t (*sync)(TALLOC_CTX *, struct sbus_request *, void *, const char *, const char *, uint32_t *);
+ struct tevent_req * (*send)(TALLOC_CTX *, struct tevent_context *, struct sbus_request *, void *, const char *, const char *, uint32_t *);
+ errno_t (*recv)(TALLOC_CTX *, struct tevent_req *);
+ } handler;
+
+ struct sbus_request *sbus_req;
+ DBusMessageIter *read_iterator;
+ DBusMessageIter *write_iterator;
+};
+
+static void
+_sbus_sss_invoke_in_ssau_out__step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data);
+
+static void
+_sbus_sss_invoke_in_ssau_out__done
+ (struct tevent_req *subreq);
+
+struct tevent_req *
+_sbus_sss_invoke_in_ssau_out__send
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct sbus_request *sbus_req,
+ sbus_invoker_keygen keygen,
+ const struct sbus_handler *handler,
+ DBusMessageIter *read_iterator,
+ DBusMessageIter *write_iterator,
+ const char **_key)
+{
+ struct _sbus_sss_invoke_in_ssau_out__state *state;
+ struct tevent_req *req;
+ const char *key;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct _sbus_sss_invoke_in_ssau_out__state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->handler.type = handler->type;
+ state->handler.data = handler->data;
+ state->handler.sync = handler->sync;
+ state->handler.send = handler->async_send;
+ state->handler.recv = handler->async_recv;
+
+ state->sbus_req = sbus_req;
+ state->read_iterator = read_iterator;
+ state->write_iterator = write_iterator;
+
+ state->in = talloc_zero(state, struct _sbus_sss_invoker_args_ssau);
+ if (state->in == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Unable to allocate space for input parameters!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_read_ssau(state, read_iterator, state->in);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_invoker_schedule(state, ev, _sbus_sss_invoke_in_ssau_out__step, req);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_request_key(state, keygen, sbus_req, state->in, &key);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ if (_key != NULL) {
+ *_key = talloc_steal(mem_ctx, key);
+ }
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, ev);
+ }
+
+ return req;
+}
+
+static void _sbus_sss_invoke_in_ssau_out__step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data)
+{
+ struct _sbus_sss_invoke_in_ssau_out__state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = talloc_get_type(private_data, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_ssau_out__state);
+
+ switch (state->handler.type) {
+ case SBUS_HANDLER_SYNC:
+ if (state->handler.sync == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: sync handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ ret = state->handler.sync(state, state->sbus_req, state->handler.data, state->in->arg0, state->in->arg1, state->in->arg2);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ goto done;
+ case SBUS_HANDLER_ASYNC:
+ if (state->handler.send == NULL || state->handler.recv == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: async handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ subreq = state->handler.send(state, ev, state->sbus_req, state->handler.data, state->in->arg0, state->in->arg1, state->in->arg2);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, _sbus_sss_invoke_in_ssau_out__done, req);
+ ret = EAGAIN;
+ goto done;
+ }
+
+ ret = ERR_INTERNAL;
+
+done:
+ if (ret == EOK) {
+ tevent_req_done(req);
+ } else if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ }
+}
+
+static void _sbus_sss_invoke_in_ssau_out__done(struct tevent_req *subreq)
+{
+ struct _sbus_sss_invoke_in_ssau_out__state *state;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_ssau_out__state);
+
+ ret = state->handler.recv(state, subreq);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+struct _sbus_sss_invoke_in_u_out__state {
+ struct _sbus_sss_invoker_args_u *in;
+ struct {
+ enum sbus_handler_type type;
+ void *data;
+ errno_t (*sync)(TALLOC_CTX *, struct sbus_request *, void *, uint32_t);
+ struct tevent_req * (*send)(TALLOC_CTX *, struct tevent_context *, struct sbus_request *, void *, uint32_t);
+ errno_t (*recv)(TALLOC_CTX *, struct tevent_req *);
+ } handler;
+
+ struct sbus_request *sbus_req;
+ DBusMessageIter *read_iterator;
+ DBusMessageIter *write_iterator;
+};
+
+static void
+_sbus_sss_invoke_in_u_out__step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data);
+
+static void
+_sbus_sss_invoke_in_u_out__done
+ (struct tevent_req *subreq);
+
+struct tevent_req *
+_sbus_sss_invoke_in_u_out__send
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct sbus_request *sbus_req,
+ sbus_invoker_keygen keygen,
+ const struct sbus_handler *handler,
+ DBusMessageIter *read_iterator,
+ DBusMessageIter *write_iterator,
+ const char **_key)
+{
+ struct _sbus_sss_invoke_in_u_out__state *state;
+ struct tevent_req *req;
+ const char *key;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct _sbus_sss_invoke_in_u_out__state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->handler.type = handler->type;
+ state->handler.data = handler->data;
+ state->handler.sync = handler->sync;
+ state->handler.send = handler->async_send;
+ state->handler.recv = handler->async_recv;
+
+ state->sbus_req = sbus_req;
+ state->read_iterator = read_iterator;
+ state->write_iterator = write_iterator;
+
+ state->in = talloc_zero(state, struct _sbus_sss_invoker_args_u);
+ if (state->in == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Unable to allocate space for input parameters!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_read_u(state, read_iterator, state->in);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_invoker_schedule(state, ev, _sbus_sss_invoke_in_u_out__step, req);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_request_key(state, keygen, sbus_req, state->in, &key);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ if (_key != NULL) {
+ *_key = talloc_steal(mem_ctx, key);
+ }
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, ev);
+ }
+
+ return req;
+}
+
+static void _sbus_sss_invoke_in_u_out__step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data)
+{
+ struct _sbus_sss_invoke_in_u_out__state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = talloc_get_type(private_data, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_u_out__state);
+
+ switch (state->handler.type) {
+ case SBUS_HANDLER_SYNC:
+ if (state->handler.sync == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: sync handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ ret = state->handler.sync(state, state->sbus_req, state->handler.data, state->in->arg0);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ goto done;
+ case SBUS_HANDLER_ASYNC:
+ if (state->handler.send == NULL || state->handler.recv == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: async handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ subreq = state->handler.send(state, ev, state->sbus_req, state->handler.data, state->in->arg0);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, _sbus_sss_invoke_in_u_out__done, req);
+ ret = EAGAIN;
+ goto done;
+ }
+
+ ret = ERR_INTERNAL;
+
+done:
+ if (ret == EOK) {
+ tevent_req_done(req);
+ } else if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ }
+}
+
+static void _sbus_sss_invoke_in_u_out__done(struct tevent_req *subreq)
+{
+ struct _sbus_sss_invoke_in_u_out__state *state;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_u_out__state);
+
+ ret = state->handler.recv(state, subreq);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+struct _sbus_sss_invoke_in_usq_out__state {
+ struct _sbus_sss_invoker_args_usq *in;
+ struct {
+ enum sbus_handler_type type;
+ void *data;
+ errno_t (*sync)(TALLOC_CTX *, struct sbus_request *, void *, uint32_t, const char *, uint16_t);
+ struct tevent_req * (*send)(TALLOC_CTX *, struct tevent_context *, struct sbus_request *, void *, uint32_t, const char *, uint16_t);
+ errno_t (*recv)(TALLOC_CTX *, struct tevent_req *);
+ } handler;
+
+ struct sbus_request *sbus_req;
+ DBusMessageIter *read_iterator;
+ DBusMessageIter *write_iterator;
+};
+
+static void
+_sbus_sss_invoke_in_usq_out__step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data);
+
+static void
+_sbus_sss_invoke_in_usq_out__done
+ (struct tevent_req *subreq);
+
+struct tevent_req *
+_sbus_sss_invoke_in_usq_out__send
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct sbus_request *sbus_req,
+ sbus_invoker_keygen keygen,
+ const struct sbus_handler *handler,
+ DBusMessageIter *read_iterator,
+ DBusMessageIter *write_iterator,
+ const char **_key)
+{
+ struct _sbus_sss_invoke_in_usq_out__state *state;
+ struct tevent_req *req;
+ const char *key;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct _sbus_sss_invoke_in_usq_out__state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->handler.type = handler->type;
+ state->handler.data = handler->data;
+ state->handler.sync = handler->sync;
+ state->handler.send = handler->async_send;
+ state->handler.recv = handler->async_recv;
+
+ state->sbus_req = sbus_req;
+ state->read_iterator = read_iterator;
+ state->write_iterator = write_iterator;
+
+ state->in = talloc_zero(state, struct _sbus_sss_invoker_args_usq);
+ if (state->in == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Unable to allocate space for input parameters!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_read_usq(state, read_iterator, state->in);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_invoker_schedule(state, ev, _sbus_sss_invoke_in_usq_out__step, req);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_request_key(state, keygen, sbus_req, state->in, &key);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ if (_key != NULL) {
+ *_key = talloc_steal(mem_ctx, key);
+ }
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, ev);
+ }
+
+ return req;
+}
+
+static void _sbus_sss_invoke_in_usq_out__step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data)
+{
+ struct _sbus_sss_invoke_in_usq_out__state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = talloc_get_type(private_data, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_usq_out__state);
+
+ switch (state->handler.type) {
+ case SBUS_HANDLER_SYNC:
+ if (state->handler.sync == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: sync handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ ret = state->handler.sync(state, state->sbus_req, state->handler.data, state->in->arg0, state->in->arg1, state->in->arg2);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ goto done;
+ case SBUS_HANDLER_ASYNC:
+ if (state->handler.send == NULL || state->handler.recv == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: async handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ subreq = state->handler.send(state, ev, state->sbus_req, state->handler.data, state->in->arg0, state->in->arg1, state->in->arg2);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, _sbus_sss_invoke_in_usq_out__done, req);
+ ret = EAGAIN;
+ goto done;
+ }
+
+ ret = ERR_INTERNAL;
+
+done:
+ if (ret == EOK) {
+ tevent_req_done(req);
+ } else if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ }
+}
+
+static void _sbus_sss_invoke_in_usq_out__done(struct tevent_req *subreq)
+{
+ struct _sbus_sss_invoke_in_usq_out__state *state;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_usq_out__state);
+
+ ret = state->handler.recv(state, subreq);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+struct _sbus_sss_invoke_in_ussu_out__state {
+ struct _sbus_sss_invoker_args_ussu *in;
+ struct {
+ enum sbus_handler_type type;
+ void *data;
+ errno_t (*sync)(TALLOC_CTX *, struct sbus_request *, void *, uint32_t, const char *, const char *, uint32_t);
+ struct tevent_req * (*send)(TALLOC_CTX *, struct tevent_context *, struct sbus_request *, void *, uint32_t, const char *, const char *, uint32_t);
+ errno_t (*recv)(TALLOC_CTX *, struct tevent_req *);
+ } handler;
+
+ struct sbus_request *sbus_req;
+ DBusMessageIter *read_iterator;
+ DBusMessageIter *write_iterator;
+};
+
+static void
+_sbus_sss_invoke_in_ussu_out__step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data);
+
+static void
+_sbus_sss_invoke_in_ussu_out__done
+ (struct tevent_req *subreq);
+
+struct tevent_req *
+_sbus_sss_invoke_in_ussu_out__send
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct sbus_request *sbus_req,
+ sbus_invoker_keygen keygen,
+ const struct sbus_handler *handler,
+ DBusMessageIter *read_iterator,
+ DBusMessageIter *write_iterator,
+ const char **_key)
+{
+ struct _sbus_sss_invoke_in_ussu_out__state *state;
+ struct tevent_req *req;
+ const char *key;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct _sbus_sss_invoke_in_ussu_out__state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->handler.type = handler->type;
+ state->handler.data = handler->data;
+ state->handler.sync = handler->sync;
+ state->handler.send = handler->async_send;
+ state->handler.recv = handler->async_recv;
+
+ state->sbus_req = sbus_req;
+ state->read_iterator = read_iterator;
+ state->write_iterator = write_iterator;
+
+ state->in = talloc_zero(state, struct _sbus_sss_invoker_args_ussu);
+ if (state->in == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Unable to allocate space for input parameters!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_read_ussu(state, read_iterator, state->in);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_invoker_schedule(state, ev, _sbus_sss_invoke_in_ussu_out__step, req);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_request_key(state, keygen, sbus_req, state->in, &key);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ if (_key != NULL) {
+ *_key = talloc_steal(mem_ctx, key);
+ }
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, ev);
+ }
+
+ return req;
+}
+
+static void _sbus_sss_invoke_in_ussu_out__step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data)
+{
+ struct _sbus_sss_invoke_in_ussu_out__state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = talloc_get_type(private_data, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_ussu_out__state);
+
+ switch (state->handler.type) {
+ case SBUS_HANDLER_SYNC:
+ if (state->handler.sync == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: sync handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ ret = state->handler.sync(state, state->sbus_req, state->handler.data, state->in->arg0, state->in->arg1, state->in->arg2, state->in->arg3);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ goto done;
+ case SBUS_HANDLER_ASYNC:
+ if (state->handler.send == NULL || state->handler.recv == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: async handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ subreq = state->handler.send(state, ev, state->sbus_req, state->handler.data, state->in->arg0, state->in->arg1, state->in->arg2, state->in->arg3);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, _sbus_sss_invoke_in_ussu_out__done, req);
+ ret = EAGAIN;
+ goto done;
+ }
+
+ ret = ERR_INTERNAL;
+
+done:
+ if (ret == EOK) {
+ tevent_req_done(req);
+ } else if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ }
+}
+
+static void _sbus_sss_invoke_in_ussu_out__done(struct tevent_req *subreq)
+{
+ struct _sbus_sss_invoke_in_ussu_out__state *state;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_ussu_out__state);
+
+ ret = state->handler.recv(state, subreq);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+struct _sbus_sss_invoke_in_ussu_out_qus_state {
+ struct _sbus_sss_invoker_args_ussu *in;
+ struct _sbus_sss_invoker_args_qus out;
+ struct {
+ enum sbus_handler_type type;
+ void *data;
+ errno_t (*sync)(TALLOC_CTX *, struct sbus_request *, void *, uint32_t, const char *, const char *, uint32_t, uint16_t*, uint32_t*, const char **);
+ struct tevent_req * (*send)(TALLOC_CTX *, struct tevent_context *, struct sbus_request *, void *, uint32_t, const char *, const char *, uint32_t);
+ errno_t (*recv)(TALLOC_CTX *, struct tevent_req *, uint16_t*, uint32_t*, const char **);
+ } handler;
+
+ struct sbus_request *sbus_req;
+ DBusMessageIter *read_iterator;
+ DBusMessageIter *write_iterator;
+};
+
+static void
+_sbus_sss_invoke_in_ussu_out_qus_step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data);
+
+static void
+_sbus_sss_invoke_in_ussu_out_qus_done
+ (struct tevent_req *subreq);
+
+struct tevent_req *
+_sbus_sss_invoke_in_ussu_out_qus_send
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct sbus_request *sbus_req,
+ sbus_invoker_keygen keygen,
+ const struct sbus_handler *handler,
+ DBusMessageIter *read_iterator,
+ DBusMessageIter *write_iterator,
+ const char **_key)
+{
+ struct _sbus_sss_invoke_in_ussu_out_qus_state *state;
+ struct tevent_req *req;
+ const char *key;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct _sbus_sss_invoke_in_ussu_out_qus_state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->handler.type = handler->type;
+ state->handler.data = handler->data;
+ state->handler.sync = handler->sync;
+ state->handler.send = handler->async_send;
+ state->handler.recv = handler->async_recv;
+
+ state->sbus_req = sbus_req;
+ state->read_iterator = read_iterator;
+ state->write_iterator = write_iterator;
+
+ state->in = talloc_zero(state, struct _sbus_sss_invoker_args_ussu);
+ if (state->in == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Unable to allocate space for input parameters!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_read_ussu(state, read_iterator, state->in);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_invoker_schedule(state, ev, _sbus_sss_invoke_in_ussu_out_qus_step, req);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_request_key(state, keygen, sbus_req, state->in, &key);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ if (_key != NULL) {
+ *_key = talloc_steal(mem_ctx, key);
+ }
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, ev);
+ }
+
+ return req;
+}
+
+static void _sbus_sss_invoke_in_ussu_out_qus_step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data)
+{
+ struct _sbus_sss_invoke_in_ussu_out_qus_state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = talloc_get_type(private_data, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_ussu_out_qus_state);
+
+ switch (state->handler.type) {
+ case SBUS_HANDLER_SYNC:
+ if (state->handler.sync == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: sync handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ ret = state->handler.sync(state, state->sbus_req, state->handler.data, state->in->arg0, state->in->arg1, state->in->arg2, state->in->arg3, &state->out.arg0, &state->out.arg1, &state->out.arg2);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_write_qus(state->write_iterator, &state->out);
+ goto done;
+ case SBUS_HANDLER_ASYNC:
+ if (state->handler.send == NULL || state->handler.recv == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: async handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ subreq = state->handler.send(state, ev, state->sbus_req, state->handler.data, state->in->arg0, state->in->arg1, state->in->arg2, state->in->arg3);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, _sbus_sss_invoke_in_ussu_out_qus_done, req);
+ ret = EAGAIN;
+ goto done;
+ }
+
+ ret = ERR_INTERNAL;
+
+done:
+ if (ret == EOK) {
+ tevent_req_done(req);
+ } else if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ }
+}
+
+static void _sbus_sss_invoke_in_ussu_out_qus_done(struct tevent_req *subreq)
+{
+ struct _sbus_sss_invoke_in_ussu_out_qus_state *state;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_ussu_out_qus_state);
+
+ ret = state->handler.recv(state, subreq, &state->out.arg0, &state->out.arg1, &state->out.arg2);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ ret = _sbus_sss_invoker_write_qus(state->write_iterator, &state->out);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+struct _sbus_sss_invoke_in_usu_out__state {
+ struct _sbus_sss_invoker_args_usu *in;
+ struct {
+ enum sbus_handler_type type;
+ void *data;
+ errno_t (*sync)(TALLOC_CTX *, struct sbus_request *, void *, uint32_t, const char *, uint32_t);
+ struct tevent_req * (*send)(TALLOC_CTX *, struct tevent_context *, struct sbus_request *, void *, uint32_t, const char *, uint32_t);
+ errno_t (*recv)(TALLOC_CTX *, struct tevent_req *);
+ } handler;
+
+ struct sbus_request *sbus_req;
+ DBusMessageIter *read_iterator;
+ DBusMessageIter *write_iterator;
+};
+
+static void
+_sbus_sss_invoke_in_usu_out__step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data);
+
+static void
+_sbus_sss_invoke_in_usu_out__done
+ (struct tevent_req *subreq);
+
+struct tevent_req *
+_sbus_sss_invoke_in_usu_out__send
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct sbus_request *sbus_req,
+ sbus_invoker_keygen keygen,
+ const struct sbus_handler *handler,
+ DBusMessageIter *read_iterator,
+ DBusMessageIter *write_iterator,
+ const char **_key)
+{
+ struct _sbus_sss_invoke_in_usu_out__state *state;
+ struct tevent_req *req;
+ const char *key;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct _sbus_sss_invoke_in_usu_out__state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->handler.type = handler->type;
+ state->handler.data = handler->data;
+ state->handler.sync = handler->sync;
+ state->handler.send = handler->async_send;
+ state->handler.recv = handler->async_recv;
+
+ state->sbus_req = sbus_req;
+ state->read_iterator = read_iterator;
+ state->write_iterator = write_iterator;
+
+ state->in = talloc_zero(state, struct _sbus_sss_invoker_args_usu);
+ if (state->in == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Unable to allocate space for input parameters!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_read_usu(state, read_iterator, state->in);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_invoker_schedule(state, ev, _sbus_sss_invoke_in_usu_out__step, req);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_request_key(state, keygen, sbus_req, state->in, &key);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ if (_key != NULL) {
+ *_key = talloc_steal(mem_ctx, key);
+ }
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, ev);
+ }
+
+ return req;
+}
+
+static void _sbus_sss_invoke_in_usu_out__step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data)
+{
+ struct _sbus_sss_invoke_in_usu_out__state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = talloc_get_type(private_data, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_usu_out__state);
+
+ switch (state->handler.type) {
+ case SBUS_HANDLER_SYNC:
+ if (state->handler.sync == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: sync handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ ret = state->handler.sync(state, state->sbus_req, state->handler.data, state->in->arg0, state->in->arg1, state->in->arg2);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ goto done;
+ case SBUS_HANDLER_ASYNC:
+ if (state->handler.send == NULL || state->handler.recv == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: async handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ subreq = state->handler.send(state, ev, state->sbus_req, state->handler.data, state->in->arg0, state->in->arg1, state->in->arg2);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, _sbus_sss_invoke_in_usu_out__done, req);
+ ret = EAGAIN;
+ goto done;
+ }
+
+ ret = ERR_INTERNAL;
+
+done:
+ if (ret == EOK) {
+ tevent_req_done(req);
+ } else if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ }
+}
+
+static void _sbus_sss_invoke_in_usu_out__done(struct tevent_req *subreq)
+{
+ struct _sbus_sss_invoke_in_usu_out__state *state;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_usu_out__state);
+
+ ret = state->handler.recv(state, subreq);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+struct _sbus_sss_invoke_in_uusssu_out_qus_state {
+ struct _sbus_sss_invoker_args_uusssu *in;
+ struct _sbus_sss_invoker_args_qus out;
+ struct {
+ enum sbus_handler_type type;
+ void *data;
+ errno_t (*sync)(TALLOC_CTX *, struct sbus_request *, void *, uint32_t, uint32_t, const char *, const char *, const char *, uint32_t, uint16_t*, uint32_t*, const char **);
+ struct tevent_req * (*send)(TALLOC_CTX *, struct tevent_context *, struct sbus_request *, void *, uint32_t, uint32_t, const char *, const char *, const char *, uint32_t);
+ errno_t (*recv)(TALLOC_CTX *, struct tevent_req *, uint16_t*, uint32_t*, const char **);
+ } handler;
+
+ struct sbus_request *sbus_req;
+ DBusMessageIter *read_iterator;
+ DBusMessageIter *write_iterator;
+};
+
+static void
+_sbus_sss_invoke_in_uusssu_out_qus_step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data);
+
+static void
+_sbus_sss_invoke_in_uusssu_out_qus_done
+ (struct tevent_req *subreq);
+
+struct tevent_req *
+_sbus_sss_invoke_in_uusssu_out_qus_send
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct sbus_request *sbus_req,
+ sbus_invoker_keygen keygen,
+ const struct sbus_handler *handler,
+ DBusMessageIter *read_iterator,
+ DBusMessageIter *write_iterator,
+ const char **_key)
+{
+ struct _sbus_sss_invoke_in_uusssu_out_qus_state *state;
+ struct tevent_req *req;
+ const char *key;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct _sbus_sss_invoke_in_uusssu_out_qus_state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->handler.type = handler->type;
+ state->handler.data = handler->data;
+ state->handler.sync = handler->sync;
+ state->handler.send = handler->async_send;
+ state->handler.recv = handler->async_recv;
+
+ state->sbus_req = sbus_req;
+ state->read_iterator = read_iterator;
+ state->write_iterator = write_iterator;
+
+ state->in = talloc_zero(state, struct _sbus_sss_invoker_args_uusssu);
+ if (state->in == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Unable to allocate space for input parameters!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_read_uusssu(state, read_iterator, state->in);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_invoker_schedule(state, ev, _sbus_sss_invoke_in_uusssu_out_qus_step, req);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_request_key(state, keygen, sbus_req, state->in, &key);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ if (_key != NULL) {
+ *_key = talloc_steal(mem_ctx, key);
+ }
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, ev);
+ }
+
+ return req;
+}
+
+static void _sbus_sss_invoke_in_uusssu_out_qus_step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data)
+{
+ struct _sbus_sss_invoke_in_uusssu_out_qus_state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = talloc_get_type(private_data, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_uusssu_out_qus_state);
+
+ switch (state->handler.type) {
+ case SBUS_HANDLER_SYNC:
+ if (state->handler.sync == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: sync handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ ret = state->handler.sync(state, state->sbus_req, state->handler.data, state->in->arg0, state->in->arg1, state->in->arg2, state->in->arg3, state->in->arg4, state->in->arg5, &state->out.arg0, &state->out.arg1, &state->out.arg2);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_write_qus(state->write_iterator, &state->out);
+ goto done;
+ case SBUS_HANDLER_ASYNC:
+ if (state->handler.send == NULL || state->handler.recv == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: async handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ subreq = state->handler.send(state, ev, state->sbus_req, state->handler.data, state->in->arg0, state->in->arg1, state->in->arg2, state->in->arg3, state->in->arg4, state->in->arg5);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, _sbus_sss_invoke_in_uusssu_out_qus_done, req);
+ ret = EAGAIN;
+ goto done;
+ }
+
+ ret = ERR_INTERNAL;
+
+done:
+ if (ret == EOK) {
+ tevent_req_done(req);
+ } else if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ }
+}
+
+static void _sbus_sss_invoke_in_uusssu_out_qus_done(struct tevent_req *subreq)
+{
+ struct _sbus_sss_invoke_in_uusssu_out_qus_state *state;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_uusssu_out_qus_state);
+
+ ret = state->handler.recv(state, subreq, &state->out.arg0, &state->out.arg1, &state->out.arg2);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ ret = _sbus_sss_invoker_write_qus(state->write_iterator, &state->out);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+struct _sbus_sss_invoke_in_uusu_out_qus_state {
+ struct _sbus_sss_invoker_args_uusu *in;
+ struct _sbus_sss_invoker_args_qus out;
+ struct {
+ enum sbus_handler_type type;
+ void *data;
+ errno_t (*sync)(TALLOC_CTX *, struct sbus_request *, void *, uint32_t, uint32_t, const char *, uint32_t, uint16_t*, uint32_t*, const char **);
+ struct tevent_req * (*send)(TALLOC_CTX *, struct tevent_context *, struct sbus_request *, void *, uint32_t, uint32_t, const char *, uint32_t);
+ errno_t (*recv)(TALLOC_CTX *, struct tevent_req *, uint16_t*, uint32_t*, const char **);
+ } handler;
+
+ struct sbus_request *sbus_req;
+ DBusMessageIter *read_iterator;
+ DBusMessageIter *write_iterator;
+};
+
+static void
+_sbus_sss_invoke_in_uusu_out_qus_step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data);
+
+static void
+_sbus_sss_invoke_in_uusu_out_qus_done
+ (struct tevent_req *subreq);
+
+struct tevent_req *
+_sbus_sss_invoke_in_uusu_out_qus_send
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct sbus_request *sbus_req,
+ sbus_invoker_keygen keygen,
+ const struct sbus_handler *handler,
+ DBusMessageIter *read_iterator,
+ DBusMessageIter *write_iterator,
+ const char **_key)
+{
+ struct _sbus_sss_invoke_in_uusu_out_qus_state *state;
+ struct tevent_req *req;
+ const char *key;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct _sbus_sss_invoke_in_uusu_out_qus_state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->handler.type = handler->type;
+ state->handler.data = handler->data;
+ state->handler.sync = handler->sync;
+ state->handler.send = handler->async_send;
+ state->handler.recv = handler->async_recv;
+
+ state->sbus_req = sbus_req;
+ state->read_iterator = read_iterator;
+ state->write_iterator = write_iterator;
+
+ state->in = talloc_zero(state, struct _sbus_sss_invoker_args_uusu);
+ if (state->in == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Unable to allocate space for input parameters!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_read_uusu(state, read_iterator, state->in);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_invoker_schedule(state, ev, _sbus_sss_invoke_in_uusu_out_qus_step, req);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_request_key(state, keygen, sbus_req, state->in, &key);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ if (_key != NULL) {
+ *_key = talloc_steal(mem_ctx, key);
+ }
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, ev);
+ }
+
+ return req;
+}
+
+static void _sbus_sss_invoke_in_uusu_out_qus_step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data)
+{
+ struct _sbus_sss_invoke_in_uusu_out_qus_state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = talloc_get_type(private_data, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_uusu_out_qus_state);
+
+ switch (state->handler.type) {
+ case SBUS_HANDLER_SYNC:
+ if (state->handler.sync == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: sync handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ ret = state->handler.sync(state, state->sbus_req, state->handler.data, state->in->arg0, state->in->arg1, state->in->arg2, state->in->arg3, &state->out.arg0, &state->out.arg1, &state->out.arg2);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_write_qus(state->write_iterator, &state->out);
+ goto done;
+ case SBUS_HANDLER_ASYNC:
+ if (state->handler.send == NULL || state->handler.recv == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: async handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ subreq = state->handler.send(state, ev, state->sbus_req, state->handler.data, state->in->arg0, state->in->arg1, state->in->arg2, state->in->arg3);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, _sbus_sss_invoke_in_uusu_out_qus_done, req);
+ ret = EAGAIN;
+ goto done;
+ }
+
+ ret = ERR_INTERNAL;
+
+done:
+ if (ret == EOK) {
+ tevent_req_done(req);
+ } else if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ }
+}
+
+static void _sbus_sss_invoke_in_uusu_out_qus_done(struct tevent_req *subreq)
+{
+ struct _sbus_sss_invoke_in_uusu_out_qus_state *state;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_uusu_out_qus_state);
+
+ ret = state->handler.recv(state, subreq, &state->out.arg0, &state->out.arg1, &state->out.arg2);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ ret = _sbus_sss_invoker_write_qus(state->write_iterator, &state->out);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
+
+struct _sbus_sss_invoke_in_uuusu_out_qus_state {
+ struct _sbus_sss_invoker_args_uuusu *in;
+ struct _sbus_sss_invoker_args_qus out;
+ struct {
+ enum sbus_handler_type type;
+ void *data;
+ errno_t (*sync)(TALLOC_CTX *, struct sbus_request *, void *, uint32_t, uint32_t, uint32_t, const char *, uint32_t, uint16_t*, uint32_t*, const char **);
+ struct tevent_req * (*send)(TALLOC_CTX *, struct tevent_context *, struct sbus_request *, void *, uint32_t, uint32_t, uint32_t, const char *, uint32_t);
+ errno_t (*recv)(TALLOC_CTX *, struct tevent_req *, uint16_t*, uint32_t*, const char **);
+ } handler;
+
+ struct sbus_request *sbus_req;
+ DBusMessageIter *read_iterator;
+ DBusMessageIter *write_iterator;
+};
+
+static void
+_sbus_sss_invoke_in_uuusu_out_qus_step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data);
+
+static void
+_sbus_sss_invoke_in_uuusu_out_qus_done
+ (struct tevent_req *subreq);
+
+struct tevent_req *
+_sbus_sss_invoke_in_uuusu_out_qus_send
+ (TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct sbus_request *sbus_req,
+ sbus_invoker_keygen keygen,
+ const struct sbus_handler *handler,
+ DBusMessageIter *read_iterator,
+ DBusMessageIter *write_iterator,
+ const char **_key)
+{
+ struct _sbus_sss_invoke_in_uuusu_out_qus_state *state;
+ struct tevent_req *req;
+ const char *key;
+ errno_t ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct _sbus_sss_invoke_in_uuusu_out_qus_state);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ return NULL;
+ }
+
+ state->handler.type = handler->type;
+ state->handler.data = handler->data;
+ state->handler.sync = handler->sync;
+ state->handler.send = handler->async_send;
+ state->handler.recv = handler->async_recv;
+
+ state->sbus_req = sbus_req;
+ state->read_iterator = read_iterator;
+ state->write_iterator = write_iterator;
+
+ state->in = talloc_zero(state, struct _sbus_sss_invoker_args_uuusu);
+ if (state->in == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Unable to allocate space for input parameters!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_read_uuusu(state, read_iterator, state->in);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_invoker_schedule(state, ev, _sbus_sss_invoke_in_uuusu_out_qus_step, req);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_request_key(state, keygen, sbus_req, state->in, &key);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ if (_key != NULL) {
+ *_key = talloc_steal(mem_ctx, key);
+ }
+
+ ret = EAGAIN;
+
+done:
+ if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ tevent_req_post(req, ev);
+ }
+
+ return req;
+}
+
+static void _sbus_sss_invoke_in_uuusu_out_qus_step
+ (struct tevent_context *ev,
+ struct tevent_timer *te,
+ struct timeval tv,
+ void *private_data)
+{
+ struct _sbus_sss_invoke_in_uuusu_out_qus_state *state;
+ struct tevent_req *subreq;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = talloc_get_type(private_data, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_uuusu_out_qus_state);
+
+ switch (state->handler.type) {
+ case SBUS_HANDLER_SYNC:
+ if (state->handler.sync == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: sync handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ ret = state->handler.sync(state, state->sbus_req, state->handler.data, state->in->arg0, state->in->arg1, state->in->arg2, state->in->arg3, state->in->arg4, &state->out.arg0, &state->out.arg1, &state->out.arg2);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = _sbus_sss_invoker_write_qus(state->write_iterator, &state->out);
+ goto done;
+ case SBUS_HANDLER_ASYNC:
+ if (state->handler.send == NULL || state->handler.recv == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Bug: async handler is not specified!\n");
+ ret = ERR_INTERNAL;
+ goto done;
+ }
+
+ subreq = state->handler.send(state, ev, state->sbus_req, state->handler.data, state->in->arg0, state->in->arg1, state->in->arg2, state->in->arg3, state->in->arg4);
+ if (subreq == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create subrequest!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(subreq, _sbus_sss_invoke_in_uuusu_out_qus_done, req);
+ ret = EAGAIN;
+ goto done;
+ }
+
+ ret = ERR_INTERNAL;
+
+done:
+ if (ret == EOK) {
+ tevent_req_done(req);
+ } else if (ret != EAGAIN) {
+ tevent_req_error(req, ret);
+ }
+}
+
+static void _sbus_sss_invoke_in_uuusu_out_qus_done(struct tevent_req *subreq)
+{
+ struct _sbus_sss_invoke_in_uuusu_out_qus_state *state;
+ struct tevent_req *req;
+ errno_t ret;
+
+ req = tevent_req_callback_data(subreq, struct tevent_req);
+ state = tevent_req_data(req, struct _sbus_sss_invoke_in_uuusu_out_qus_state);
+
+ ret = state->handler.recv(state, subreq, &state->out.arg0, &state->out.arg1, &state->out.arg2);
+ talloc_zfree(subreq);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ ret = _sbus_sss_invoker_write_qus(state->write_iterator, &state->out);
+ if (ret != EOK) {
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ tevent_req_done(req);
+ return;
+}
diff --git a/src/sss_iface/sbus_sss_invokers.h b/src/sss_iface/sbus_sss_invokers.h
new file mode 100644
index 0000000..823ee99
--- /dev/null
+++ b/src/sss_iface/sbus_sss_invokers.h
@@ -0,0 +1,63 @@
+/*
+ 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 <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _SBUS_SSS_INVOKERS_H_
+#define _SBUS_SSS_INVOKERS_H_
+
+#include <talloc.h>
+#include <tevent.h>
+#include <dbus/dbus.h>
+
+#include "sbus/sbus_interface_declarations.h"
+#include "sbus/sbus_request.h"
+
+#define _sbus_sss_declare_invoker(input, output) \
+ struct tevent_req * \
+ _sbus_sss_invoke_in_ ## input ## _out_ ## output ## _send \
+ (TALLOC_CTX *mem_ctx, \
+ struct tevent_context *ev, \
+ struct sbus_request *sbus_req, \
+ sbus_invoker_keygen keygen, \
+ const struct sbus_handler *handler, \
+ DBusMessageIter *read_iterator, \
+ DBusMessageIter *write_iterator, \
+ const char **_key)
+
+_sbus_sss_declare_invoker(, );
+_sbus_sss_declare_invoker(, u);
+_sbus_sss_declare_invoker(pam_data, pam_response);
+_sbus_sss_declare_invoker(raw, qus);
+_sbus_sss_declare_invoker(s, );
+_sbus_sss_declare_invoker(s, as);
+_sbus_sss_declare_invoker(s, b);
+_sbus_sss_declare_invoker(s, qus);
+_sbus_sss_declare_invoker(s, s);
+_sbus_sss_declare_invoker(sqq, q);
+_sbus_sss_declare_invoker(ss, o);
+_sbus_sss_declare_invoker(ssau, );
+_sbus_sss_declare_invoker(u, );
+_sbus_sss_declare_invoker(usq, );
+_sbus_sss_declare_invoker(ussu, );
+_sbus_sss_declare_invoker(ussu, qus);
+_sbus_sss_declare_invoker(usu, );
+_sbus_sss_declare_invoker(uusssu, qus);
+_sbus_sss_declare_invoker(uusu, qus);
+_sbus_sss_declare_invoker(uuusu, qus);
+
+#endif /* _SBUS_SSS_INVOKERS_H_ */
diff --git a/src/sss_iface/sbus_sss_keygens.c b/src/sss_iface/sbus_sss_keygens.c
new file mode 100644
index 0000000..0bded60
--- /dev/null
+++ b/src/sss_iface/sbus_sss_keygens.c
@@ -0,0 +1,175 @@
+/*
+ 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 <http://www.gnu.org/licenses/>.
+*/
+
+#include <inttypes.h>
+#include <talloc.h>
+
+#include "sbus/sbus_request.h"
+#include "sss_iface/sbus_sss_arguments.h"
+#include "sss_iface/sbus_sss_keygens.h"
+
+const char *
+_sbus_sss_key_
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_request *sbus_req)
+{
+ if (sbus_req->sender == NULL) {
+ return talloc_asprintf(mem_ctx, "-:%u:%s.%s:%s",
+ sbus_req->type, sbus_req->interface, sbus_req->member, sbus_req->path);
+ }
+
+ return talloc_asprintf(mem_ctx, "%"PRIi64":%u:%s.%s:%s",
+ sbus_req->sender->uid, sbus_req->type, sbus_req->interface, sbus_req->member, sbus_req->path);
+}
+
+const char *
+_sbus_sss_key_s_0
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_request *sbus_req,
+ struct _sbus_sss_invoker_args_s *args)
+{
+ if (sbus_req->sender == NULL) {
+ return talloc_asprintf(mem_ctx, "-:%u:%s.%s:%s:%s",
+ sbus_req->type, sbus_req->interface, sbus_req->member,
+ sbus_req->path, args->arg0);
+ }
+
+ return talloc_asprintf(mem_ctx, "%"PRIi64":%u:%s.%s:%s:%s",
+ sbus_req->sender->uid, sbus_req->type, sbus_req->interface, sbus_req->member,
+ sbus_req->path, args->arg0);
+}
+
+const char *
+_sbus_sss_key_u_0
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_request *sbus_req,
+ struct _sbus_sss_invoker_args_u *args)
+{
+ if (sbus_req->sender == NULL) {
+ return talloc_asprintf(mem_ctx, "-:%u:%s.%s:%s:%" PRIu32 "",
+ sbus_req->type, sbus_req->interface, sbus_req->member,
+ sbus_req->path, args->arg0);
+ }
+
+ return talloc_asprintf(mem_ctx, "%"PRIi64":%u:%s.%s:%s:%" PRIu32 "",
+ sbus_req->sender->uid, sbus_req->type, sbus_req->interface, sbus_req->member,
+ sbus_req->path, args->arg0);
+}
+
+const char *
+_sbus_sss_key_ussu_0_1
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_request *sbus_req,
+ struct _sbus_sss_invoker_args_ussu *args)
+{
+ if (sbus_req->sender == NULL) {
+ return talloc_asprintf(mem_ctx, "-:%u:%s.%s:%s:%" PRIu32 ":%s",
+ sbus_req->type, sbus_req->interface, sbus_req->member,
+ sbus_req->path, args->arg0, args->arg1);
+ }
+
+ return talloc_asprintf(mem_ctx, "%"PRIi64":%u:%s.%s:%s:%" PRIu32 ":%s",
+ sbus_req->sender->uid, sbus_req->type, sbus_req->interface, sbus_req->member,
+ sbus_req->path, args->arg0, args->arg1);
+}
+
+const char *
+_sbus_sss_key_ussu_0_1_2
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_request *sbus_req,
+ struct _sbus_sss_invoker_args_ussu *args)
+{
+ if (sbus_req->sender == NULL) {
+ return talloc_asprintf(mem_ctx, "-:%u:%s.%s:%s:%" PRIu32 ":%s:%s",
+ sbus_req->type, sbus_req->interface, sbus_req->member,
+ sbus_req->path, args->arg0, args->arg1, args->arg2);
+ }
+
+ return talloc_asprintf(mem_ctx, "%"PRIi64":%u:%s.%s:%s:%" PRIu32 ":%s:%s",
+ sbus_req->sender->uid, sbus_req->type, sbus_req->interface, sbus_req->member,
+ sbus_req->path, args->arg0, args->arg1, args->arg2);
+}
+
+const char *
+_sbus_sss_key_usu_0_1
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_request *sbus_req,
+ struct _sbus_sss_invoker_args_usu *args)
+{
+ if (sbus_req->sender == NULL) {
+ return talloc_asprintf(mem_ctx, "-:%u:%s.%s:%s:%" PRIu32 ":%s",
+ sbus_req->type, sbus_req->interface, sbus_req->member,
+ sbus_req->path, args->arg0, args->arg1);
+ }
+
+ return talloc_asprintf(mem_ctx, "%"PRIi64":%u:%s.%s:%s:%" PRIu32 ":%s",
+ sbus_req->sender->uid, sbus_req->type, sbus_req->interface, sbus_req->member,
+ sbus_req->path, args->arg0, args->arg1);
+}
+
+const char *
+_sbus_sss_key_uusssu_0_1_2_3_4
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_request *sbus_req,
+ struct _sbus_sss_invoker_args_uusssu *args)
+{
+ if (sbus_req->sender == NULL) {
+ return talloc_asprintf(mem_ctx, "-:%u:%s.%s:%s:%" PRIu32 ":%" PRIu32 ":%s:%s:%s",
+ sbus_req->type, sbus_req->interface, sbus_req->member,
+ sbus_req->path, args->arg0, args->arg1, args->arg2, args->arg3, args->arg4);
+ }
+
+ return talloc_asprintf(mem_ctx, "%"PRIi64":%u:%s.%s:%s:%" PRIu32 ":%" PRIu32 ":%s:%s:%s",
+ sbus_req->sender->uid, sbus_req->type, sbus_req->interface, sbus_req->member,
+ sbus_req->path, args->arg0, args->arg1, args->arg2, args->arg3, args->arg4);
+}
+
+const char *
+_sbus_sss_key_uusu_0_1_2
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_request *sbus_req,
+ struct _sbus_sss_invoker_args_uusu *args)
+{
+ if (sbus_req->sender == NULL) {
+ return talloc_asprintf(mem_ctx, "-:%u:%s.%s:%s:%" PRIu32 ":%" PRIu32 ":%s",
+ sbus_req->type, sbus_req->interface, sbus_req->member,
+ sbus_req->path, args->arg0, args->arg1, args->arg2);
+ }
+
+ return talloc_asprintf(mem_ctx, "%"PRIi64":%u:%s.%s:%s:%" PRIu32 ":%" PRIu32 ":%s",
+ sbus_req->sender->uid, sbus_req->type, sbus_req->interface, sbus_req->member,
+ sbus_req->path, args->arg0, args->arg1, args->arg2);
+}
+
+const char *
+_sbus_sss_key_uuusu_0_1_2_3
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_request *sbus_req,
+ struct _sbus_sss_invoker_args_uuusu *args)
+{
+ if (sbus_req->sender == NULL) {
+ return talloc_asprintf(mem_ctx, "-:%u:%s.%s:%s:%" PRIu32 ":%" PRIu32 ":%" PRIu32 ":%s",
+ sbus_req->type, sbus_req->interface, sbus_req->member,
+ sbus_req->path, args->arg0, args->arg1, args->arg2, args->arg3);
+ }
+
+ return talloc_asprintf(mem_ctx, "%"PRIi64":%u:%s.%s:%s:%" PRIu32 ":%" PRIu32 ":%" PRIu32 ":%s",
+ sbus_req->sender->uid, sbus_req->type, sbus_req->interface, sbus_req->member,
+ sbus_req->path, args->arg0, args->arg1, args->arg2, args->arg3);
+}
diff --git a/src/sss_iface/sbus_sss_keygens.h b/src/sss_iface/sbus_sss_keygens.h
new file mode 100644
index 0000000..7e42c2c
--- /dev/null
+++ b/src/sss_iface/sbus_sss_keygens.h
@@ -0,0 +1,81 @@
+/*
+ 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 <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _SBUS_SSS_KEYGENS_H_
+#define _SBUS_SSS_KEYGENS_H_
+
+#include <talloc.h>
+
+#include "sbus/sbus_request.h"
+#include "sss_iface/sbus_sss_arguments.h"
+
+const char *
+_sbus_sss_key_
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_request *sbus_req);
+
+const char *
+_sbus_sss_key_s_0
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_request *sbus_req,
+ struct _sbus_sss_invoker_args_s *args);
+
+const char *
+_sbus_sss_key_u_0
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_request *sbus_req,
+ struct _sbus_sss_invoker_args_u *args);
+
+const char *
+_sbus_sss_key_ussu_0_1
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_request *sbus_req,
+ struct _sbus_sss_invoker_args_ussu *args);
+
+const char *
+_sbus_sss_key_ussu_0_1_2
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_request *sbus_req,
+ struct _sbus_sss_invoker_args_ussu *args);
+
+const char *
+_sbus_sss_key_usu_0_1
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_request *sbus_req,
+ struct _sbus_sss_invoker_args_usu *args);
+
+const char *
+_sbus_sss_key_uusssu_0_1_2_3_4
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_request *sbus_req,
+ struct _sbus_sss_invoker_args_uusssu *args);
+
+const char *
+_sbus_sss_key_uusu_0_1_2
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_request *sbus_req,
+ struct _sbus_sss_invoker_args_uusu *args);
+
+const char *
+_sbus_sss_key_uuusu_0_1_2_3
+ (TALLOC_CTX *mem_ctx,
+ struct sbus_request *sbus_req,
+ struct _sbus_sss_invoker_args_uuusu *args);
+
+#endif /* _SBUS_SSS_KEYGENS_H_ */
diff --git a/src/sss_iface/sbus_sss_server.h b/src/sss_iface/sbus_sss_server.h
new file mode 100644
index 0000000..cc8639a
--- /dev/null
+++ b/src/sss_iface/sbus_sss_server.h
@@ -0,0 +1,27 @@
+/*
+ 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 <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _SBUS_SSS_SERVER_H_
+#define _SBUS_SSS_SERVER_H_
+
+#include "sbus/sbus.h"
+#include "sbus/sbus_interface.h"
+#include "sss_iface/sbus_sss_interface.h"
+
+#endif /* _SBUS_SSS_SERVER_H_ */
diff --git a/src/sss_iface/sbus_sss_symbols.c b/src/sss_iface/sbus_sss_symbols.c
new file mode 100644
index 0000000..90454dc
--- /dev/null
+++ b/src/sss_iface/sbus_sss_symbols.c
@@ -0,0 +1,495 @@
+/*
+ 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 <http://www.gnu.org/licenses/>.
+*/
+
+#include "sbus/sbus_interface_declarations.h"
+#include "sss_iface/sbus_sss_symbols.h"
+
+const struct sbus_method_arguments
+_sbus_sss_args_org_freedesktop_FleetCommanderClient_ProcessSSSDFiles = {
+ .input = (const struct sbus_argument[]){
+ {.type = "u", .name = "uid"},
+ {.type = "s", .name = "user_dir"},
+ {.type = "q", .name = "prio"},
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_org_freedesktop_systemd1_Manager_RestartUnit = {
+ .input = (const struct sbus_argument[]){
+ {.type = "s", .name = "name"},
+ {.type = "s", .name = "mode"},
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {.type = "o", .name = "job"},
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_org_freedesktop_systemd1_Manager_StartUnit = {
+ .input = (const struct sbus_argument[]){
+ {.type = "s", .name = "name"},
+ {.type = "s", .name = "mode"},
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {.type = "o", .name = "job"},
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_org_freedesktop_systemd1_Manager_StopUnit = {
+ .input = (const struct sbus_argument[]){
+ {.type = "s", .name = "name"},
+ {.type = "s", .name = "mode"},
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {.type = "o", .name = "job"},
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_DataProvider_AccessControl_RefreshRules = {
+ .input = (const struct sbus_argument[]){
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_DataProvider_Autofs_Enumerate = {
+ .input = (const struct sbus_argument[]){
+ {.type = "u", .name = "dp_flags"},
+ {.type = "s", .name = "mapname"},
+ {.type = "u", .name = "cli_id"},
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_DataProvider_Autofs_GetEntry = {
+ .input = (const struct sbus_argument[]){
+ {.type = "u", .name = "dp_flags"},
+ {.type = "s", .name = "mapname"},
+ {.type = "s", .name = "entryname"},
+ {.type = "u", .name = "cli_id"},
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_DataProvider_Autofs_GetMap = {
+ .input = (const struct sbus_argument[]){
+ {.type = "u", .name = "dp_flags"},
+ {.type = "s", .name = "mapname"},
+ {.type = "u", .name = "cli_id"},
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_DataProvider_Backend_IsOnline = {
+ .input = (const struct sbus_argument[]){
+ {.type = "s", .name = "domain_name"},
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {.type = "b", .name = "status"},
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_DataProvider_Client_Register = {
+ .input = (const struct sbus_argument[]){
+ {.type = "s", .name = "Name"},
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_DataProvider_Failover_ActiveServer = {
+ .input = (const struct sbus_argument[]){
+ {.type = "s", .name = "service_name"},
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {.type = "s", .name = "server"},
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_DataProvider_Failover_ListServers = {
+ .input = (const struct sbus_argument[]){
+ {.type = "s", .name = "service_name"},
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {.type = "as", .name = "servers"},
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_DataProvider_Failover_ListServices = {
+ .input = (const struct sbus_argument[]){
+ {.type = "s", .name = "domain_name"},
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {.type = "as", .name = "services"},
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_ProxyChild_Auth_PAM = {
+ .input = (const struct sbus_argument[]){
+ {.type = "issssssuayuayiu", .name = "pam_data"},
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {.type = "uua(uay)", .name = "pam_response"},
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_ProxyChild_Client_Register = {
+ .input = (const struct sbus_argument[]){
+ {.type = "u", .name = "ID"},
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_Responder_Domain_SetActive = {
+ .input = (const struct sbus_argument[]){
+ {.type = "s", .name = "name"},
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_Responder_Domain_SetInconsistent = {
+ .input = (const struct sbus_argument[]){
+ {.type = "s", .name = "name"},
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_Responder_NegativeCache_ResetGroups = {
+ .input = (const struct sbus_argument[]){
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_Responder_NegativeCache_ResetUsers = {
+ .input = (const struct sbus_argument[]){
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_dataprovider_getAccountDomain = {
+ .input = (const struct sbus_argument[]){
+ {.type = "u", .name = "dp_flags"},
+ {.type = "u", .name = "entry_type"},
+ {.type = "s", .name = "filter"},
+ {.type = "u", .name = "cli_id"},
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {.type = "q", .name = "dp_error"},
+ {.type = "u", .name = "error"},
+ {.type = "s", .name = "domain_name"},
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_dataprovider_getAccountInfo = {
+ .input = (const struct sbus_argument[]){
+ {.type = "u", .name = "dp_flags"},
+ {.type = "u", .name = "entry_type"},
+ {.type = "s", .name = "filter"},
+ {.type = "s", .name = "domain"},
+ {.type = "s", .name = "extra"},
+ {.type = "u", .name = "cli_id"},
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {.type = "q", .name = "dp_error"},
+ {.type = "u", .name = "error"},
+ {.type = "s", .name = "error_message"},
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_dataprovider_getDomains = {
+ .input = (const struct sbus_argument[]){
+ {.type = "s", .name = "domain_hint"},
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {.type = "q", .name = "dp_error"},
+ {.type = "u", .name = "error"},
+ {.type = "s", .name = "error_message"},
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_dataprovider_hostHandler = {
+ .input = (const struct sbus_argument[]){
+ {.type = "u", .name = "dp_flags"},
+ {.type = "s", .name = "name"},
+ {.type = "s", .name = "alias"},
+ {.type = "u", .name = "cli_id"},
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {.type = "q", .name = "dp_error"},
+ {.type = "u", .name = "error"},
+ {.type = "s", .name = "error_message"},
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_dataprovider_pamHandler = {
+ .input = (const struct sbus_argument[]){
+ {.type = "issssssuayuayiu", .name = "pam_data"},
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {.type = "uua(uay)", .name = "pam_response"},
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_dataprovider_resolverHandler = {
+ .input = (const struct sbus_argument[]){
+ {.type = "u", .name = "dp_flags"},
+ {.type = "u", .name = "entry_type"},
+ {.type = "u", .name = "filter_type"},
+ {.type = "s", .name = "filter_value"},
+ {.type = "u", .name = "cli_id"},
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {.type = "q", .name = "dp_error"},
+ {.type = "u", .name = "error"},
+ {.type = "s", .name = "error_message"},
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_dataprovider_sudoHandler = {
+ .input = (const struct sbus_argument[]){
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {.type = "q", .name = "dp_error"},
+ {.type = "u", .name = "error"},
+ {.type = "s", .name = "error_message"},
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_monitor_RegisterService = {
+ .input = (const struct sbus_argument[]){
+ {.type = "s", .name = "name"},
+ {.type = "q", .name = "version"},
+ {.type = "q", .name = "type"},
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {.type = "q", .name = "monitor_version"},
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_nss_MemoryCache_InvalidateAllGroups = {
+ .input = (const struct sbus_argument[]){
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_nss_MemoryCache_InvalidateAllInitgroups = {
+ .input = (const struct sbus_argument[]){
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_nss_MemoryCache_InvalidateAllUsers = {
+ .input = (const struct sbus_argument[]){
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_nss_MemoryCache_InvalidateGroupById = {
+ .input = (const struct sbus_argument[]){
+ {.type = "u", .name = "gid"},
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_nss_MemoryCache_UpdateInitgroups = {
+ .input = (const struct sbus_argument[]){
+ {.type = "s", .name = "user"},
+ {.type = "s", .name = "domain"},
+ {.type = "au", .name = "groups"},
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_service_clearEnumCache = {
+ .input = (const struct sbus_argument[]){
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_service_clearMemcache = {
+ .input = (const struct sbus_argument[]){
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_service_clearNegcache = {
+ .input = (const struct sbus_argument[]){
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_service_goOffline = {
+ .input = (const struct sbus_argument[]){
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_service_resetOffline = {
+ .input = (const struct sbus_argument[]){
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_service_rotateLogs = {
+ .input = (const struct sbus_argument[]){
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {NULL}
+ }
+};
+
+const struct sbus_method_arguments
+_sbus_sss_args_sssd_service_sysbusReconnect = {
+ .input = (const struct sbus_argument[]){
+ {NULL}
+ },
+ .output = (const struct sbus_argument[]){
+ {NULL}
+ }
+};
diff --git a/src/sss_iface/sbus_sss_symbols.h b/src/sss_iface/sbus_sss_symbols.h
new file mode 100644
index 0000000..0a9b1b8
--- /dev/null
+++ b/src/sss_iface/sbus_sss_symbols.h
@@ -0,0 +1,142 @@
+/*
+ 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 <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _SBUS_SSS_SYMBOLS_H_
+#define _SBUS_SSS_SYMBOLS_H_
+
+#include "sbus/sbus_interface_declarations.h"
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_org_freedesktop_FleetCommanderClient_ProcessSSSDFiles;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_org_freedesktop_systemd1_Manager_RestartUnit;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_org_freedesktop_systemd1_Manager_StartUnit;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_org_freedesktop_systemd1_Manager_StopUnit;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_DataProvider_AccessControl_RefreshRules;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_DataProvider_Autofs_Enumerate;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_DataProvider_Autofs_GetEntry;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_DataProvider_Autofs_GetMap;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_DataProvider_Backend_IsOnline;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_DataProvider_Client_Register;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_DataProvider_Failover_ActiveServer;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_DataProvider_Failover_ListServers;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_DataProvider_Failover_ListServices;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_ProxyChild_Auth_PAM;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_ProxyChild_Client_Register;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_Responder_Domain_SetActive;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_Responder_Domain_SetInconsistent;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_Responder_NegativeCache_ResetGroups;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_Responder_NegativeCache_ResetUsers;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_dataprovider_getAccountDomain;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_dataprovider_getAccountInfo;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_dataprovider_getDomains;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_dataprovider_hostHandler;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_dataprovider_pamHandler;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_dataprovider_resolverHandler;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_dataprovider_sudoHandler;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_monitor_RegisterService;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_nss_MemoryCache_InvalidateAllGroups;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_nss_MemoryCache_InvalidateAllInitgroups;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_nss_MemoryCache_InvalidateAllUsers;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_nss_MemoryCache_InvalidateGroupById;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_nss_MemoryCache_UpdateInitgroups;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_service_clearEnumCache;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_service_clearMemcache;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_service_clearNegcache;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_service_goOffline;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_service_resetOffline;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_service_rotateLogs;
+
+extern const struct sbus_method_arguments
+_sbus_sss_args_sssd_service_sysbusReconnect;
+
+#endif /* _SBUS_SSS_SYMBOLS_H_ */
diff --git a/src/sss_iface/sss_iface.c b/src/sss_iface/sss_iface.c
new file mode 100644
index 0000000..5711f2d
--- /dev/null
+++ b/src/sss_iface/sss_iface.c
@@ -0,0 +1,193 @@
+/*
+ Authors:
+ Pavel Březina <pbrezina@redhat.com>
+
+ Copyright (C) 2018 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 <http://www.gnu.org/licenses/>.
+*/
+
+#include <unistd.h>
+#include <sys/stat.h>
+
+#include "util/util.h"
+#include "sbus/sbus.h"
+#include "sbus/sbus_opath.h"
+#include "sss_iface/sss_iface_async.h"
+
+char *
+sss_iface_domain_address(TALLOC_CTX *mem_ctx,
+ struct sss_domain_info *domain)
+{
+ struct sss_domain_info *head;
+
+ /* There is only one bus that belongs to the top level domain. */
+ head = get_domains_head(domain);
+
+ return talloc_asprintf(mem_ctx, SSS_BACKEND_ADDRESS, head->name);
+}
+
+char *
+sss_iface_domain_bus(TALLOC_CTX *mem_ctx,
+ struct sss_domain_info *domain)
+{
+ struct sss_domain_info *head;
+ char *safe_name;
+ char *bus_name;
+
+
+ /* There is only one bus that belongs to the top level domain. */
+ head = get_domains_head(domain);
+
+ safe_name = sbus_opath_escape(mem_ctx, head->name);
+ if (safe_name == NULL) {
+ return NULL;
+ }
+
+ /* Parts of bus names must not start with digit thus we concatenate
+ * the name with underscore instead of period. */
+ bus_name = talloc_asprintf(mem_ctx, "sssd.domain_%s", safe_name);
+ talloc_free(safe_name);
+
+ return bus_name;
+}
+
+char *
+sss_iface_proxy_bus(TALLOC_CTX *mem_ctx,
+ uint32_t id)
+{
+ /* Parts of bus names must not start with digit thus we concatenate
+ * the name with underscore instead of period. */
+ return talloc_asprintf(mem_ctx, "sssd.proxy_%"PRIu32, id);
+}
+
+errno_t
+sss_iface_connect_address(TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ const char *conn_name,
+ const char *address,
+ time_t *last_request_time,
+ struct sbus_connection **_conn)
+{
+ struct sbus_connection *conn;
+ const char *filename;
+ errno_t ret;
+ uid_t check_uid;
+ gid_t check_gid;
+
+ if (address == NULL) {
+ return EINVAL;
+ }
+
+ filename = strchr(address, '/');
+ if (filename == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Unexpected dbus address [%s].\n", address);
+ return EIO;
+ }
+
+ check_uid = geteuid();
+ check_gid = getegid();
+
+ /* Ignore ownership checks when the server runs as root. This is the
+ * case when privileged monitor is setting up sockets for unprivileged
+ * responders */
+ if (check_uid == 0) check_uid = -1;
+ if (check_gid == 0) check_gid = -1;
+
+ ret = check_file(filename, check_uid, check_gid,
+ S_IFSOCK|S_IRUSR|S_IWUSR, 0, NULL, true);
+ if (ret != EOK) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "check_file failed for [%s].\n", filename);
+ return EIO;
+ }
+
+ conn = sbus_connect_private(mem_ctx, ev, address,
+ conn_name, last_request_time);
+ if (conn == NULL) { /* most probably sbus_dbus_connect_address() failed */
+ return EFAULT;
+ }
+
+ *_conn = conn;
+
+ return EOK;
+}
+
+static void
+sss_monitor_service_init_done(struct tevent_req *req);
+
+errno_t
+sss_monitor_service_init(TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ const char *conn_name,
+ const char *svc_name,
+ uint16_t svc_version,
+ uint16_t svc_type,
+ time_t *last_request_time,
+ struct sbus_connection **_conn)
+{
+ struct sbus_connection *conn;
+ struct tevent_req *req;
+ errno_t ret;
+
+ ret = sss_iface_connect_address(mem_ctx, ev, conn_name,
+ SSS_MONITOR_ADDRESS,
+ last_request_time, &conn);
+ if (ret != EOK) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to connect to monitor sbus server "
+ "[%d]: %s\n", ret, sss_strerror(ret));
+ return ret;
+ }
+
+ req = sbus_call_monitor_RegisterService_send(conn, conn, SSS_BUS_MONITOR,
+ SSS_BUS_PATH, svc_name,
+ svc_version, svc_type);
+ if (req == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n");
+ ret = ENOMEM;
+ goto done;
+ }
+
+ tevent_req_set_callback(req, sss_monitor_service_init_done, conn);
+
+ *_conn = conn;
+
+ ret = EOK;
+
+done:
+ if (ret != EOK) {
+ talloc_free(conn);
+ }
+
+ return ret;
+}
+
+static void
+sss_monitor_service_init_done(struct tevent_req *req)
+{
+ uint16_t version;
+ errno_t ret;
+
+ ret = sbus_call_monitor_RegisterService_recv(req, &version);
+ talloc_zfree(req);
+
+ if (ret != EOK) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to register client in monitor "
+ "[%d]: %s\n", ret, sss_strerror(ret));
+ return;
+ }
+
+ DEBUG(SSSDBG_CONF_SETTINGS, "Got id ack and version (%d) from Monitor\n",
+ version);
+}
diff --git a/src/sss_iface/sss_iface.h b/src/sss_iface/sss_iface.h
new file mode 100644
index 0000000..b705958
--- /dev/null
+++ b/src/sss_iface/sss_iface.h
@@ -0,0 +1,83 @@
+/*
+ Authors:
+ Pavel Březina <pbrezina@redhat.com>
+
+ Copyright (C) 2018 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 <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _SSS_IFACE_H_
+#define _SSS_IFACE_H_
+
+#include "config.h"
+
+#include <stdint.h>
+#include <talloc.h>
+
+#include "confdb/confdb.h"
+#include "providers/data_provider_req.h"
+#include "providers/data_provider/dp_flags.h"
+
+#define SSS_MONITOR_ADDRESS "unix:path=" PIPE_PATH "/private/sbus-monitor"
+#define SSS_BACKEND_ADDRESS "unix:path=" PIPE_PATH "/private/sbus-dp_%s"
+
+#define SSS_BUS_MONITOR "sssd.monitor"
+#define SSS_BUS_AUTOFS "sssd.autofs"
+#define SSS_BUS_IFP "sssd.ifp"
+#define SSS_BUS_NSS "sssd.nss"
+#define SSS_BUS_PAC "sssd.pac"
+#define SSS_BUS_PAM "sssd.pam"
+#define SSS_BUS_SSH "sssd.ssh"
+#define SSS_BUS_SUDO "sssd.sudo"
+
+#define SSS_BUS_PATH "/sssd"
+
+#define NSS_SBUS_SERVICE_NAME "nss"
+#define NSS_SBUS_SERVICE_VERSION 0x0001
+#define SSS_PAM_SBUS_SERVICE_NAME "pam"
+#define SSS_PAM_SBUS_SERVICE_VERSION 0x0001
+#define SSS_SUDO_SBUS_SERVICE_NAME "sudo"
+#define SSS_SUDO_SBUS_SERVICE_VERSION 0x0001
+#define SSS_AUTOFS_SBUS_SERVICE_NAME "autofs"
+#define SSS_AUTOFS_SBUS_SERVICE_VERSION 0x0001
+#define SSS_SSH_SBUS_SERVICE_NAME "ssh"
+#define SSS_SSH_SBUS_SERVICE_VERSION 0x0001
+#define SSS_IFP_SBUS_SERVICE_NAME "ifp"
+#define SSS_IFP_SBUS_SERVICE_VERSION 0x0001
+#define PAC_SBUS_SERVICE_NAME "pac"
+#define PAC_SBUS_SERVICE_VERSION 0x0001
+
+/**
+ * Return domain address.
+ */
+char *
+sss_iface_domain_address(TALLOC_CTX *mem_ctx,
+ struct sss_domain_info *domain);
+
+/**
+ * Return domain bus name.
+ */
+char *
+sss_iface_domain_bus(TALLOC_CTX *mem_ctx,
+ struct sss_domain_info *domain);
+
+/**
+ * Return proxy child bus name.
+ */
+char *
+sss_iface_proxy_bus(TALLOC_CTX *mem_ctx,
+ uint32_t id);
+
+#endif /* _SSS_IFACE_H_ */
diff --git a/src/sss_iface/sss_iface.xml b/src/sss_iface/sss_iface.xml
new file mode 100644
index 0000000..82c65aa
--- /dev/null
+++ b/src/sss_iface/sss_iface.xml
@@ -0,0 +1,202 @@
+<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
+ "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+<node>
+ <interface name="sssd.monitor">
+ <annotation name="codegen.Name" value="monitor" />
+ <annotation name="codegen.SyncCaller" value="false" />
+ <method name="RegisterService">
+ <arg type="s" name="name" direction="in" />
+ <arg type="q" name="version" direction="in" />
+ <arg type="q" name="type" direction="in" />
+ <arg type="q" name="monitor_version" direction="out" />
+ </method>
+ </interface>
+
+ <interface name="sssd.service">
+ <annotation name="codegen.Name" value="service" />
+ <annotation name="codegen.SyncCaller" value="false" />
+ <method name="goOffline" />
+ <method name="resetOffline" />
+ <method name="rotateLogs" />
+ <method name="clearMemcache" />
+ <method name="clearNegcache" />
+ <method name="clearEnumCache" />
+ <method name="sysbusReconnect" />
+ <property name="debug_level" type="u" access="readwrite">
+ <annotation name="codegen.SyncCaller" value="true" />
+ <annotation name="codegen.AsyncCaller" value="false" />
+ </property>
+ </interface>
+
+ <interface name="sssd.ProxyChild.Client">
+ <annotation name="codegen.Name" value="proxy_client" />
+ <annotation name="codegen.SyncCaller" value="false" />
+ <method name="Register">
+ <arg name="ID" type="u" direction="in" />
+ </method>
+ </interface>
+
+ <interface name="sssd.ProxyChild.Auth">
+ <annotation name="codegen.Name" value="proxy_auth" />
+ <annotation name="codegen.SyncCaller" value="false" />
+ <method name="PAM">
+ <arg name="pam_data" type="pam_data" direction="in" />
+ <arg name="pam_response" type="pam_response" direction="out" />
+ </method>
+ </interface>
+
+ <interface name="sssd.DataProvider.Client">
+ <annotation name="codegen.Name" value="dp_client" />
+ <annotation name="codegen.SyncCaller" value="false" />
+ <method name="Register">
+ <arg name="Name" type="s" direction="in" />
+ </method>
+ </interface>
+
+ <interface name="sssd.DataProvider.Backend">
+ <annotation name="codegen.Name" value="dp_backend" />
+ <annotation name="codegen.SyncCaller" value="false" />
+ <method name="IsOnline">
+ <arg name="domain_name" type="s" direction="in" key="1" />
+ <arg name="status" type="b" direction="out" />
+ </method>
+ </interface>
+
+ <interface name="sssd.DataProvider.Failover">
+ <annotation name="codegen.Name" value="dp_failover" />
+ <annotation name="codegen.SyncCaller" value="false" />
+ <method name="ListServices">
+ <arg name="domain_name" type="s" direction="in" key="1" />
+ <arg name="services" type="as" direction="out" />
+ </method>
+ <method name="ActiveServer">
+ <arg name="service_name" type="s" direction="in" key="1" />
+ <arg name="server" type="s" direction="out" />
+ </method>
+ <method name="ListServers">
+ <arg name="service_name" type="s" direction="in" key="1" />
+ <arg name="servers" type="as" direction="out" />
+ </method>
+ </interface>
+
+ <interface name="sssd.DataProvider.AccessControl">
+ <annotation name="codegen.Name" value="dp_access" />
+ <annotation name="codegen.SyncCaller" value="false" />
+ <method name="RefreshRules" key="True" />
+ </interface>
+
+ <interface name="sssd.DataProvider.Autofs">
+ <annotation name="codegen.Name" value="dp_autofs" />
+ <annotation name="codegen.SyncCaller" value="false" />
+ <method name="GetMap">
+ <arg name="dp_flags" type="u" direction="in" key="1" />
+ <arg name="mapname" type="s" direction="in" key="2" />
+ <arg name="cli_id" type="u" direction="in" />
+ </method>
+ <method name="GetEntry">
+ <arg name="dp_flags" type="u" direction="in" key="1" />
+ <arg name="mapname" type="s" direction="in" key="2" />
+ <arg name="entryname" type="s" direction="in" key="3" />
+ <arg name="cli_id" type="u" direction="in" />
+ </method>
+ <method name="Enumerate">
+ <arg name="dp_flags" type="u" direction="in" key="1" />
+ <arg name="mapname" type="s" direction="in" key="2" />
+ <arg name="cli_id" type="u" direction="in" />
+ </method>
+ </interface>
+
+ <interface name="sssd.dataprovider">
+ <annotation name="codegen.Name" value="dp_dp" />
+ <annotation name="codegen.SyncCaller" value="false" />
+ <method name="pamHandler">
+ <arg name="pam_data" type="pam_data" direction="in" />
+ <arg name="pam_response" type="pam_response" direction="out" />
+ </method>
+ <method name="sudoHandler">
+ <annotation name="codegen.CustomInputHandler" value="true" />
+ <arg name="dp_error" type="q" direction="out" />
+ <arg name="error" type="u" direction="out" />
+ <arg name="error_message" type="s" direction="out" />
+ </method>
+ <method name="hostHandler">
+ <arg name="dp_flags" type="u" direction="in" key="1" />
+ <arg name="name" type="s" direction="in" key="2" />
+ <arg name="alias" type="s" direction="in" />
+ <arg name="cli_id" type="u" direction="in" />
+ <arg name="dp_error" type="q" direction="out" />
+ <arg name="error" type="u" direction="out" />
+ <arg name="error_message" type="s" direction="out" />
+ </method>
+ <method name="resolverHandler">
+ <arg name="dp_flags" type="u" direction="in" key="1" />
+ <arg name="entry_type" type="u" direction="in" key="2" />
+ <arg name="filter_type" type="u" direction="in" key="3" />
+ <arg name="filter_value" type="s" direction="in" key="4" />
+ <arg name="cli_id" type="u" direction="in" />
+ <arg name="dp_error" type="q" direction="out" />
+ <arg name="error" type="u" direction="out" />
+ <arg name="error_message" type="s" direction="out" />
+ </method>
+ <method name="getDomains">
+ <arg name="domain_hint" type="s" direction="in" key="1" />
+ <arg name="dp_error" type="q" direction="out" />
+ <arg name="error" type="u" direction="out" />
+ <arg name="error_message" type="s" direction="out" />
+ </method>
+ <method name="getAccountInfo">
+ <arg name="dp_flags" type="u" direction="in" key="1" />
+ <arg name="entry_type" type="u" direction="in" key="2" />
+ <arg name="filter" type="s" direction="in" key="3" />
+ <arg name="domain" type="s" direction="in" key="4" />
+ <arg name="extra" type="s" direction="in" key="5" />
+ <arg name="cli_id" type="u" direction="in" />
+ <arg name="dp_error" type="q" direction="out" />
+ <arg name="error" type="u" direction="out" />
+ <arg name="error_message" type="s" direction="out" />
+ </method>
+ <method name="getAccountDomain">
+ <arg name="dp_flags" type="u" direction="in" key="1" />
+ <arg name="entry_type" type="u" direction="in" key="2" />
+ <arg name="filter" type="s" direction="in" key="3" />
+ <arg name="cli_id" type="u" direction="in" />
+ <arg name="dp_error" type="q" direction="out" />
+ <arg name="error" type="u" direction="out" />
+ <arg name="domain_name" type="s" direction="out" />
+ </method>
+ </interface>
+
+ <interface name="sssd.Responder.Domain">
+ <annotation name="codegen.Name" value="resp_domain" />
+ <annotation name="codegen.SyncCaller" value="false" />
+ <method name="SetActive">
+ <arg name="name" type="s" direction="in" key="1" />
+ </method>
+ <method name="SetInconsistent">
+ <arg name="name" type="s" direction="in" key="1" />
+ </method>
+ </interface>
+
+ <interface name="sssd.Responder.NegativeCache">
+ <annotation name="codegen.Name" value="resp_negcache" />
+ <annotation name="codegen.SyncCaller" value="false" />
+ <method name="ResetUsers" key="True" />
+ <method name="ResetGroups" key="True" />
+ </interface>
+
+ <interface name="sssd.nss.MemoryCache">
+ <annotation name="codegen.Name" value="nss_memcache" />
+ <annotation name="codegen.SyncCaller" value="false" />
+ <method name="UpdateInitgroups">
+ <arg name="user" type="s" direction="in" />
+ <arg name="domain" type="s" direction="in" />
+ <arg name="groups" type="au" direction="in" />
+ </method>
+ <method name="InvalidateAllUsers" key="True" />
+ <method name="InvalidateAllGroups" key="True" />
+ <method name="InvalidateAllInitgroups" key="True" />
+ <method name="InvalidateGroupById" key="True">
+ <arg name="gid" type="u" direction="in" key="1" />
+ </method>
+ </interface>
+</node>
diff --git a/src/sss_iface/sss_iface_async.h b/src/sss_iface/sss_iface_async.h
new file mode 100644
index 0000000..6843356
--- /dev/null
+++ b/src/sss_iface/sss_iface_async.h
@@ -0,0 +1,61 @@
+/*
+ Authors:
+ Pavel Březina <pbrezina@redhat.com>
+
+ Copyright (C) 2018 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 <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _SSS_IFACE_ASYNC_H_
+#define _SSS_IFACE_ASYNC_H_
+
+#include <tevent.h>
+#include <time.h>
+
+#include "sss_iface/sbus_sss_server.h"
+#include "sss_iface/sbus_sss_client_async.h"
+#include "sss_iface/sss_iface.h"
+
+/**
+ * Check socket and connect to private sbus server.
+ */
+errno_t
+sss_iface_connect_address(TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ const char *conn_name,
+ const char *address,
+ time_t *last_request_time,
+ struct sbus_connection **_conn);
+
+enum mt_svc_type {
+ MT_SVC_SERVICE,
+ MT_SVC_PROVIDER
+};
+
+/**
+ * Connect to monitor sbus server and register standard service interface
+ * on SSS_BUS_PATH object path.
+ */
+errno_t
+sss_monitor_service_init(TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ const char *conn_name,
+ const char *svc_name,
+ uint16_t svc_version,
+ uint16_t svc_type,
+ time_t *last_request_time,
+ struct sbus_connection **_conn);
+
+#endif /* _SSS_IFACE_ASYNC_H_ */
diff --git a/src/sss_iface/sss_iface_sync.h b/src/sss_iface/sss_iface_sync.h
new file mode 100644
index 0000000..bb0a5fc
--- /dev/null
+++ b/src/sss_iface/sss_iface_sync.h
@@ -0,0 +1,27 @@
+/*
+ Authors:
+ Pavel Březina <pbrezina@redhat.com>
+
+ Copyright (C) 2018 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 <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _SSS_IFACE_SYNC_H_
+#define _SSS_IFACE_SYNC_H_
+
+#include "sss_iface/sbus_sss_client_sync.h"
+#include "sss_iface/sss_iface.h"
+
+#endif /* _SSS_IFACE_SYNC_H_ */
diff --git a/src/sss_iface/sss_iface_types.c b/src/sss_iface/sss_iface_types.c
new file mode 100644
index 0000000..978f4ac
--- /dev/null
+++ b/src/sss_iface/sss_iface_types.c
@@ -0,0 +1,442 @@
+/*
+ Authors:
+ Pavel Březina <pbrezina@redhat.com>
+
+ 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 <http://www.gnu.org/licenses/>.
+*/
+
+#include <errno.h>
+#include <string.h>
+#include <stdint.h>
+#include <talloc.h>
+#include <dbus/dbus.h>
+
+#include "util/util.h"
+#include "util/sss_utf8.h"
+#include "sss_iface/sss_iface_types.h"
+#include "sbus/interface/sbus_iterator_readers.h"
+#include "sbus/interface/sbus_iterator_writers.h"
+
+/**
+ * D-Bus signature: issssssuayuayiu
+ */
+errno_t sbus_iterator_read_pam_data(TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iterator,
+ struct pam_data **_pd)
+{
+ struct pam_data *pd;
+ uint32_t authtok_type;
+ uint8_t *authtok_data;
+ uint32_t new_authtok_type;
+ uint8_t *new_authtok_data;
+ errno_t ret;
+
+ pd = create_pam_data(mem_ctx);
+ if (pd == NULL) {
+ return ENOMEM;
+ }
+
+ ret = sbus_iterator_read_i(iterator, &pd->cmd);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_read_S(pd, iterator, &pd->user);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_read_S(pd, iterator, &pd->domain);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_read_S(pd, iterator, &pd->service);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_read_S(pd, iterator, &pd->tty);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_read_S(pd, iterator, &pd->ruser);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_read_S(pd, iterator, &pd->rhost);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_read_u(iterator, &authtok_type);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_read_ay(pd, iterator, &authtok_data);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_read_u(iterator, &new_authtok_type);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_read_ay(pd, iterator, &new_authtok_data);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_read_i(iterator, &pd->priv);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_read_u(iterator, &pd->cli_pid);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_read_u(iterator, &pd->child_pid);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_read_u(iterator, &pd->client_id_num);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ pd->authtok = sss_authtok_new(pd);
+ if (pd->authtok == NULL) {
+ ret = ENOMEM;
+ goto done;
+ }
+
+ pd->newauthtok = sss_authtok_new(pd);
+ if (pd->newauthtok == NULL) {
+ ret = ENOMEM;
+ goto done;
+ }
+
+ ret = sss_authtok_set(pd->authtok, authtok_type, authtok_data,
+ talloc_array_length(authtok_data));
+ if (ret != EOK) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Failed to set auth token [%d]: %s\n",
+ ret, sss_strerror(ret));
+ goto done;
+ }
+
+ ret = sss_authtok_set(pd->newauthtok, new_authtok_type, new_authtok_data,
+ talloc_array_length(new_authtok_data));
+ if (ret != EOK) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Failed to set auth token [%d]: %s\n",
+ ret, sss_strerror(ret));
+ goto done;
+ }
+
+ *_pd = pd;
+
+ ret = EOK;
+
+done:
+ if (ret != EOK) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to read pam data [%d]: %s\n",
+ ret, sss_strerror(ret));
+ talloc_free(pd);
+ }
+
+ return ret;
+}
+
+/**
+ * D-Bus signature: issssssuayuayiu
+ */
+errno_t sbus_iterator_write_pam_data(DBusMessageIter *iterator,
+ struct pam_data *pd)
+{
+ uint32_t authtok_type;
+ uint8_t *authtok_data;
+ int authtok_length;
+ uint32_t new_authtok_type;
+ uint8_t *new_authtok_data;
+ int new_authtok_length;
+ errno_t ret;
+
+ authtok_type = (uint32_t)sss_authtok_get_type(pd->authtok);
+ authtok_data = sss_authtok_get_data(pd->authtok);
+ authtok_length = sss_authtok_get_size(pd->authtok);
+ new_authtok_type = (uint32_t)sss_authtok_get_type(pd->newauthtok);
+ new_authtok_data = sss_authtok_get_data(pd->newauthtok);
+ new_authtok_length = sss_authtok_get_size(pd->newauthtok);
+
+ ret = sbus_iterator_write_i(iterator, pd->cmd);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_write_S(iterator, pd->user);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_write_S(iterator, pd->domain);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_write_S(iterator, pd->service);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_write_S(iterator, pd->tty);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_write_S(iterator, pd->ruser);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_write_S(iterator, pd->rhost);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_write_u(iterator, authtok_type);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_write_basic_array_len(iterator, DBUS_TYPE_BYTE, uint8_t,
+ authtok_data, authtok_length);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_write_u(iterator, new_authtok_type);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_write_basic_array_len(iterator, DBUS_TYPE_BYTE, uint8_t,
+ new_authtok_data, new_authtok_length);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_write_i(iterator, pd->priv);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_write_u(iterator, pd->cli_pid);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_write_u(iterator, pd->child_pid);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_write_u(iterator, pd->client_id_num);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = EOK;
+
+done:
+ if (ret != EOK) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to write pam data [%d]: %s\n",
+ ret, sss_strerror(ret));
+ }
+
+ return ret;
+}
+
+/**
+ * D-Bus signature: uua(uay)
+ */
+errno_t sbus_iterator_read_pam_response(TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iterator,
+ struct pam_data **_pd)
+{
+ struct pam_data *pd;
+ DBusMessageIter array_iter;
+ DBusMessageIter struct_iter;
+ uint32_t pam_status;
+ uint32_t account_locked;
+ uint32_t resp_type;
+ uint8_t *resp_data;
+ errno_t ret;
+ int type;
+
+ pd = create_pam_data(mem_ctx);
+ if (pd == NULL) {
+ return ENOMEM;
+ }
+
+ ret = sbus_iterator_read_u(iterator, &pam_status);
+ if (ret != EOK) {
+ goto done;
+ }
+ pd->pam_status = pam_status;
+
+ ret = sbus_iterator_read_u(iterator, &account_locked);
+ if (ret != EOK) {
+ goto done;
+ }
+ pd->account_locked = account_locked;
+
+ type = dbus_message_iter_get_arg_type(iterator);
+ if (type != DBUS_TYPE_ARRAY) {
+ ret = EINVAL;
+ goto done;
+ }
+
+ type = dbus_message_iter_get_element_type(iterator);
+ if (type != DBUS_TYPE_STRUCT) {
+ ret = EINVAL;
+ goto done;
+ }
+
+ dbus_message_iter_recurse(iterator, &array_iter);
+ while (dbus_message_iter_get_arg_type(&array_iter) != DBUS_TYPE_INVALID) {
+ type = dbus_message_iter_get_arg_type(&array_iter);
+ if (type != DBUS_TYPE_STRUCT) {
+ ret = EINVAL;
+ goto done;
+ }
+
+ dbus_message_iter_recurse(&array_iter, &struct_iter);
+
+ ret = sbus_iterator_read_u(&struct_iter, &resp_type);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_read_ay(pd, &struct_iter, &resp_data);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = pam_add_response(pd, resp_type, talloc_array_length(resp_data),
+ resp_data);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ talloc_free(resp_data);
+
+ dbus_message_iter_next(&array_iter);
+ }
+
+ *_pd = pd;
+
+ ret = EOK;
+
+done:
+ if (ret != EOK) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to read pam data [%d]: %s\n",
+ ret, sss_strerror(ret));
+ talloc_free(pd);
+ }
+
+ return ret;
+}
+
+/**
+ * D-Bus signature: uua(uay)
+ */
+errno_t sbus_iterator_write_pam_response(DBusMessageIter *iterator,
+ struct pam_data *pd)
+{
+ struct response_data *resp;
+ DBusMessageIter array_iter;
+ DBusMessageIter struct_iter;
+ dbus_bool_t dbret;
+ errno_t ret;
+
+ ret = sbus_iterator_write_u(iterator, pd->pam_status);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_write_u(iterator, pd->account_locked);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ dbret = dbus_message_iter_open_container(iterator, DBUS_TYPE_ARRAY,
+ "(uay)", &array_iter);
+ if (!dbret) {
+ ret = EIO;
+ goto done;
+ }
+
+ for (resp = pd->resp_list; resp != NULL; resp = resp->next) {
+ dbret = dbus_message_iter_open_container(&array_iter, DBUS_TYPE_STRUCT,
+ NULL, &struct_iter);
+ if (!dbret) {
+ ret = EIO;
+ goto done;
+ }
+
+ ret = sbus_iterator_write_u(&struct_iter, resp->type);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ ret = sbus_iterator_write_basic_array_len(&struct_iter, DBUS_TYPE_BYTE,
+ uint8_t, resp->data, resp->len);
+ if (ret != EOK) {
+ goto done;
+ }
+
+ dbret = dbus_message_iter_close_container(&array_iter, &struct_iter);
+ if (!dbret) {
+ dbus_message_iter_abandon_container(&array_iter, &struct_iter);
+ dbus_message_iter_abandon_container(iterator, &array_iter);
+ ret = EIO;
+ goto done;
+ }
+ }
+
+ dbret = dbus_message_iter_close_container(iterator, &array_iter);
+ if (!dbret) {
+ dbus_message_iter_abandon_container(iterator, &array_iter);
+ ret = EIO;
+ goto done;
+ }
+
+ ret = EOK;
+
+done:
+ if (ret != EOK) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Unable to write pam response [%d]: %s\n",
+ ret, sss_strerror(ret));
+ }
+
+ return ret;
+}
diff --git a/src/sss_iface/sss_iface_types.h b/src/sss_iface/sss_iface_types.h
new file mode 100644
index 0000000..c9b0d5d
--- /dev/null
+++ b/src/sss_iface/sss_iface_types.h
@@ -0,0 +1,43 @@
+/*
+ Authors:
+ Pavel Březina <pbrezina@redhat.com>
+
+ 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 <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _SSS_IFACE_CUSTOM_TYPES_H_
+#define _SSS_IFACE_CUSTOM_TYPES_H_
+
+#include <talloc.h>
+#include <dbus/dbus.h>
+
+#include "util/sss_pam_data.h"
+
+errno_t sbus_iterator_read_pam_data(TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iterator,
+ struct pam_data **_pd);
+
+errno_t sbus_iterator_write_pam_data(DBusMessageIter *iterator,
+ struct pam_data *pd);
+
+errno_t sbus_iterator_read_pam_response(TALLOC_CTX *mem_ctx,
+ DBusMessageIter *iterator,
+ struct pam_data **_pd);
+
+errno_t sbus_iterator_write_pam_response(DBusMessageIter *iterator,
+ struct pam_data *pd);
+
+#endif /* _SSS_IFACE_CUSTOM_TYPES_H_ */