diff options
Diffstat (limited to 'src/util/domain_info_utils.c')
-rw-r--r-- | src/util/domain_info_utils.c | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/src/util/domain_info_utils.c b/src/util/domain_info_utils.c index 59d5c534b..6db7e157a 100644 --- a/src/util/domain_info_utils.c +++ b/src/util/domain_info_utils.c @@ -29,8 +29,8 @@ struct sss_domain_info *get_next_domain(struct sss_domain_info *domain, dom = domain; while (dom) { - if (descend && dom->subdomain_count > 0) { - dom = dom->subdomains[0]; + if (descend && dom->subdomains) { + dom = dom->subdomains; } else if (dom->next) { dom = dom->next; } else if (descend && dom->parent) { @@ -44,6 +44,27 @@ struct sss_domain_info *get_next_domain(struct sss_domain_info *domain, return dom; } +struct sss_domain_info *find_subdomain_by_name(struct sss_domain_info *domain, + const char *name, + bool match_any) +{ + struct sss_domain_info *dom = domain; + + while (dom && dom->disabled) { + dom = get_next_domain(dom, true); + } + while (dom) { + if (strcasecmp(dom->name, name) == 0 || + ((match_any == true) && (dom->flat_name != NULL) && + (strcasecmp(dom->flat_name, name) == 0))) { + return dom; + } + dom = get_next_domain(dom, true); + } + + return NULL; +} + struct sss_domain_info *new_subdomain(TALLOC_CTX *mem_ctx, struct sss_domain_info *parent, const char *name, @@ -136,14 +157,6 @@ fail: return NULL; } -struct sss_domain_info *copy_subdomain(TALLOC_CTX *mem_ctx, - struct sss_domain_info *subdomain) -{ - return new_subdomain(mem_ctx, subdomain->parent, - subdomain->name, subdomain->realm, - subdomain->flat_name, subdomain->domain_id); -} - errno_t sssd_domain_init(TALLOC_CTX *mem_ctx, struct confdb_ctx *cdb, const char *domain_name, |