diff options
author | Michal Židek <mzidek@redhat.com> | 2015-09-09 14:37:48 +0200 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2015-10-23 10:32:23 +0200 |
commit | 877b92e80bde510d5cd9f03dbf01e2bcf73ab072 (patch) | |
tree | d865b106f7d1cf9296650b4e4e4f677d56a26f89 /src/util | |
parent | 10c07e188323a2f9824b5e34379f3b1a9b37759e (diff) | |
download | sssd-877b92e80bde510d5cd9f03dbf01e2bcf73ab072.tar.gz sssd-877b92e80bde510d5cd9f03dbf01e2bcf73ab072.tar.xz sssd-877b92e80bde510d5cd9f03dbf01e2bcf73ab072.zip |
util: Update get_next_domain's interface
Update get next domain to be able to
include disbled domains and change the
interface to accept flags instead of
multiple booleans.
Ticket:
https://fedorahosted.org/sssd/ticket/2673
Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
Diffstat (limited to 'src/util')
-rw-r--r-- | src/util/domain_info_utils.c | 34 | ||||
-rw-r--r-- | src/util/usertools.c | 4 | ||||
-rw-r--r-- | src/util/util.h | 5 |
3 files changed, 27 insertions, 16 deletions
diff --git a/src/util/domain_info_utils.c b/src/util/domain_info_utils.c index baed132ce..0791da304 100644 --- a/src/util/domain_info_utils.c +++ b/src/util/domain_info_utils.c @@ -35,9 +35,11 @@ struct sss_domain_info *get_domains_head(struct sss_domain_info *domain) } struct sss_domain_info *get_next_domain(struct sss_domain_info *domain, - bool descend) + uint32_t gnd_flags) { struct sss_domain_info *dom; + bool descend = gnd_flags & SSS_GND_DESCEND; + bool include_disabled = gnd_flags & SSS_GND_INCLUDE_DISABLED; dom = domain; while (dom) { @@ -51,8 +53,14 @@ struct sss_domain_info *get_next_domain(struct sss_domain_info *domain, dom = NULL; } - if (dom && sss_domain_get_state(dom) != DOM_DISABLED) { - break; + if (dom) { + if (sss_domain_get_state(dom) == DOM_DISABLED + && !include_disabled) { + continue; + } else { + /* Next domain found. */ + break; + } } } @@ -95,7 +103,7 @@ struct sss_domain_info *find_domain_by_name(struct sss_domain_info *domain, } while (dom && sss_domain_get_state(dom) == DOM_DISABLED) { - dom = get_next_domain(dom, true); + dom = get_next_domain(dom, SSS_GND_DESCEND); } while (dom) { if (strcasecmp(dom->name, name) == 0 || @@ -103,7 +111,7 @@ struct sss_domain_info *find_domain_by_name(struct sss_domain_info *domain, (strcasecmp(dom->flat_name, name) == 0))) { return dom; } - dom = get_next_domain(dom, true); + dom = get_next_domain(dom, SSS_GND_DESCEND); } return NULL; @@ -123,7 +131,7 @@ struct sss_domain_info *find_domain_by_sid(struct sss_domain_info *domain, sid_len = strlen(sid); while (dom && sss_domain_get_state(dom) == DOM_DISABLED) { - dom = get_next_domain(dom, true); + dom = get_next_domain(dom, SSS_GND_DESCEND); } while (dom) { @@ -144,7 +152,7 @@ struct sss_domain_info *find_domain_by_sid(struct sss_domain_info *domain, } } - dom = get_next_domain(dom, true); + dom = get_next_domain(dom, SSS_GND_DESCEND); } return NULL; @@ -347,9 +355,9 @@ sss_write_domain_mappings(struct sss_domain_info *domain) goto done; } - for (dom = get_next_domain(domain, true); + for (dom = get_next_domain(domain, SSS_GND_DESCEND); dom && IS_SUBDOMAIN(dom); /* if we get back to a parent, stop */ - dom = get_next_domain(dom, false)) { + dom = get_next_domain(dom, 0)) { ret = fprintf(fstream, ".%s = %s\n%s = %s\n", dom->name, dom->realm, dom->name, dom->realm); if (ret < 0) { @@ -366,9 +374,9 @@ sss_write_domain_mappings(struct sss_domain_info *domain) goto done; } - for (dom = get_next_domain(domain, true); + for (dom = get_next_domain(domain, SSS_GND_DESCEND); dom && IS_SUBDOMAIN(dom); /* if we get back to a parent, stop */ - dom = get_next_domain(dom, false)) { + dom = get_next_domain(dom, 0)) { if (dom->forest == NULL) { continue; @@ -482,7 +490,7 @@ errno_t get_dom_names(TALLOC_CTX *mem_ctx, dom = start_dom; while (dom) { count++; - dom = get_next_domain(dom, false); + dom = get_next_domain(dom, 0); } dom_names = talloc_array(tmp_ctx, char*, count); @@ -500,7 +508,7 @@ errno_t get_dom_names(TALLOC_CTX *mem_ctx, ret = ENOMEM; goto done; } - dom = get_next_domain(dom, false); + dom = get_next_domain(dom, 0); i++; } diff --git a/src/util/usertools.c b/src/util/usertools.c index ccbf7a0c8..18639d9b6 100644 --- a/src/util/usertools.c +++ b/src/util/usertools.c @@ -423,7 +423,7 @@ int sss_parse_name_for_domains(TALLOC_CTX *memctx, rname = NULL; rdomain = NULL; - for (dom = domains; dom != NULL; dom = get_next_domain(dom, false)) { + for (dom = domains; dom != NULL; dom = get_next_domain(dom, 0)) { ret = sss_parse_name(tmp_ctx, dom->names, orig, &dmatch, &nmatch); if (ret == EOK) { /* @@ -481,7 +481,7 @@ int sss_parse_name_for_domains(TALLOC_CTX *memctx, goto done; } - for (dom = domains; dom != NULL; dom = get_next_domain(dom, false)) { + for (dom = domains; dom != NULL; dom = get_next_domain(dom, 0)) { match = match_any_domain_or_subdomain_name(dom, rdomain); if (match != NULL) { break; diff --git a/src/util/util.h b/src/util/util.h index 063a97a63..3693a5e9f 100644 --- a/src/util/util.h +++ b/src/util/util.h @@ -565,8 +565,11 @@ void to_sized_string(struct sized_string *out, const char *in); /* from domain_info.c */ struct sss_domain_info *get_domains_head(struct sss_domain_info *domain); +#define SSS_GND_DESCEND 0x01 +#define SSS_GND_INCLUDE_DISABLED 0x02 +#define SSS_GND_ALL_DOMAINS (SSS_GND_DESCEND | SSS_GND_INCLUDE_DISABLED) struct sss_domain_info *get_next_domain(struct sss_domain_info *domain, - bool descend); + uint32_t gnd_flags); struct sss_domain_info *find_domain_by_name(struct sss_domain_info *domain, const char *name, bool match_any); |