summaryrefslogtreecommitdiffstats
path: root/src/db
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2015-06-02 13:34:20 +0200
committerJakub Hrozek <jhrozek@redhat.com>2015-06-14 21:44:39 +0200
commit9af86b9c936d07cff9d0c2054acde908749ea522 (patch)
treeb7acca3a794a56ccec485f880a62e10be2d29466 /src/db
parent526a15438525417cd701f837d7085b7f8c8a6325 (diff)
downloadsssd-9af86b9c936d07cff9d0c2054acde908749ea522.tar.gz
sssd-9af86b9c936d07cff9d0c2054acde908749ea522.tar.xz
sssd-9af86b9c936d07cff9d0c2054acde908749ea522.zip
SYSDB: Add realm to sysdb_master_domain_add_info
Adding realm to both master domain and subdomain will make it easier to set and select forest roots. Even master domains can be forest members, it's preferable to avoid special-casing as much as possible. Includes a unit test. Reviewed-by: Sumit Bose <sbose@redhat.com>
Diffstat (limited to 'src/db')
-rw-r--r--src/db/sysdb.h4
-rw-r--r--src/db/sysdb_subdomains.c22
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;