From b420aae3becdbf501deb2637e2a06636bd6ce1fe Mon Sep 17 00:00:00 2001 From: Pavel Březina Date: Thu, 2 Jun 2016 12:40:10 +0200 Subject: IFP: Add domain nodes Reviewed-by: Jakub Hrozek --- src/responder/ifp/ifp_iface.c | 1 + src/responder/ifp/ifp_iface_nodes.c | 43 +++++++++++++++++++++- .../ifp/org.freedesktop.sssd.infopipe.conf | 1 + 3 files changed, 44 insertions(+), 1 deletion(-) (limited to 'src') 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"/> + -- cgit