summaryrefslogtreecommitdiffstats
path: root/src/db
diff options
context:
space:
mode:
authorPavel Reichl <pavel.reichl@redhat.com>2013-12-17 17:32:04 +0000
committerJakub Hrozek <jhrozek@redhat.com>2014-01-09 11:54:08 +0100
commit98869bb5e22774dc02dacd93e411975fa839b616 (patch)
tree0090ee67432b72729f9c480267f4005bfa52f45f /src/db
parent153efc74ff188c12c03e9578c6fb1d39c69ef5d7 (diff)
downloadsssd-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.h3
-rw-r--r--src/db/sysdb_subdomains.c35
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;