summaryrefslogtreecommitdiffstats
path: root/src/responder
diff options
context:
space:
mode:
authorPavel Březina <pbrezina@redhat.com>2016-06-02 12:40:10 +0200
committerJakub Hrozek <jhrozek@redhat.com>2016-06-27 16:33:17 +0200
commitb420aae3becdbf501deb2637e2a06636bd6ce1fe (patch)
tree4cb82cbbc2bbb213ee45cac353a0c0549102e682 /src/responder
parentbeec1ee5799570f34a51ea57674c7291c15f7022 (diff)
downloadsssd-b420aae3becdbf501deb2637e2a06636bd6ce1fe.tar.gz
sssd-b420aae3becdbf501deb2637e2a06636bd6ce1fe.tar.xz
sssd-b420aae3becdbf501deb2637e2a06636bd6ce1fe.zip
IFP: Add domain nodes
Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
Diffstat (limited to 'src/responder')
-rw-r--r--src/responder/ifp/ifp_iface.c1
-rw-r--r--src/responder/ifp/ifp_iface_nodes.c43
-rw-r--r--src/responder/ifp/org.freedesktop.sssd.infopipe.conf1
3 files changed, 44 insertions, 1 deletions
diff --git a/src/responder/ifp/ifp_iface.c b/src/responder/ifp/ifp_iface.c
index d062e6c8f..53f3aa1de 100644
--- a/src/responder/ifp/ifp_iface.c
+++ b/src/responder/ifp/ifp_iface.c
@@ -143,6 +143,7 @@ struct iface_ifp_cache_object iface_ifp_cache_object_group = {
static struct sbus_iface_map iface_map[] = {
{ IFP_PATH, &iface_ifp.vtable },
+ { IFP_PATH_DOMAINS, &iface_ifp_domains.vtable },
{ IFP_PATH_DOMAINS_TREE, &iface_ifp_domains.vtable },
{ IFP_PATH_COMPONENTS_TREE, &iface_ifp_components.vtable },
{ IFP_PATH_USERS, &iface_ifp_users.vtable },
diff --git a/src/responder/ifp/ifp_iface_nodes.c b/src/responder/ifp/ifp_iface_nodes.c
index ecb9ba324..634211121 100644
--- a/src/responder/ifp/ifp_iface_nodes.c
+++ b/src/responder/ifp/ifp_iface_nodes.c
@@ -23,11 +23,12 @@
#include "responder/ifp/ifp_users.h"
#include "responder/ifp/ifp_groups.h"
#include "responder/ifp/ifp_cache.h"
+#include "responder/ifp/ifp_domains.h"
static const char **
nodes_ifp(TALLOC_CTX *mem_ctx, const char *path, void *data)
{
- static const char *nodes[] = {"Users", "Groups", NULL};
+ static const char *nodes[] = {"Users", "Groups", "Domains", NULL};
return nodes;
}
@@ -106,6 +107,45 @@ nodes_groups(TALLOC_CTX *mem_ctx, const char *path, void *data)
IFP_PATH_GROUPS "/");
}
+static const char **
+nodes_domains(TALLOC_CTX *mem_ctx, const char *path, void *data)
+{
+ struct ifp_ctx *ctx;
+ struct sss_domain_info *domain;
+ const char **nodes;
+ size_t count;
+
+ ctx = talloc_get_type(data, struct ifp_ctx);
+
+ count = 0;
+ domain = ctx->rctx->domains;
+ do {
+ count++;
+ } while ((domain = get_next_domain(domain, SSS_GND_ALL_DOMAINS)) != NULL);
+
+ nodes = talloc_zero_array(mem_ctx, const char *, count + 1);
+ if (nodes == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "talloc_zero_array() failed\n");
+ return NULL;
+ }
+
+ count = 0;
+ domain = ctx->rctx->domains;
+ do {
+ nodes[count] = sbus_opath_escape_part(nodes, domain->name);
+ if (nodes == NULL) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "sbus_opath_escape_part() failed\n");
+ talloc_free(nodes);
+ return NULL;
+ }
+
+ count++;
+ } while ((domain = get_next_domain(domain, SSS_GND_ALL_DOMAINS)) != NULL);
+
+
+ return nodes;
+}
+
struct nodes_map {
const char *path;
sbus_nodes_fn fn;
@@ -115,6 +155,7 @@ static struct nodes_map nodes_map[] = {
{ IFP_PATH, nodes_ifp },
{ IFP_PATH_USERS, nodes_users },
{ IFP_PATH_GROUPS, nodes_groups },
+ { IFP_PATH_DOMAINS, nodes_domains },
{ NULL, NULL}
};
diff --git a/src/responder/ifp/org.freedesktop.sssd.infopipe.conf b/src/responder/ifp/org.freedesktop.sssd.infopipe.conf
index 398f303f7..56c564491 100644
--- a/src/responder/ifp/org.freedesktop.sssd.infopipe.conf
+++ b/src/responder/ifp/org.freedesktop.sssd.infopipe.conf
@@ -30,6 +30,7 @@
send_member="Set"/>
<allow send_interface="org.freedesktop.sssd.infopipe"/>
+ <allow send_interface="org.freedesktop.sssd.infopipe.Domains"/>
<allow send_interface="org.freedesktop.sssd.infopipe.Users"/>
<allow send_interface="org.freedesktop.sssd.infopipe.Users.User"/>
<allow send_interface="org.freedesktop.sssd.infopipe.Groups"/>