summaryrefslogtreecommitdiffstats
path: root/src/providers
diff options
context:
space:
mode:
authorPavel Březina <pbrezina@redhat.com>2016-06-16 13:55:14 +0200
committerJakub Hrozek <jhrozek@redhat.com>2016-06-27 16:34:58 +0200
commit586fa3571753ab4a607d40fc31503fc0e8effd70 (patch)
tree5eb72b5879d30c15d7db45eba20777a5a9690bb5 /src/providers
parent2f18b8d67c86a1a277b59894f24ea6e09b41b7ea (diff)
downloadsssd-586fa3571753ab4a607d40fc31503fc0e8effd70.tar.gz
sssd-586fa3571753ab4a607d40fc31503fc0e8effd70.tar.xz
sssd-586fa3571753ab4a607d40fc31503fc0e8effd70.zip
DP: Add org.freedesktop.sssd.DataProvider.Backend
Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
Diffstat (limited to 'src/providers')
-rw-r--r--src/providers/data_provider/dp_iface.c6
-rw-r--r--src/providers/data_provider/dp_iface.h5
-rw-r--r--src/providers/data_provider/dp_iface.xml8
-rw-r--r--src/providers/data_provider/dp_iface_backend.c65
-rw-r--r--src/providers/data_provider/dp_iface_generated.c41
-rw-r--r--src/providers/data_provider/dp_iface_generated.h16
6 files changed, 141 insertions, 0 deletions
diff --git a/src/providers/data_provider/dp_iface.c b/src/providers/data_provider/dp_iface.c
index 6a6ca6769..7bd740ad6 100644
--- a/src/providers/data_provider/dp_iface.c
+++ b/src/providers/data_provider/dp_iface.c
@@ -36,8 +36,14 @@ struct iface_dp iface_dp = {
.getAccountInfo = dp_get_account_info_handler
};
+struct iface_dp_backend iface_dp_backend = {
+ {&iface_dp_backend_meta, 0},
+ .IsOnline = dp_backend_is_online
+};
+
static struct sbus_iface_map dp_map[] = {
{ DP_PATH, &iface_dp.vtable },
+ { DP_PATH, &iface_dp_backend.vtable },
{ NULL, NULL }
};
diff --git a/src/providers/data_provider/dp_iface.h b/src/providers/data_provider/dp_iface.h
index eeef220e3..8354b1d3a 100644
--- a/src/providers/data_provider/dp_iface.h
+++ b/src/providers/data_provider/dp_iface.h
@@ -59,4 +59,9 @@ errno_t dp_subdomains_handler(struct sbus_request *sbus_req,
void *dp_cli,
const char *domain_hint);
+/* org.freedesktop.sssd.DataProvider.Backend */
+errno_t dp_backend_is_online(struct sbus_request *sbus_req,
+ void *dp_cli,
+ const char *domain);
+
#endif /* DP_IFACE_H_ */
diff --git a/src/providers/data_provider/dp_iface.xml b/src/providers/data_provider/dp_iface.xml
index f508968c8..da16eb639 100644
--- a/src/providers/data_provider/dp_iface.xml
+++ b/src/providers/data_provider/dp_iface.xml
@@ -8,6 +8,14 @@
</method>
</interface>
+ <interface name="org.freedesktop.sssd.DataProvider.Backend">
+ <annotation value="iface_dp_backend" name="org.freedesktop.DBus.GLib.CSymbol"/>
+ <method name="IsOnline">
+ <arg name="domain_name" type="s" direction="in" />
+ <arg name="status" type="b" direction="out" />
+ </method>
+ </interface>
+
<interface name="org.freedesktop.sssd.dataprovider">
<annotation value="iface_dp" name="org.freedesktop.DBus.GLib.CSymbol"/>
<method name="pamHandler">
diff --git a/src/providers/data_provider/dp_iface_backend.c b/src/providers/data_provider/dp_iface_backend.c
new file mode 100644
index 000000000..f4af35ed6
--- /dev/null
+++ b/src/providers/data_provider/dp_iface_backend.c
@@ -0,0 +1,65 @@
+/*
+ Authors:
+ Pavel Březina <pbrezina@redhat.com>
+
+ Copyright (C) 2016 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 <talloc.h>
+#include <tevent.h>
+
+#include "sbus/sssd_dbus.h"
+#include "sbus/sssd_dbus_errors.h"
+#include "providers/data_provider/dp_private.h"
+#include "providers/data_provider/dp_iface.h"
+#include "providers/backend.h"
+#include "util/util.h"
+
+errno_t dp_backend_is_online(struct sbus_request *sbus_req,
+ void *dp_cli,
+ const char *domname)
+{
+ struct be_ctx *be_ctx;
+ struct sss_domain_info *domain;
+ DBusError *error;
+ bool online;
+
+ be_ctx = dp_client_be(dp_cli);
+
+ if (SBUS_IS_STRING_EMPTY(domname)) {
+ domain = be_ctx->domain;
+ } else {
+ domain = find_domain_by_name(be_ctx->domain, domname, false);
+ if (domain == NULL) {
+ error = sbus_error_new(sbus_req, SBUS_ERROR_UNKNOWN_DOMAIN,
+ "Unknown domain %s", domname);
+ if (error == NULL) {
+ return ENOMEM;
+ }
+
+ return sbus_request_fail_and_finish(sbus_req, error);
+ }
+ }
+
+ if (domain == be_ctx->domain) {
+ online = be_is_offline(be_ctx) == false;
+ } else {
+ online = domain->state == DOM_ACTIVE;
+ }
+
+ iface_dp_backend_IsOnline_finish(sbus_req, online);
+ return EOK;
+}
diff --git a/src/providers/data_provider/dp_iface_generated.c b/src/providers/data_provider/dp_iface_generated.c
index 7fee5326d..388aa39d2 100644
--- a/src/providers/data_provider/dp_iface_generated.c
+++ b/src/providers/data_provider/dp_iface_generated.c
@@ -51,6 +51,47 @@ const struct sbus_interface_meta iface_dp_client_meta = {
sbus_invoke_get_all, /* GetAll invoker */
};
+/* arguments for org.freedesktop.sssd.DataProvider.Backend.IsOnline */
+const struct sbus_arg_meta iface_dp_backend_IsOnline__in[] = {
+ { "domain_name", "s" },
+ { NULL, }
+};
+
+/* arguments for org.freedesktop.sssd.DataProvider.Backend.IsOnline */
+const struct sbus_arg_meta iface_dp_backend_IsOnline__out[] = {
+ { "status", "b" },
+ { NULL, }
+};
+
+int iface_dp_backend_IsOnline_finish(struct sbus_request *req, bool arg_status)
+{
+ dbus_bool_t cast_status = arg_status;
+ return sbus_request_return_and_finish(req,
+ DBUS_TYPE_BOOLEAN, &cast_status,
+ DBUS_TYPE_INVALID);
+}
+
+/* methods for org.freedesktop.sssd.DataProvider.Backend */
+const struct sbus_method_meta iface_dp_backend__methods[] = {
+ {
+ "IsOnline", /* name */
+ iface_dp_backend_IsOnline__in,
+ iface_dp_backend_IsOnline__out,
+ offsetof(struct iface_dp_backend, IsOnline),
+ invoke_s_method,
+ },
+ { NULL, }
+};
+
+/* interface info for org.freedesktop.sssd.DataProvider.Backend */
+const struct sbus_interface_meta iface_dp_backend_meta = {
+ "org.freedesktop.sssd.DataProvider.Backend", /* name */
+ iface_dp_backend__methods,
+ NULL, /* no signals */
+ NULL, /* no properties */
+ sbus_invoke_get_all, /* GetAll invoker */
+};
+
/* arguments for org.freedesktop.sssd.dataprovider.autofsHandler */
const struct sbus_arg_meta iface_dp_autofsHandler__in[] = {
{ "dp_flags", "u" },
diff --git a/src/providers/data_provider/dp_iface_generated.h b/src/providers/data_provider/dp_iface_generated.h
index f1bcf17d0..28b018354 100644
--- a/src/providers/data_provider/dp_iface_generated.h
+++ b/src/providers/data_provider/dp_iface_generated.h
@@ -15,6 +15,10 @@
#define IFACE_DP_CLIENT "org.freedesktop.sssd.DataProvider.Client"
#define IFACE_DP_CLIENT_REGISTER "Register"
+/* constants for org.freedesktop.sssd.DataProvider.Backend */
+#define IFACE_DP_BACKEND "org.freedesktop.sssd.DataProvider.Backend"
+#define IFACE_DP_BACKEND_ISONLINE "IsOnline"
+
/* constants for org.freedesktop.sssd.dataprovider */
#define IFACE_DP "org.freedesktop.sssd.dataprovider"
#define IFACE_DP_PAMHANDLER "pamHandler"
@@ -51,6 +55,15 @@ struct iface_dp_client {
/* finish function for Register */
int iface_dp_client_Register_finish(struct sbus_request *req);
+/* vtable for org.freedesktop.sssd.DataProvider.Backend */
+struct iface_dp_backend {
+ struct sbus_vtable vtable; /* derive from sbus_vtable */
+ int (*IsOnline)(struct sbus_request *req, void *data, const char *arg_domain_name);
+};
+
+/* finish function for IsOnline */
+int iface_dp_backend_IsOnline_finish(struct sbus_request *req, bool arg_status);
+
/* vtable for org.freedesktop.sssd.dataprovider */
struct iface_dp {
struct sbus_vtable vtable; /* derive from sbus_vtable */
@@ -87,6 +100,9 @@ int iface_dp_getAccountInfo_finish(struct sbus_request *req, uint16_t arg_dp_err
/* interface info for org.freedesktop.sssd.DataProvider.Client */
extern const struct sbus_interface_meta iface_dp_client_meta;
+/* interface info for org.freedesktop.sssd.DataProvider.Backend */
+extern const struct sbus_interface_meta iface_dp_backend_meta;
+
/* interface info for org.freedesktop.sssd.dataprovider */
extern const struct sbus_interface_meta iface_dp_meta;