summaryrefslogtreecommitdiffstats
path: root/src/providers
diff options
context:
space:
mode:
authorStef Walter <stefw@redhat.com>2014-01-10 08:58:12 +0100
committerJakub Hrozek <jhrozek@redhat.com>2014-02-24 11:14:59 +0100
commit769347ad4d35d43488eb98f980143495b0db415d (patch)
tree1613fff70e57d363ceda4f5d2d3d48efd87073a0 /src/providers
parent3e7d7af1953410f3f009bf3b2e481a46fb80de83 (diff)
downloadsssd-769347ad4d35d43488eb98f980143495b0db415d.tar.gz
sssd-769347ad4d35d43488eb98f980143495b0db415d.tar.xz
sssd-769347ad4d35d43488eb98f980143495b0db415d.zip
sbus: Rework sbus to use interface metadata and vtables
Previous commits added support for interface metadata and handler vtables. This commit ports sbus_dbus_connection to use them. Port the internal uses of dbus to use the new scheme in a very minimal way. Further cleanup is possible here. This commit provides basic definitions of the internal dbus interfaces. The interfaces aren't fully defined, as the handlers will continue to unpack manually, and often overload DBus methods with different arguments (which is rather unorthodox, but not the end of the world). Reviewed-by: Jakub Hrozek <jhrozek@redhat.com> Reviewed-by: Sumit Bose <sbose@redhat.com> Reviewed-by: Lukáš Slebodník <lslebodn@redhat.com> Reviewed-by: Simo Sorce <simo@redhat.com>
Diffstat (limited to 'src/providers')
-rw-r--r--src/providers/data_provider.h1
-rw-r--r--src/providers/data_provider_be.c43
-rw-r--r--src/providers/data_provider_iface.xml38
-rw-r--r--src/providers/data_provider_iface_generated.c86
-rw-r--r--src/providers/data_provider_iface_generated.h55
-rw-r--r--src/providers/proxy/proxy_child.c16
-rw-r--r--src/providers/proxy/proxy_init.c16
7 files changed, 221 insertions, 34 deletions
diff --git a/src/providers/data_provider.h b/src/providers/data_provider.h
index c33445c9e..714983032 100644
--- a/src/providers/data_provider.h
+++ b/src/providers/data_provider.h
@@ -43,6 +43,7 @@
#include "sbus/sbus_client.h"
#include "sss_client/sss_cli.h"
#include "util/authtok.h"
+#include "providers/data_provider_iface_generated.h"
#define DATA_PROVIDER_VERSION 0x0001
#define DATA_PROVIDER_PIPE "private/sbus-dp"
diff --git a/src/providers/data_provider_be.c b/src/providers/data_provider_be.c
index 2e6422693..67d521032 100644
--- a/src/providers/data_provider_be.c
+++ b/src/providers/data_provider_be.c
@@ -63,20 +63,21 @@ static int data_provider_reset_offline(DBusMessage *message,
static int data_provider_logrotate(DBusMessage *message,
struct sbus_connection *conn);
-struct sbus_method monitor_be_methods[] = {
- { MON_CLI_METHOD_PING, monitor_common_pong },
- { MON_CLI_METHOD_RES_INIT, data_provider_res_init },
- { MON_CLI_METHOD_OFFLINE, data_provider_go_offline },
- { MON_CLI_METHOD_RESET_OFFLINE, data_provider_reset_offline },
- { MON_CLI_METHOD_ROTATE, data_provider_logrotate },
- { NULL, NULL }
+struct mon_cli_iface monitor_be_methods = {
+ { &mon_cli_iface_meta, 0 },
+ .ping = monitor_common_pong,
+ .resInit = data_provider_res_init,
+ .shutDown = NULL,
+ .goOffline = data_provider_go_offline,
+ .resetOffline = data_provider_reset_offline,
+ .rotateLogs = data_provider_logrotate,
+ .clearMemcache = NULL,
+ .clearEnumCache = NULL,
};
struct sbus_interface monitor_be_interface = {
- MONITOR_INTERFACE,
MONITOR_PATH,
- SBUS_DEFAULT_VTABLE,
- monitor_be_methods,
+ &monitor_be_methods.vtable,
NULL
};
@@ -88,22 +89,20 @@ static int be_autofs_handler(DBusMessage *message, struct sbus_connection *conn)
static int be_host_handler(DBusMessage *message, struct sbus_connection *conn);
static int be_get_subdomains(DBusMessage *message, struct sbus_connection *conn);
-struct sbus_method be_methods[] = {
- { DP_METHOD_REGISTER, client_registration },
- { DP_METHOD_GETACCTINFO, be_get_account_info },
- { DP_METHOD_PAMHANDLER, be_pam_handler },
- { DP_METHOD_SUDOHANDLER, be_sudo_handler },
- { DP_METHOD_AUTOFSHANDLER, be_autofs_handler },
- { DP_METHOD_HOSTHANDLER, be_host_handler },
- { DP_METHOD_GETDOMAINS, be_get_subdomains },
- { NULL, NULL }
+struct data_provider_iface be_methods = {
+ { &data_provider_iface_meta, 0 },
+ .RegisterService = client_registration,
+ .pamHandler = be_pam_handler,
+ .sudoHandler = be_sudo_handler,
+ .autofsHandler = be_autofs_handler,
+ .hostHandler = be_host_handler,
+ .getDomains = be_get_subdomains,
+ .getAccountInfo = be_get_account_info,
};
struct sbus_interface be_interface = {
- DP_INTERFACE,
DP_PATH,
- SBUS_DEFAULT_VTABLE,
- be_methods,
+ &be_methods.vtable,
NULL
};
diff --git a/src/providers/data_provider_iface.xml b/src/providers/data_provider_iface.xml
new file mode 100644
index 000000000..1f3496493
--- /dev/null
+++ b/src/providers/data_provider_iface.xml
@@ -0,0 +1,38 @@
+<!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.sssd.dataprovider">
+ <annotation value="data_provider_iface" name="org.freedesktop.DBus.GLib.CSymbol"/>
+ <method name="RegisterService">
+ <!-- arguments parsed manually -->
+ </method>
+ <method name="pamHandler">
+ <!-- arguments parsed manually -->
+ </method>
+ <method name="sudoHandler">
+ <!-- arguments parsed manually -->
+ </method>
+ <method name="autofsHandler">
+ <!-- arguments parsed manually -->
+ </method>
+ <method name="hostHandler">
+ <!-- arguments parsed manually -->
+ </method>
+ <method name="getDomains">
+ <!-- arguments parsed manually -->
+ </method>
+ <method name="getAccountInfo">
+ <!-- arguments parsed manually -->
+ </method>
+ </interface>
+
+ <interface name="org.freedesktop.sssd.dataprovider_rev">
+ <annotation value="data_provider_rev_iface" name="org.freedesktop.DBus.GLib.CSymbol"/>
+ <method name="updateCache">
+ <!-- manual argument parsing -->
+ </method>
+ <method name="initgrCheck">
+ <!-- manual argument parsing -->
+ </method>
+ </interface>
+</node>
diff --git a/src/providers/data_provider_iface_generated.c b/src/providers/data_provider_iface_generated.c
new file mode 100644
index 000000000..517b7adfe
--- /dev/null
+++ b/src/providers/data_provider_iface_generated.c
@@ -0,0 +1,86 @@
+/* The following definitions are auto-generated from data_provider_iface.xml */
+
+#include "util/util.h"
+#include "sbus/sssd_dbus.h"
+#include "sbus/sssd_dbus_meta.h"
+#include "data_provider_iface_generated.h"
+
+/* methods for org.freedesktop.sssd.dataprovider */
+const struct sbus_method_meta data_provider_iface__methods[] = {
+ {
+ "RegisterService", /* name */
+ NULL, /* no in_args */
+ NULL, /* no out_args */
+ offsetof(struct data_provider_iface, RegisterService),
+ },
+ {
+ "pamHandler", /* name */
+ NULL, /* no in_args */
+ NULL, /* no out_args */
+ offsetof(struct data_provider_iface, pamHandler),
+ },
+ {
+ "sudoHandler", /* name */
+ NULL, /* no in_args */
+ NULL, /* no out_args */
+ offsetof(struct data_provider_iface, sudoHandler),
+ },
+ {
+ "autofsHandler", /* name */
+ NULL, /* no in_args */
+ NULL, /* no out_args */
+ offsetof(struct data_provider_iface, autofsHandler),
+ },
+ {
+ "hostHandler", /* name */
+ NULL, /* no in_args */
+ NULL, /* no out_args */
+ offsetof(struct data_provider_iface, hostHandler),
+ },
+ {
+ "getDomains", /* name */
+ NULL, /* no in_args */
+ NULL, /* no out_args */
+ offsetof(struct data_provider_iface, getDomains),
+ },
+ {
+ "getAccountInfo", /* name */
+ NULL, /* no in_args */
+ NULL, /* no out_args */
+ offsetof(struct data_provider_iface, getAccountInfo),
+ },
+ { NULL, }
+};
+
+/* interface info for org.freedesktop.sssd.dataprovider */
+const struct sbus_interface_meta data_provider_iface_meta = {
+ "org.freedesktop.sssd.dataprovider", /* name */
+ data_provider_iface__methods,
+ NULL, /* no signals */
+ NULL, /* no propetries */
+};
+
+/* methods for org.freedesktop.sssd.dataprovider_rev */
+const struct sbus_method_meta data_provider_rev_iface__methods[] = {
+ {
+ "updateCache", /* name */
+ NULL, /* no in_args */
+ NULL, /* no out_args */
+ offsetof(struct data_provider_rev_iface, updateCache),
+ },
+ {
+ "initgrCheck", /* name */
+ NULL, /* no in_args */
+ NULL, /* no out_args */
+ offsetof(struct data_provider_rev_iface, initgrCheck),
+ },
+ { NULL, }
+};
+
+/* interface info for org.freedesktop.sssd.dataprovider_rev */
+const struct sbus_interface_meta data_provider_rev_iface_meta = {
+ "org.freedesktop.sssd.dataprovider_rev", /* name */
+ data_provider_rev_iface__methods,
+ NULL, /* no signals */
+ NULL, /* no propetries */
+};
diff --git a/src/providers/data_provider_iface_generated.h b/src/providers/data_provider_iface_generated.h
new file mode 100644
index 000000000..0851964b1
--- /dev/null
+++ b/src/providers/data_provider_iface_generated.h
@@ -0,0 +1,55 @@
+/* The following declarations are auto-generated from data_provider_iface.xml */
+
+#ifndef __DATA_PROVIDER_IFACE_XML__
+#define __DATA_PROVIDER_IFACE_XML__
+
+#include "sbus/sssd_dbus.h"
+
+/* ------------------------------------------------------------------------
+ * DBus Vtable handler structures
+ *
+ * These structures are filled in by implementors of the different
+ * dbus interfaces to handle method calls.
+ *
+ * Handler functions of type sbus_msg_handler_fn accept raw messages,
+ * other handlers will be typed appropriately. If a handler that is
+ * set to NULL is invoked it will result in a
+ * org.freedesktop.DBus.Error.NotSupported error for the caller.
+ */
+
+/* vtable for org.freedesktop.sssd.dataprovider */
+struct data_provider_iface {
+ struct sbus_vtable vtable; /* derive from sbus_vtable */
+ sbus_msg_handler_fn RegisterService;
+ sbus_msg_handler_fn pamHandler;
+ sbus_msg_handler_fn sudoHandler;
+ sbus_msg_handler_fn autofsHandler;
+ sbus_msg_handler_fn hostHandler;
+ sbus_msg_handler_fn getDomains;
+ sbus_msg_handler_fn getAccountInfo;
+};
+
+/* vtable for org.freedesktop.sssd.dataprovider_rev */
+struct data_provider_rev_iface {
+ struct sbus_vtable vtable; /* derive from sbus_vtable */
+ sbus_msg_handler_fn updateCache;
+ sbus_msg_handler_fn initgrCheck;
+};
+
+/* ------------------------------------------------------------------------
+ * DBus Interface Metadata
+ *
+ * These structure definitions are filled in with the information about
+ * the interfaces, methods, properties and so on.
+ *
+ * The actual definitions are found in the accompanying C file next
+ * to this header.
+ */
+
+/* interface info for org.freedesktop.sssd.dataprovider */
+extern const struct sbus_interface_meta data_provider_iface_meta;
+
+/* interface info for org.freedesktop.sssd.dataprovider_rev */
+extern const struct sbus_interface_meta data_provider_rev_iface_meta;
+
+#endif /* __DATA_PROVIDER_IFACE_XML__ */
diff --git a/src/providers/proxy/proxy_child.c b/src/providers/proxy/proxy_child.c
index 52968651b..737b0cfd6 100644
--- a/src/providers/proxy/proxy_child.c
+++ b/src/providers/proxy/proxy_child.c
@@ -49,16 +49,20 @@
static int pc_pam_handler(DBusMessage *message, struct sbus_connection *conn);
-struct sbus_method pc_methods[] = {
- { DP_METHOD_PAMHANDLER, pc_pam_handler },
- { NULL, NULL }
+struct data_provider_iface pc_methods = {
+ { &data_provider_iface_meta, 0 },
+ .RegisterService = NULL,
+ .pamHandler = pc_pam_handler,
+ .sudoHandler = NULL,
+ .autofsHandler = NULL,
+ .hostHandler = NULL,
+ .getDomains = NULL,
+ .getAccountInfo = NULL,
};
struct sbus_interface pc_interface = {
- DP_INTERFACE,
DP_PATH,
- SBUS_DEFAULT_VTABLE,
- pc_methods,
+ &pc_methods.vtable,
NULL
};
diff --git a/src/providers/proxy/proxy_init.c b/src/providers/proxy/proxy_init.c
index ae73fe702..60ae4a950 100644
--- a/src/providers/proxy/proxy_init.c
+++ b/src/providers/proxy/proxy_init.c
@@ -30,16 +30,20 @@
static int client_registration(DBusMessage *message,
struct sbus_connection *conn);
-static struct sbus_method proxy_methods[] = {
- { DP_METHOD_REGISTER, client_registration },
- { NULL, NULL }
+static struct data_provider_iface proxy_methods = {
+ { &data_provider_iface_meta, 0 },
+ .RegisterService = client_registration,
+ .pamHandler = NULL,
+ .sudoHandler = NULL,
+ .autofsHandler = NULL,
+ .hostHandler = NULL,
+ .getDomains = NULL,
+ .getAccountInfo = NULL,
};
struct sbus_interface proxy_interface = {
- DP_INTERFACE,
DP_PATH,
- SBUS_DEFAULT_VTABLE,
- proxy_methods,
+ &proxy_methods.vtable,
NULL
};