summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/confdb/confdb.h1
-rw-r--r--src/providers/ad/ad_access.c2
-rw-r--r--src/providers/ipa/ipa_hbac_common.c2
-rw-r--r--src/providers/ipa/ipa_subdomains_id.c5
-rw-r--r--src/providers/krb5/krb5_utils.c3
-rw-r--r--src/providers/ldap/sdap_access.c2
-rw-r--r--src/responder/common/responder_get_domains.c1
-rw-r--r--src/tests/sysdb-tests.c6
-rw-r--r--src/util/domain_info_utils.c12
-rw-r--r--src/util/util.h1
10 files changed, 25 insertions, 10 deletions
diff --git a/src/confdb/confdb.h b/src/confdb/confdb.h
index 81323dda7..45412538a 100644
--- a/src/confdb/confdb.h
+++ b/src/confdb/confdb.h
@@ -232,6 +232,7 @@ struct sss_domain_info {
struct sss_domain_info **subdomains;
uint32_t subdomain_count;
struct sss_domain_info *parent;
+ char *realm;
char *flat_name;
char *domain_id;
struct timeval subdomains_last_checked;
diff --git a/src/providers/ad/ad_access.c b/src/providers/ad/ad_access.c
index 9508ffb27..0fa7d6d3a 100644
--- a/src/providers/ad/ad_access.c
+++ b/src/providers/ad/ad_access.c
@@ -45,7 +45,7 @@ ad_access_handler(struct be_req *breq)
/* Handle subdomains */
if (strcasecmp(pd->domain, be_ctx->domain->name) != 0) {
domain = new_subdomain(breq, be_ctx->domain,
- pd->domain, NULL, NULL);
+ pd->domain, NULL, NULL, NULL);
if (domain == NULL) {
DEBUG(SSSDBG_OP_FAILURE, ("new_subdomain failed.\n"));
be_req_terminate(breq, DP_ERR_FATAL, PAM_SYSTEM_ERR, NULL);
diff --git a/src/providers/ipa/ipa_hbac_common.c b/src/providers/ipa/ipa_hbac_common.c
index 90ec0ce4a..8a1c91ea9 100644
--- a/src/providers/ipa/ipa_hbac_common.c
+++ b/src/providers/ipa/ipa_hbac_common.c
@@ -448,7 +448,7 @@ hbac_ctx_to_eval_request(TALLOC_CTX *mem_ctx,
/* Get user the user name and groups,
* take care of subdomain users as well */
if (strcasecmp(pd->domain, domain->name) != 0) {
- user_dom = new_subdomain(tmp_ctx, domain, pd->domain, NULL, NULL);
+ user_dom = new_subdomain(tmp_ctx, domain, pd->domain, NULL, NULL, NULL);
if (user_dom == NULL) {
DEBUG(SSSDBG_OP_FAILURE, ("new_subdomain failed.\n"));
ret = ENOMEM;
diff --git a/src/providers/ipa/ipa_subdomains_id.c b/src/providers/ipa/ipa_subdomains_id.c
index 481b99806..264eb03ce 100644
--- a/src/providers/ipa/ipa_subdomains_id.c
+++ b/src/providers/ipa/ipa_subdomains_id.c
@@ -76,8 +76,9 @@ struct tevent_req *ipa_get_subdom_acct_send(TALLOC_CTX *memctx,
}
state->domain = new_subdomain(state, state->ctx->be->domain, ar->domain,
- get_flat_name_from_subdomain_name(ctx->be,ar->domain),
- NULL);
+ NULL,
+ get_flat_name_from_subdomain_name(ctx->be,ar->domain),
+ NULL);
if (state->domain == NULL) {
DEBUG(SSSDBG_OP_FAILURE, ("new_subdomain failed.\n"));
ret = ENOMEM;
diff --git a/src/providers/krb5/krb5_utils.c b/src/providers/krb5/krb5_utils.c
index e71f6c4df..977186998 100644
--- a/src/providers/krb5/krb5_utils.c
+++ b/src/providers/krb5/krb5_utils.c
@@ -1173,7 +1173,8 @@ errno_t get_domain_or_subdomain(TALLOC_CTX *mem_ctx, struct be_ctx *be_ctx,
if (domain_name != NULL &&
strcasecmp(domain_name, be_ctx->domain->name) != 0) {
- *dom = new_subdomain(mem_ctx, be_ctx->domain, domain_name, NULL, NULL);
+ *dom = new_subdomain(mem_ctx, be_ctx->domain,
+ domain_name, NULL, NULL, NULL);
if (*dom == NULL) {
DEBUG(SSSDBG_OP_FAILURE, ("new_subdomain failed.\n"));
return ENOMEM;
diff --git a/src/providers/ldap/sdap_access.c b/src/providers/ldap/sdap_access.c
index ee20a84a7..aebf45240 100644
--- a/src/providers/ldap/sdap_access.c
+++ b/src/providers/ldap/sdap_access.c
@@ -128,7 +128,7 @@ sdap_access_send(TALLOC_CTX *mem_ctx,
/* Get original user DN, take care of subdomain users as well */
if (strcasecmp(pd->domain, be_ctx->domain->name) != 0) {
user_dom = new_subdomain(state, be_ctx->domain, pd->domain,
- NULL, NULL);
+ NULL, NULL, NULL);
if (user_dom == NULL) {
DEBUG(SSSDBG_OP_FAILURE, ("new_subdomain failed.\n"));
ret = ENOMEM;
diff --git a/src/responder/common/responder_get_domains.c b/src/responder/common/responder_get_domains.c
index d40f373ea..e52d61c28 100644
--- a/src/responder/common/responder_get_domains.c
+++ b/src/responder/common/responder_get_domains.c
@@ -313,6 +313,7 @@ process_subdomains(struct sss_domain_info *domain)
subdomains[c]->name, domain->name));
new_sd_list[c] = new_subdomain(new_sd_list, domain,
subdomains[c]->name,
+ subdomains[c]->realm,
subdomains[c]->flat_name,
subdomains[c]->id);
if (new_sd_list[c] == NULL) {
diff --git a/src/tests/sysdb-tests.c b/src/tests/sysdb-tests.c
index 42331297f..6c723c72a 100644
--- a/src/tests/sysdb-tests.c
+++ b/src/tests/sysdb-tests.c
@@ -4552,7 +4552,7 @@ START_TEST(test_sysdb_subdomain_store_user)
ret, strerror(ret));
subdomain = new_subdomain(test_ctx, test_ctx->domain, "test.sub",
- NULL, NULL);
+ NULL, NULL, NULL);
fail_unless(subdomain != NULL, "new_subdomain failed.");
ret = sysdb_store_user(subdomain->sysdb, subdomain, "subdomuser",
@@ -4608,7 +4608,7 @@ START_TEST(test_sysdb_subdomain_user_ops)
ret, strerror(ret));
subdomain = new_subdomain(test_ctx, test_ctx->domain, "test.sub",
- NULL, NULL);
+ NULL, NULL, NULL);
fail_unless(subdomain != NULL, "new_subdomain failed.");
ret = sysdb_store_user(subdomain->sysdb, subdomain, "subdomuser",
@@ -4660,7 +4660,7 @@ START_TEST(test_sysdb_subdomain_group_ops)
ret, strerror(ret));
subdomain = new_subdomain(test_ctx, test_ctx->domain, "test.sub",
- NULL, NULL);
+ NULL, NULL, NULL);
fail_unless(subdomain != NULL, "new_subdomain failed.");
ret = sysdb_store_group(subdomain->sysdb, subdomain,
diff --git a/src/util/domain_info_utils.c b/src/util/domain_info_utils.c
index d0f709ece..c45c83d64 100644
--- a/src/util/domain_info_utils.c
+++ b/src/util/domain_info_utils.c
@@ -25,6 +25,7 @@
struct sss_domain_info *new_subdomain(TALLOC_CTX *mem_ctx,
struct sss_domain_info *parent,
const char *name,
+ const char *realm,
const char *flat_name,
const char *id)
{
@@ -55,6 +56,14 @@ struct sss_domain_info *new_subdomain(TALLOC_CTX *mem_ctx,
goto fail;
}
+ if (realm != NULL) {
+ dom->realm = talloc_strdup(dom, realm);
+ if (dom->realm == NULL) {
+ DEBUG(SSSDBG_OP_FAILURE, ("Failed to copy realm name.\n"));
+ goto fail;
+ }
+ }
+
if (flat_name != NULL) {
dom->flat_name = talloc_strdup(dom, flat_name);
if (dom->flat_name == NULL) {
@@ -105,7 +114,8 @@ fail:
struct sss_domain_info *copy_subdomain(TALLOC_CTX *mem_ctx,
struct sss_domain_info *subdomain)
{
- return new_subdomain(mem_ctx, subdomain->parent, subdomain->name,
+ return new_subdomain(mem_ctx, subdomain->parent,
+ subdomain->name, subdomain->realm,
subdomain->flat_name, subdomain->domain_id);
}
diff --git a/src/util/util.h b/src/util/util.h
index df1ee3b08..a2b2a2d3e 100644
--- a/src/util/util.h
+++ b/src/util/util.h
@@ -569,6 +569,7 @@ void to_sized_string(struct sized_string *out, const char *in);
struct sss_domain_info *new_subdomain(TALLOC_CTX *mem_ctx,
struct sss_domain_info *parent,
const char *name,
+ const char *realm,
const char *flat_name,
const char *id);
struct sss_domain_info *copy_subdomain(TALLOC_CTX *mem_ctx,