summaryrefslogtreecommitdiffstats
path: root/src/util
diff options
context:
space:
mode:
authorMichal Židek <mzidek@redhat.com>2015-09-09 14:37:48 +0200
committerJakub Hrozek <jhrozek@redhat.com>2015-10-23 10:32:23 +0200
commit877b92e80bde510d5cd9f03dbf01e2bcf73ab072 (patch)
treed865b106f7d1cf9296650b4e4e4f677d56a26f89 /src/util
parent10c07e188323a2f9824b5e34379f3b1a9b37759e (diff)
downloadsssd-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.c34
-rw-r--r--src/util/usertools.c4
-rw-r--r--src/util/util.h5
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);