diff options
Diffstat (limited to 'src/db')
-rw-r--r-- | src/db/sysdb.h | 4 | ||||
-rw-r--r-- | src/db/sysdb_subdomains.c | 22 |
2 files changed, 24 insertions, 2 deletions
diff --git a/src/db/sysdb.h b/src/db/sysdb.h index 5649f2cb1..f667977ed 100644 --- a/src/db/sysdb.h +++ b/src/db/sysdb.h @@ -439,7 +439,9 @@ 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 *realm, + 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 1be904e8d..53115c1a7 100644 --- a/src/db/sysdb_subdomains.c +++ b/src/db/sysdb_subdomains.c @@ -561,7 +561,9 @@ done: } errno_t sysdb_master_domain_add_info(struct sss_domain_info *domain, - const char *flat, const char *id, + const char *realm, + const char *flat, + const char *id, const char* forest) { TALLOC_CTX *tmp_ctx; @@ -641,6 +643,24 @@ errno_t sysdb_master_domain_add_info(struct sss_domain_info *domain, do_update = true; } + if (realm != NULL && (domain->realm == NULL || + strcmp(domain->realm, realm) != 0)) { + ret = ldb_msg_add_empty(msg, SYSDB_SUBDOMAIN_REALM, + 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_REALM, realm); + if (ret != LDB_SUCCESS) { + ret = sysdb_error_to_errno(ret); + goto done; + } + + do_update = true; + } + if (do_update == false) { ret = EOK; goto done; |