From 6a266175cc315565c547b8cf30562e2f98d8b9d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20B=C5=99ezina?= Date: Thu, 2 Jun 2016 12:40:10 +0200 Subject: [PATCH 01/27] IFP: Add domain nodes --- 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(-) diff --git a/src/responder/ifp/ifp_iface.c b/src/responder/ifp/ifp_iface.c index d062e6c8f363853afb9f09132bebf8ae6693c334..53f3aa1de8f487d2f67d75b05af8b0f15a50302a 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 ecb9ba32405b6a78904bcee70c02425c3bcc4cdd..6342111214921d0372dda647d8d24d135866fca3 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 398f303f75df49d159d8527c46459203b2210028..56c5644917ef69fb153531e072bc90f5e0d97d7e 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"/> + -- 2.4.11