From 0e5d9f481daeeaecefeb68cdc03e45a11dfd7091 Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Tue, 7 Nov 2017 17:03:13 +0100 Subject: [PATCH 68/83] SDAP: Split out utility function sdap_get_object_domain() from sdap_object_in_domain() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The DP request that returns a domain of an entry to responder will need this functionality in order to map the original DN of the entry found to a domain name. Reviewed-by: Pavel Březina Reviewed-by: Sumit Bose (cherry picked from commit 37fdd9dc1ad5968067f8e3c43a51ed2ac9f3b104) --- src/providers/ldap/sdap.c | 26 ++++++++++++++++++++------ src/providers/ldap/sdap.h | 4 ++++ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/providers/ldap/sdap.c b/src/providers/ldap/sdap.c index b6b1c91cb7507ebb95cd559634a77ed44dfb5fc0..59d24fed53cc35751b5c24679e247a42f82e1d0a 100644 --- a/src/providers/ldap/sdap.c +++ b/src/providers/ldap/sdap.c @@ -1673,9 +1673,9 @@ char *sdap_make_oc_list(TALLOC_CTX *mem_ctx, struct sdap_attr_map *map) } } -bool sdap_object_in_domain(struct sdap_options *opts, - struct sysdb_attrs *obj, - struct sss_domain_info *dom) +struct sss_domain_info *sdap_get_object_domain(struct sdap_options *opts, + struct sysdb_attrs *obj, + struct sss_domain_info *dom) { errno_t ret; const char *original_dn = NULL; @@ -1685,7 +1685,7 @@ bool sdap_object_in_domain(struct sdap_options *opts, if (ret) { DEBUG(SSSDBG_FUNC_DATA, "The group has no original DN, assuming our domain\n"); - return true; + return dom; } sdmatch = sdap_domain_get_by_dn(opts, original_dn); @@ -1693,10 +1693,24 @@ bool sdap_object_in_domain(struct sdap_options *opts, DEBUG(SSSDBG_FUNC_DATA, "The original DN of the group cannot " "be related to any search base\n"); - return true; + return dom; } - return (sdmatch->dom == dom); + return sdmatch->dom; +} + +bool sdap_object_in_domain(struct sdap_options *opts, + struct sysdb_attrs *obj, + struct sss_domain_info *dom) +{ + struct sss_domain_info *obj_dom; + + obj_dom = sdap_get_object_domain(opts, obj, dom); + if (obj_dom == NULL) { + return false; + } + + return (obj_dom == dom); } size_t sdap_steal_objects_in_dom(struct sdap_options *opts, diff --git a/src/providers/ldap/sdap.h b/src/providers/ldap/sdap.h index 2ba016ff52313198287ac5196e24517333882099..8b0f1f0ce0fef59554270f0f31cfd2d5f0aa57f5 100644 --- a/src/providers/ldap/sdap.h +++ b/src/providers/ldap/sdap.h @@ -644,6 +644,10 @@ size_t sdap_steal_objects_in_dom(struct sdap_options *opts, size_t count, bool filter); +struct sss_domain_info *sdap_get_object_domain(struct sdap_options *opts, + struct sysdb_attrs *obj, + struct sss_domain_info *dom); + bool sdap_object_in_domain(struct sdap_options *opts, struct sysdb_attrs *obj, struct sss_domain_info *dom); -- 2.14.3