diff options
author | Pavel Reichl <pavel.reichl@redhat.com> | 2013-12-17 17:32:04 +0000 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2014-01-09 11:54:08 +0100 |
commit | 98869bb5e22774dc02dacd93e411975fa839b616 (patch) | |
tree | 0090ee67432b72729f9c480267f4005bfa52f45f /src/db | |
parent | 153efc74ff188c12c03e9578c6fb1d39c69ef5d7 (diff) | |
download | sssd-98869bb5e22774dc02dacd93e411975fa839b616.tar.gz sssd-98869bb5e22774dc02dacd93e411975fa839b616.tar.xz sssd-98869bb5e22774dc02dacd93e411975fa839b616.zip |
responder: Set forest attribute in AD domains
Resolves:
https://fedorahosted.org/sssd/ticket/2160
Diffstat (limited to 'src/db')
-rw-r--r-- | src/db/sysdb.h | 3 | ||||
-rw-r--r-- | src/db/sysdb_subdomains.c | 35 |
2 files changed, 36 insertions, 2 deletions
diff --git a/src/db/sysdb.h b/src/db/sysdb.h index 255a135f0..9677294b2 100644 --- a/src/db/sysdb.h +++ b/src/db/sysdb.h @@ -388,7 +388,8 @@ errno_t sysdb_update_subdomains(struct sss_domain_info *domain); errno_t sysdb_master_domain_update(struct sss_domain_info *domain); errno_t sysdb_master_domain_add_info(struct sss_domain_info *domain, - const char *flat, const char *id); + const char *flat, const char *id, + const char* forest); errno_t sysdb_subdomain_delete(struct sysdb_ctx *sysdb, const char *name); diff --git a/src/db/sysdb_subdomains.c b/src/db/sysdb_subdomains.c index 43c75799c..9c2926c00 100644 --- a/src/db/sysdb_subdomains.c +++ b/src/db/sysdb_subdomains.c @@ -208,6 +208,7 @@ errno_t sysdb_master_domain_update(struct sss_domain_info *domain) SYSDB_SUBDOMAIN_REALM, SYSDB_SUBDOMAIN_FLAT, SYSDB_SUBDOMAIN_ID, + SYSDB_SUBDOMAIN_FOREST, NULL}; tmp_ctx = talloc_new(NULL); @@ -278,13 +279,27 @@ errno_t sysdb_master_domain_update(struct sss_domain_info *domain) } } + tmp_str = ldb_msg_find_attr_as_string(res->msgs[0], SYSDB_SUBDOMAIN_FOREST, + NULL); + if (tmp_str != NULL && + (domain->forest == NULL || + strcasecmp(tmp_str, domain->forest) != 0)) { + talloc_free(domain->forest); + domain->forest = talloc_strdup(domain, tmp_str); + if (domain->forest == NULL) { + ret = ENOMEM; + goto done; + } + } + done: talloc_free(tmp_ctx); return ret; } errno_t sysdb_master_domain_add_info(struct sss_domain_info *domain, - const char *flat, const char *id) + const char *flat, const char *id, + const char* forest) { TALLOC_CTX *tmp_ctx; struct ldb_message *msg; @@ -345,6 +360,24 @@ errno_t sysdb_master_domain_add_info(struct sss_domain_info *domain, do_update = true; } + if (forest != NULL && (domain->forest == NULL || + strcmp(domain->forest, forest) != 0)) { + ret = ldb_msg_add_empty(msg, SYSDB_SUBDOMAIN_FOREST, + LDB_FLAG_MOD_REPLACE, NULL); + if (ret != LDB_SUCCESS) { + ret = sysdb_error_to_errno(ret); + goto done; + } + + ret = ldb_msg_add_string(msg, SYSDB_SUBDOMAIN_FOREST, forest); + if (ret != LDB_SUCCESS) { + ret = sysdb_error_to_errno(ret); + goto done; + } + + do_update = true; + } + if (do_update == false) { ret = EOK; goto done; |