sysdb_subdomains.c revision a3c8390d19593b1e5277d95bfb4ab206d4785150
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny/*
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny SSSD
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny System Database - Sub-domain related calls
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny Copyright (C) 2012 Jan Zeleny <jzeleny@redhat.com>
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny Copyright (C) 2012 Sumit Bose <sbose@redhat.com>
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny This program is free software; you can redistribute it and/or modify
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny it under the terms of the GNU General Public License as published by
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny the Free Software Foundation; either version 3 of the License, or
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny (at your option) any later version.
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny This program is distributed in the hope that it will be useful,
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny but WITHOUT ANY WARRANTY; without even the implied warranty of
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny GNU General Public License for more details.
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny You should have received a copy of the GNU General Public License
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny along with this program. If not, see <http://www.gnu.org/licenses/>.
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny*/
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#include "util/util.h"
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#include "db/sysdb_private.h"
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorceerrno_t sysdb_update_subdomains(struct sss_domain_info *domain)
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny{
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny int i;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny errno_t ret;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny TALLOC_CTX *tmp_ctx;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny struct ldb_result *res;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny const char *attrs[] = {"cn",
204cfc89a076fd32bf34f2abb3f809304aaa88abSimo Sorce SYSDB_SUBDOMAIN_REALM,
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny SYSDB_SUBDOMAIN_FLAT,
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny SYSDB_SUBDOMAIN_ID,
9822d4d468ec74e4e173f5adf0db12d02974cd18Sumit Bose SYSDB_SUBDOMAIN_MPG,
a6cca9c284724fafd670a3163812f248ba53ad97Jakub Hrozek SYSDB_SUBDOMAIN_ENUM,
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose SYSDB_SUBDOMAIN_FOREST,
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny NULL};
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce struct sss_domain_info *dom;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny struct ldb_dn *basedn;
9822d4d468ec74e4e173f5adf0db12d02974cd18Sumit Bose const char *name;
9822d4d468ec74e4e173f5adf0db12d02974cd18Sumit Bose const char *realm;
9822d4d468ec74e4e173f5adf0db12d02974cd18Sumit Bose const char *flat;
9822d4d468ec74e4e173f5adf0db12d02974cd18Sumit Bose const char *id;
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose const char *forest;
9822d4d468ec74e4e173f5adf0db12d02974cd18Sumit Bose bool mpg;
a6cca9c284724fafd670a3163812f248ba53ad97Jakub Hrozek bool enumerate;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny tmp_ctx = talloc_new(NULL);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny if (tmp_ctx == NULL) {
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny ret = ENOMEM;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny goto done;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny }
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
aab938c5975f0e3b85c7c79a5d718e5fefed7217Simo Sorce basedn = ldb_dn_new(tmp_ctx, domain->sysdb->ldb, SYSDB_BASE);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny if (basedn == NULL) {
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny ret = EIO;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny goto done;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny }
aab938c5975f0e3b85c7c79a5d718e5fefed7217Simo Sorce ret = ldb_search(domain->sysdb->ldb, tmp_ctx, &res,
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny basedn, LDB_SCOPE_ONELEVEL,
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny attrs, "objectclass=%s", SYSDB_SUBDOMAIN_CLASS);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny if (ret != LDB_SUCCESS) {
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny ret = EIO;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny goto done;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny }
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce /* disable all domains,
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce * let the search result refresh any that are still valid */
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce for (dom = domain->subdomains; dom; dom = get_next_domain(dom, false)) {
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce dom->disabled = true;
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce }
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce if (res->count == 0) {
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce ret = EOK;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny goto done;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny }
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny for (i = 0; i < res->count; i++) {
aab938c5975f0e3b85c7c79a5d718e5fefed7217Simo Sorce
aab938c5975f0e3b85c7c79a5d718e5fefed7217Simo Sorce name = ldb_msg_find_attr_as_string(res->msgs[i], "cn", NULL);
aab938c5975f0e3b85c7c79a5d718e5fefed7217Simo Sorce if (name == NULL) {
7fe69bb6ec70bce439c6b975a9a0044c98ff502bSimo Sorce DEBUG(SSSDBG_MINOR_FAILURE,
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov "The object [%s] doesn't have a name\n",
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov ldb_dn_get_linearized(res->msgs[i]->dn));
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny ret = EINVAL;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny goto done;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny }
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
aab938c5975f0e3b85c7c79a5d718e5fefed7217Simo Sorce realm = ldb_msg_find_attr_as_string(res->msgs[i],
aab938c5975f0e3b85c7c79a5d718e5fefed7217Simo Sorce SYSDB_SUBDOMAIN_REALM, NULL);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
aab938c5975f0e3b85c7c79a5d718e5fefed7217Simo Sorce flat = ldb_msg_find_attr_as_string(res->msgs[i],
aab938c5975f0e3b85c7c79a5d718e5fefed7217Simo Sorce SYSDB_SUBDOMAIN_FLAT, NULL);
204cfc89a076fd32bf34f2abb3f809304aaa88abSimo Sorce
aab938c5975f0e3b85c7c79a5d718e5fefed7217Simo Sorce id = ldb_msg_find_attr_as_string(res->msgs[i],
aab938c5975f0e3b85c7c79a5d718e5fefed7217Simo Sorce SYSDB_SUBDOMAIN_ID, NULL);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
9822d4d468ec74e4e173f5adf0db12d02974cd18Sumit Bose mpg = ldb_msg_find_attr_as_bool(res->msgs[i],
9822d4d468ec74e4e173f5adf0db12d02974cd18Sumit Bose SYSDB_SUBDOMAIN_MPG, false);
9822d4d468ec74e4e173f5adf0db12d02974cd18Sumit Bose
a6cca9c284724fafd670a3163812f248ba53ad97Jakub Hrozek enumerate = ldb_msg_find_attr_as_bool(res->msgs[i],
a6cca9c284724fafd670a3163812f248ba53ad97Jakub Hrozek SYSDB_SUBDOMAIN_ENUM, false);
a6cca9c284724fafd670a3163812f248ba53ad97Jakub Hrozek
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose forest = ldb_msg_find_attr_as_string(res->msgs[i],
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose SYSDB_SUBDOMAIN_FOREST, NULL);
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce /* explicitly use dom->next as we need to check 'disabled' domains */
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce for (dom = domain->subdomains; dom; dom = dom->next) {
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce if (strcasecmp(dom->name, name) == 0) {
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce dom->disabled = false;
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce /* in theory these may change, but it should never happen */
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce if (strcasecmp(dom->realm, realm) != 0) {
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce DEBUG(SSSDBG_TRACE_INTERNAL,
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov "Realm name changed from [%s] to [%s]!\n",
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov dom->realm, realm);
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce talloc_zfree(dom->realm);
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce dom->realm = talloc_strdup(dom, realm);
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce if (dom->realm == NULL) {
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce ret = ENOMEM;
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce goto done;
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce }
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce }
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce if (strcasecmp(dom->flat_name, flat) != 0) {
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce DEBUG(SSSDBG_TRACE_INTERNAL,
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov "Flat name changed from [%s] to [%s]!\n",
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov dom->flat_name, flat);
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce talloc_zfree(dom->flat_name);
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce dom->flat_name = talloc_strdup(dom, flat);
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce if (dom->flat_name == NULL) {
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce ret = ENOMEM;
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce goto done;
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce }
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce }
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce if (strcasecmp(dom->domain_id, id) != 0) {
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce DEBUG(SSSDBG_TRACE_INTERNAL,
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov "Domain changed from [%s] to [%s]!\n",
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov dom->domain_id, id);
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce talloc_zfree(dom->domain_id);
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce dom->domain_id = talloc_strdup(dom, id);
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce if (dom->domain_id == NULL) {
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce ret = ENOMEM;
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce goto done;
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce }
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce }
9822d4d468ec74e4e173f5adf0db12d02974cd18Sumit Bose
9822d4d468ec74e4e173f5adf0db12d02974cd18Sumit Bose if (dom->mpg != mpg) {
9822d4d468ec74e4e173f5adf0db12d02974cd18Sumit Bose DEBUG(SSSDBG_TRACE_INTERNAL,
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov "MPG state change from [%s] to [%s]!\n",
9822d4d468ec74e4e173f5adf0db12d02974cd18Sumit Bose dom->mpg ? "true" : "false",
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov mpg ? "true" : "false");
9822d4d468ec74e4e173f5adf0db12d02974cd18Sumit Bose dom->mpg = mpg;
9822d4d468ec74e4e173f5adf0db12d02974cd18Sumit Bose }
9822d4d468ec74e4e173f5adf0db12d02974cd18Sumit Bose
a6cca9c284724fafd670a3163812f248ba53ad97Jakub Hrozek if (dom->enumerate != enumerate) {
a6cca9c284724fafd670a3163812f248ba53ad97Jakub Hrozek DEBUG(SSSDBG_TRACE_INTERNAL,
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov "MPG state change from [%s] to [%s]!\n",
a6cca9c284724fafd670a3163812f248ba53ad97Jakub Hrozek dom->enumerate ? "true" : "false",
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov enumerate ? "true" : "false");
a6cca9c284724fafd670a3163812f248ba53ad97Jakub Hrozek dom->enumerate = enumerate;
a6cca9c284724fafd670a3163812f248ba53ad97Jakub Hrozek }
a6cca9c284724fafd670a3163812f248ba53ad97Jakub Hrozek
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose if ((dom->forest == NULL && forest != NULL)
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose || (dom->forest != NULL && forest != NULL
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose && strcasecmp(dom->forest, forest) != 0)) {
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose DEBUG(SSSDBG_TRACE_INTERNAL,
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov "Forest changed from [%s] to [%s]!\n",
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov dom->forest, forest);
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose talloc_zfree(dom->forest);
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose dom->forest = talloc_strdup(dom, forest);
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose if (dom->forest == NULL) {
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose ret = ENOMEM;
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose goto done;
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose }
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose }
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce break;
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce }
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce }
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce /* If not found in loop it is a new subdomain */
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce if (dom == NULL) {
a6cca9c284724fafd670a3163812f248ba53ad97Jakub Hrozek dom = new_subdomain(domain, domain, name, realm,
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose flat, id, mpg, enumerate, forest);
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce if (dom == NULL) {
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce ret = ENOMEM;
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce goto done;
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce }
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce DLIST_ADD_END(domain->subdomains, dom, struct sss_domain_info *);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny }
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny }
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny ret = EOK;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zelenydone:
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny talloc_free(tmp_ctx);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny return ret;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny}
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
65393a294e635822c1d7a15fe5853dc457ad8a2aSimo Sorceerrno_t sysdb_master_domain_update(struct sss_domain_info *domain)
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny{
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny errno_t ret;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny TALLOC_CTX *tmp_ctx;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny const char *tmp_str;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny struct ldb_dn *basedn;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny struct ldb_result *res;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny const char *attrs[] = {"cn",
204cfc89a076fd32bf34f2abb3f809304aaa88abSimo Sorce SYSDB_SUBDOMAIN_REALM,
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny SYSDB_SUBDOMAIN_FLAT,
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny SYSDB_SUBDOMAIN_ID,
17195241500e46272018d7897d6e87249870caf2Pavel Reichl SYSDB_SUBDOMAIN_FOREST,
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny NULL};
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny tmp_ctx = talloc_new(NULL);
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny if (tmp_ctx == NULL) {
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny return ENOMEM;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny }
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny
65393a294e635822c1d7a15fe5853dc457ad8a2aSimo Sorce basedn = ldb_dn_new_fmt(tmp_ctx, domain->sysdb->ldb,
65393a294e635822c1d7a15fe5853dc457ad8a2aSimo Sorce SYSDB_DOM_BASE, domain->name);
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny if (basedn == NULL) {
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny ret = EIO;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny goto done;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny }
65393a294e635822c1d7a15fe5853dc457ad8a2aSimo Sorce ret = ldb_search(domain->sysdb->ldb, tmp_ctx, &res,
65393a294e635822c1d7a15fe5853dc457ad8a2aSimo Sorce basedn, LDB_SCOPE_BASE, attrs, NULL);
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny if (ret != LDB_SUCCESS) {
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny ret = EIO;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny goto done;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny }
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny
cb388d52f49f54963379cc20a25e14d17fe6e9a3Simo Sorce if (res->count == 0) {
cb388d52f49f54963379cc20a25e14d17fe6e9a3Simo Sorce ret = ENOENT;
cb388d52f49f54963379cc20a25e14d17fe6e9a3Simo Sorce goto done;
cb388d52f49f54963379cc20a25e14d17fe6e9a3Simo Sorce }
cb388d52f49f54963379cc20a25e14d17fe6e9a3Simo Sorce
cb388d52f49f54963379cc20a25e14d17fe6e9a3Simo Sorce if (res->count > 1) {
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_OP_FAILURE, "Base search returned [%d] results, "
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov "expected 1.\n", res->count);
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny ret = EINVAL;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny goto done;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny }
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny
204cfc89a076fd32bf34f2abb3f809304aaa88abSimo Sorce tmp_str = ldb_msg_find_attr_as_string(res->msgs[0], SYSDB_SUBDOMAIN_REALM,
204cfc89a076fd32bf34f2abb3f809304aaa88abSimo Sorce NULL);
65393a294e635822c1d7a15fe5853dc457ad8a2aSimo Sorce if (tmp_str != NULL &&
65393a294e635822c1d7a15fe5853dc457ad8a2aSimo Sorce (domain->realm == NULL || strcasecmp(tmp_str, domain->realm) != 0)) {
65393a294e635822c1d7a15fe5853dc457ad8a2aSimo Sorce talloc_free(domain->realm);
65393a294e635822c1d7a15fe5853dc457ad8a2aSimo Sorce domain->realm = talloc_strdup(domain, tmp_str);
65393a294e635822c1d7a15fe5853dc457ad8a2aSimo Sorce if (domain->realm == NULL) {
204cfc89a076fd32bf34f2abb3f809304aaa88abSimo Sorce ret = ENOMEM;
204cfc89a076fd32bf34f2abb3f809304aaa88abSimo Sorce goto done;
204cfc89a076fd32bf34f2abb3f809304aaa88abSimo Sorce }
204cfc89a076fd32bf34f2abb3f809304aaa88abSimo Sorce }
204cfc89a076fd32bf34f2abb3f809304aaa88abSimo Sorce
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny tmp_str = ldb_msg_find_attr_as_string(res->msgs[0], SYSDB_SUBDOMAIN_FLAT,
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny NULL);
65393a294e635822c1d7a15fe5853dc457ad8a2aSimo Sorce if (tmp_str != NULL &&
65393a294e635822c1d7a15fe5853dc457ad8a2aSimo Sorce (domain->flat_name == NULL ||
65393a294e635822c1d7a15fe5853dc457ad8a2aSimo Sorce strcasecmp(tmp_str, domain->flat_name) != 0)) {
65393a294e635822c1d7a15fe5853dc457ad8a2aSimo Sorce talloc_free(domain->flat_name);
65393a294e635822c1d7a15fe5853dc457ad8a2aSimo Sorce domain->flat_name = talloc_strdup(domain, tmp_str);
65393a294e635822c1d7a15fe5853dc457ad8a2aSimo Sorce if (domain->flat_name == NULL) {
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny ret = ENOMEM;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny goto done;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny }
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny }
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny tmp_str = ldb_msg_find_attr_as_string(res->msgs[0], SYSDB_SUBDOMAIN_ID,
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny NULL);
65393a294e635822c1d7a15fe5853dc457ad8a2aSimo Sorce if (tmp_str != NULL &&
65393a294e635822c1d7a15fe5853dc457ad8a2aSimo Sorce (domain->domain_id == NULL ||
65393a294e635822c1d7a15fe5853dc457ad8a2aSimo Sorce strcasecmp(tmp_str, domain->domain_id) != 0)) {
65393a294e635822c1d7a15fe5853dc457ad8a2aSimo Sorce talloc_free(domain->domain_id);
65393a294e635822c1d7a15fe5853dc457ad8a2aSimo Sorce domain->domain_id = talloc_strdup(domain, tmp_str);
65393a294e635822c1d7a15fe5853dc457ad8a2aSimo Sorce if (domain->domain_id == NULL) {
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny ret = ENOMEM;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny goto done;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny }
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny }
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny
17195241500e46272018d7897d6e87249870caf2Pavel Reichl tmp_str = ldb_msg_find_attr_as_string(res->msgs[0], SYSDB_SUBDOMAIN_FOREST,
17195241500e46272018d7897d6e87249870caf2Pavel Reichl NULL);
17195241500e46272018d7897d6e87249870caf2Pavel Reichl if (tmp_str != NULL &&
17195241500e46272018d7897d6e87249870caf2Pavel Reichl (domain->forest == NULL ||
17195241500e46272018d7897d6e87249870caf2Pavel Reichl strcasecmp(tmp_str, domain->forest) != 0)) {
17195241500e46272018d7897d6e87249870caf2Pavel Reichl talloc_free(domain->forest);
17195241500e46272018d7897d6e87249870caf2Pavel Reichl domain->forest = talloc_strdup(domain, tmp_str);
17195241500e46272018d7897d6e87249870caf2Pavel Reichl if (domain->forest == NULL) {
17195241500e46272018d7897d6e87249870caf2Pavel Reichl ret = ENOMEM;
17195241500e46272018d7897d6e87249870caf2Pavel Reichl goto done;
17195241500e46272018d7897d6e87249870caf2Pavel Reichl }
17195241500e46272018d7897d6e87249870caf2Pavel Reichl }
17195241500e46272018d7897d6e87249870caf2Pavel Reichl
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zelenydone:
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny talloc_free(tmp_ctx);
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny return ret;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny}
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny
3912262270a6449ebe1d3e92c27c217b4044f894Simo Sorceerrno_t sysdb_master_domain_add_info(struct sss_domain_info *domain,
17195241500e46272018d7897d6e87249870caf2Pavel Reichl const char *flat, const char *id,
17195241500e46272018d7897d6e87249870caf2Pavel Reichl const char* forest)
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny{
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny TALLOC_CTX *tmp_ctx;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny struct ldb_message *msg;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny int ret;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny bool do_update = false;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny tmp_ctx = talloc_new(NULL);
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny if (tmp_ctx == NULL) {
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny return ENOMEM;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny }
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny msg = ldb_msg_new(tmp_ctx);
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny if (msg == NULL) {
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny ret = ENOMEM;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny goto done;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny }
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny
3912262270a6449ebe1d3e92c27c217b4044f894Simo Sorce msg->dn = ldb_dn_new_fmt(tmp_ctx, domain->sysdb->ldb,
0754ff886f909f0404038eb9c99dd61be1acf5b9Simo Sorce SYSDB_DOM_BASE, domain->name);
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny if (msg->dn == NULL) {
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny ret = EIO;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny goto done;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny }
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny
3912262270a6449ebe1d3e92c27c217b4044f894Simo Sorce if (flat != NULL && (domain->flat_name == NULL ||
3912262270a6449ebe1d3e92c27c217b4044f894Simo Sorce strcmp(domain->flat_name, flat) != 0)) {
7fe69bb6ec70bce439c6b975a9a0044c98ff502bSimo Sorce ret = ldb_msg_add_empty(msg, SYSDB_SUBDOMAIN_FLAT,
7fe69bb6ec70bce439c6b975a9a0044c98ff502bSimo Sorce LDB_FLAG_MOD_REPLACE, NULL);
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny if (ret != LDB_SUCCESS) {
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny ret = sysdb_error_to_errno(ret);
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny goto done;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny }
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny
3912262270a6449ebe1d3e92c27c217b4044f894Simo Sorce ret = ldb_msg_add_string(msg, SYSDB_SUBDOMAIN_FLAT, flat);
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny if (ret != LDB_SUCCESS) {
c03b28a38b14fdb59f74864ae4dc56affe256508Simo Sorce ret = sysdb_error_to_errno(ret);
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny goto done;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny }
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny do_update = true;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny }
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny
3912262270a6449ebe1d3e92c27c217b4044f894Simo Sorce if (id != NULL && (domain->domain_id == NULL ||
3912262270a6449ebe1d3e92c27c217b4044f894Simo Sorce strcmp(domain->domain_id, id) != 0)) {
3912262270a6449ebe1d3e92c27c217b4044f894Simo Sorce ret = ldb_msg_add_empty(msg, SYSDB_SUBDOMAIN_ID,
3912262270a6449ebe1d3e92c27c217b4044f894Simo Sorce LDB_FLAG_MOD_REPLACE, NULL);
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny if (ret != LDB_SUCCESS) {
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny ret = sysdb_error_to_errno(ret);
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny goto done;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny }
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny
3912262270a6449ebe1d3e92c27c217b4044f894Simo Sorce ret = ldb_msg_add_string(msg, SYSDB_SUBDOMAIN_ID, id);
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny if (ret != LDB_SUCCESS) {
c03b28a38b14fdb59f74864ae4dc56affe256508Simo Sorce ret = sysdb_error_to_errno(ret);
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny goto done;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny }
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny do_update = true;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny }
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny
17195241500e46272018d7897d6e87249870caf2Pavel Reichl if (forest != NULL && (domain->forest == NULL ||
17195241500e46272018d7897d6e87249870caf2Pavel Reichl strcmp(domain->forest, forest) != 0)) {
17195241500e46272018d7897d6e87249870caf2Pavel Reichl ret = ldb_msg_add_empty(msg, SYSDB_SUBDOMAIN_FOREST,
17195241500e46272018d7897d6e87249870caf2Pavel Reichl LDB_FLAG_MOD_REPLACE, NULL);
17195241500e46272018d7897d6e87249870caf2Pavel Reichl if (ret != LDB_SUCCESS) {
17195241500e46272018d7897d6e87249870caf2Pavel Reichl ret = sysdb_error_to_errno(ret);
17195241500e46272018d7897d6e87249870caf2Pavel Reichl goto done;
17195241500e46272018d7897d6e87249870caf2Pavel Reichl }
17195241500e46272018d7897d6e87249870caf2Pavel Reichl
17195241500e46272018d7897d6e87249870caf2Pavel Reichl ret = ldb_msg_add_string(msg, SYSDB_SUBDOMAIN_FOREST, forest);
17195241500e46272018d7897d6e87249870caf2Pavel Reichl if (ret != LDB_SUCCESS) {
17195241500e46272018d7897d6e87249870caf2Pavel Reichl ret = sysdb_error_to_errno(ret);
17195241500e46272018d7897d6e87249870caf2Pavel Reichl goto done;
17195241500e46272018d7897d6e87249870caf2Pavel Reichl }
17195241500e46272018d7897d6e87249870caf2Pavel Reichl
17195241500e46272018d7897d6e87249870caf2Pavel Reichl do_update = true;
17195241500e46272018d7897d6e87249870caf2Pavel Reichl }
17195241500e46272018d7897d6e87249870caf2Pavel Reichl
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny if (do_update == false) {
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny ret = EOK;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny goto done;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny }
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny
3912262270a6449ebe1d3e92c27c217b4044f894Simo Sorce ret = ldb_modify(domain->sysdb->ldb, msg);
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny if (ret != LDB_SUCCESS) {
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_FATAL_FAILURE, "Failed to add subdomain attributes to "
3912262270a6449ebe1d3e92c27c217b4044f894Simo Sorce "[%s]: [%d][%s]!\n", domain->name, ret,
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov ldb_errstring(domain->sysdb->ldb));
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny ret = sysdb_error_to_errno(ret);
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny goto done;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny }
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny
3b0e0352d8076909608d04750d3ea6b0d9ba33f6Jakub Hrozek ret = sysdb_master_domain_update(domain);
3b0e0352d8076909608d04750d3ea6b0d9ba33f6Jakub Hrozek if (ret != EOK) {
3b0e0352d8076909608d04750d3ea6b0d9ba33f6Jakub Hrozek goto done;
3b0e0352d8076909608d04750d3ea6b0d9ba33f6Jakub Hrozek }
3b0e0352d8076909608d04750d3ea6b0d9ba33f6Jakub Hrozek
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny ret = EOK;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zelenydone:
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny talloc_free(tmp_ctx);
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny return ret;
84c611c1b7c04cc7735ab54d4e5f48284b79e6fbJan Zeleny}
3912262270a6449ebe1d3e92c27c217b4044f894Simo Sorce
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorceerrno_t sysdb_subdomain_store(struct sysdb_ctx *sysdb,
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce const char *name, const char *realm,
09d7c105839bfc7447ea0f766413ed86675ca075Sumit Bose const char *flat_name, const char *domain_id,
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose bool mpg, bool enumerate, const char *forest)
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny{
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny TALLOC_CTX *tmp_ctx;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny struct ldb_message *msg;
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce struct ldb_dn *dn;
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce struct ldb_result *res;
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce const char *attrs[] = {"cn",
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce SYSDB_SUBDOMAIN_REALM,
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce SYSDB_SUBDOMAIN_FLAT,
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce SYSDB_SUBDOMAIN_ID,
09d7c105839bfc7447ea0f766413ed86675ca075Sumit Bose SYSDB_SUBDOMAIN_MPG,
b3458bbb5315b05d7ac1abc58f1c380761756603Jakub Hrozek SYSDB_SUBDOMAIN_ENUM,
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose SYSDB_SUBDOMAIN_FOREST,
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce NULL};
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce const char *tmp_str;
09d7c105839bfc7447ea0f766413ed86675ca075Sumit Bose bool tmp_bool;
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce bool store = false;
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce int realm_flags = 0;
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce int flat_flags = 0;
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce int id_flags = 0;
09d7c105839bfc7447ea0f766413ed86675ca075Sumit Bose int mpg_flags = 0;
b3458bbb5315b05d7ac1abc58f1c380761756603Jakub Hrozek int enum_flags = 0;
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose int forest_flags = 0;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny int ret;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny tmp_ctx = talloc_new(NULL);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny if (tmp_ctx == NULL) {
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny return ENOMEM;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny }
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce dn = ldb_dn_new_fmt(tmp_ctx, sysdb->ldb, SYSDB_DOM_BASE, name);
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce if (dn == NULL) {
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce ret = EIO;
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce goto done;
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce }
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce ret = ldb_search(sysdb->ldb, tmp_ctx, &res,
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce dn, LDB_SCOPE_BASE, attrs, NULL);
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce if (ret != LDB_SUCCESS) {
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce ret = EIO;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny goto done;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny }
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce if (res->count == 0) {
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce ret = sysdb_domain_create(sysdb, name);
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce if (ret) {
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce goto done;
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce }
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce store = true;
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce if (realm) realm_flags = LDB_FLAG_MOD_ADD;
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce if (flat_name) flat_flags = LDB_FLAG_MOD_ADD;
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce if (domain_id) id_flags = LDB_FLAG_MOD_ADD;
09d7c105839bfc7447ea0f766413ed86675ca075Sumit Bose mpg_flags = LDB_FLAG_MOD_ADD;
b3458bbb5315b05d7ac1abc58f1c380761756603Jakub Hrozek enum_flags = LDB_FLAG_MOD_ADD;
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose if (forest) forest_flags = LDB_FLAG_MOD_ADD;
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce } else if (res->count != 1) {
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce ret = EINVAL;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny goto done;
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce } else { /* 1 found */
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce if (realm) {
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce tmp_str = ldb_msg_find_attr_as_string(res->msgs[0],
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce SYSDB_SUBDOMAIN_REALM, NULL);
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce if (!tmp_str || strcasecmp(tmp_str, realm) != 0) {
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce realm_flags = LDB_FLAG_MOD_REPLACE;
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce }
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce }
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce if (flat_name) {
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce tmp_str = ldb_msg_find_attr_as_string(res->msgs[0],
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce SYSDB_SUBDOMAIN_FLAT, NULL);
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce if (!tmp_str || strcasecmp(tmp_str, flat_name) != 0) {
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce flat_flags = LDB_FLAG_MOD_REPLACE;
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce }
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce }
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce if (domain_id) {
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce tmp_str = ldb_msg_find_attr_as_string(res->msgs[0],
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce SYSDB_SUBDOMAIN_ID, NULL);
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce if (!tmp_str || strcasecmp(tmp_str, domain_id) != 0) {
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce id_flags = LDB_FLAG_MOD_REPLACE;
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce }
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce }
09d7c105839bfc7447ea0f766413ed86675ca075Sumit Bose
09d7c105839bfc7447ea0f766413ed86675ca075Sumit Bose tmp_bool = ldb_msg_find_attr_as_bool(res->msgs[0], SYSDB_SUBDOMAIN_MPG,
09d7c105839bfc7447ea0f766413ed86675ca075Sumit Bose !mpg);
09d7c105839bfc7447ea0f766413ed86675ca075Sumit Bose if (tmp_bool != mpg) {
09d7c105839bfc7447ea0f766413ed86675ca075Sumit Bose mpg_flags = LDB_FLAG_MOD_REPLACE;
09d7c105839bfc7447ea0f766413ed86675ca075Sumit Bose }
b3458bbb5315b05d7ac1abc58f1c380761756603Jakub Hrozek tmp_bool = ldb_msg_find_attr_as_bool(res->msgs[0], SYSDB_SUBDOMAIN_ENUM,
b3458bbb5315b05d7ac1abc58f1c380761756603Jakub Hrozek !enumerate);
b3458bbb5315b05d7ac1abc58f1c380761756603Jakub Hrozek if (tmp_bool != enumerate) {
b3458bbb5315b05d7ac1abc58f1c380761756603Jakub Hrozek enum_flags = LDB_FLAG_MOD_REPLACE;
b3458bbb5315b05d7ac1abc58f1c380761756603Jakub Hrozek }
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose if (forest) {
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose tmp_str = ldb_msg_find_attr_as_string(res->msgs[0],
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose SYSDB_SUBDOMAIN_FOREST, NULL);
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose if (!tmp_str || strcasecmp(tmp_str, forest) != 0) {
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose forest_flags = LDB_FLAG_MOD_REPLACE;
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose }
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose }
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny }
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
09d7c105839bfc7447ea0f766413ed86675ca075Sumit Bose if (!store && realm_flags == 0 && flat_flags == 0 && id_flags == 0
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose && mpg_flags == 0 && enum_flags == 0 && forest_flags == 0) {
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce ret = EOK;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny goto done;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny }
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce msg = ldb_msg_new(tmp_ctx);
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce if (msg == NULL) {
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce ret = ENOMEM;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny goto done;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny }
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce msg->dn = dn;
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce
09d7c105839bfc7447ea0f766413ed86675ca075Sumit Bose if (store) {
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce ret = ldb_msg_add_empty(msg, SYSDB_OBJECTCLASS, LDB_FLAG_MOD_ADD, NULL);
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce if (ret != LDB_SUCCESS) {
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce ret = sysdb_error_to_errno(ret);
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce goto done;
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce }
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce ret = ldb_msg_add_string(msg, SYSDB_OBJECTCLASS, SYSDB_SUBDOMAIN_CLASS);
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce if (ret != LDB_SUCCESS) {
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce ret = sysdb_error_to_errno(ret);
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce goto done;
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce }
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce }
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce if (realm_flags) {
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce ret = ldb_msg_add_empty(msg, SYSDB_SUBDOMAIN_REALM, realm_flags, NULL);
204cfc89a076fd32bf34f2abb3f809304aaa88abSimo Sorce if (ret != LDB_SUCCESS) {
204cfc89a076fd32bf34f2abb3f809304aaa88abSimo Sorce ret = sysdb_error_to_errno(ret);
204cfc89a076fd32bf34f2abb3f809304aaa88abSimo Sorce goto done;
204cfc89a076fd32bf34f2abb3f809304aaa88abSimo Sorce }
204cfc89a076fd32bf34f2abb3f809304aaa88abSimo Sorce
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce ret = ldb_msg_add_string(msg, SYSDB_SUBDOMAIN_REALM, realm);
204cfc89a076fd32bf34f2abb3f809304aaa88abSimo Sorce if (ret != LDB_SUCCESS) {
204cfc89a076fd32bf34f2abb3f809304aaa88abSimo Sorce ret = sysdb_error_to_errno(ret);
204cfc89a076fd32bf34f2abb3f809304aaa88abSimo Sorce goto done;
204cfc89a076fd32bf34f2abb3f809304aaa88abSimo Sorce }
204cfc89a076fd32bf34f2abb3f809304aaa88abSimo Sorce }
204cfc89a076fd32bf34f2abb3f809304aaa88abSimo Sorce
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce if (flat_flags) {
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce ret = ldb_msg_add_empty(msg, SYSDB_SUBDOMAIN_FLAT, flat_flags, NULL);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny if (ret != LDB_SUCCESS) {
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny ret = sysdb_error_to_errno(ret);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny goto done;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny }
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce ret = ldb_msg_add_string(msg, SYSDB_SUBDOMAIN_FLAT, flat_name);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny if (ret != LDB_SUCCESS) {
c03b28a38b14fdb59f74864ae4dc56affe256508Simo Sorce ret = sysdb_error_to_errno(ret);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny goto done;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny }
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny }
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce if (id_flags) {
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce ret = ldb_msg_add_empty(msg, SYSDB_SUBDOMAIN_ID, id_flags, NULL);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny if (ret != LDB_SUCCESS) {
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny ret = sysdb_error_to_errno(ret);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny goto done;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny }
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce ret = ldb_msg_add_string(msg, SYSDB_SUBDOMAIN_ID, domain_id);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny if (ret != LDB_SUCCESS) {
c03b28a38b14fdb59f74864ae4dc56affe256508Simo Sorce ret = sysdb_error_to_errno(ret);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny goto done;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny }
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny }
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
09d7c105839bfc7447ea0f766413ed86675ca075Sumit Bose if (mpg_flags) {
09d7c105839bfc7447ea0f766413ed86675ca075Sumit Bose ret = ldb_msg_add_empty(msg, SYSDB_SUBDOMAIN_MPG, mpg_flags, NULL);
09d7c105839bfc7447ea0f766413ed86675ca075Sumit Bose if (ret != LDB_SUCCESS) {
09d7c105839bfc7447ea0f766413ed86675ca075Sumit Bose ret = sysdb_error_to_errno(ret);
09d7c105839bfc7447ea0f766413ed86675ca075Sumit Bose goto done;
09d7c105839bfc7447ea0f766413ed86675ca075Sumit Bose }
09d7c105839bfc7447ea0f766413ed86675ca075Sumit Bose
09d7c105839bfc7447ea0f766413ed86675ca075Sumit Bose ret = ldb_msg_add_string(msg, SYSDB_SUBDOMAIN_MPG,
09d7c105839bfc7447ea0f766413ed86675ca075Sumit Bose mpg ? "TRUE" : "FALSE");
09d7c105839bfc7447ea0f766413ed86675ca075Sumit Bose if (ret != LDB_SUCCESS) {
09d7c105839bfc7447ea0f766413ed86675ca075Sumit Bose ret = sysdb_error_to_errno(ret);
09d7c105839bfc7447ea0f766413ed86675ca075Sumit Bose goto done;
09d7c105839bfc7447ea0f766413ed86675ca075Sumit Bose }
09d7c105839bfc7447ea0f766413ed86675ca075Sumit Bose }
09d7c105839bfc7447ea0f766413ed86675ca075Sumit Bose
b3458bbb5315b05d7ac1abc58f1c380761756603Jakub Hrozek if (enum_flags) {
b3458bbb5315b05d7ac1abc58f1c380761756603Jakub Hrozek ret = ldb_msg_add_empty(msg, SYSDB_SUBDOMAIN_ENUM, enum_flags, NULL);
b3458bbb5315b05d7ac1abc58f1c380761756603Jakub Hrozek if (ret != LDB_SUCCESS) {
b3458bbb5315b05d7ac1abc58f1c380761756603Jakub Hrozek ret = sysdb_error_to_errno(ret);
b3458bbb5315b05d7ac1abc58f1c380761756603Jakub Hrozek goto done;
b3458bbb5315b05d7ac1abc58f1c380761756603Jakub Hrozek }
b3458bbb5315b05d7ac1abc58f1c380761756603Jakub Hrozek
b3458bbb5315b05d7ac1abc58f1c380761756603Jakub Hrozek ret = ldb_msg_add_string(msg, SYSDB_SUBDOMAIN_ENUM,
b3458bbb5315b05d7ac1abc58f1c380761756603Jakub Hrozek enumerate ? "TRUE" : "FALSE");
b3458bbb5315b05d7ac1abc58f1c380761756603Jakub Hrozek if (ret != LDB_SUCCESS) {
b3458bbb5315b05d7ac1abc58f1c380761756603Jakub Hrozek ret = sysdb_error_to_errno(ret);
b3458bbb5315b05d7ac1abc58f1c380761756603Jakub Hrozek goto done;
b3458bbb5315b05d7ac1abc58f1c380761756603Jakub Hrozek }
b3458bbb5315b05d7ac1abc58f1c380761756603Jakub Hrozek }
b3458bbb5315b05d7ac1abc58f1c380761756603Jakub Hrozek
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose if (forest_flags) {
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose ret = ldb_msg_add_empty(msg, SYSDB_SUBDOMAIN_FOREST, forest_flags,
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose NULL);
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose if (ret != LDB_SUCCESS) {
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose ret = sysdb_error_to_errno(ret);
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose goto done;
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose }
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose ret = ldb_msg_add_string(msg, SYSDB_SUBDOMAIN_FOREST, forest);
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose if (ret != LDB_SUCCESS) {
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose ret = sysdb_error_to_errno(ret);
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose goto done;
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose }
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose }
c5711b0279ea85d69fe3c77dfb194360c346e1d7Sumit Bose
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny ret = ldb_modify(sysdb->ldb, msg);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny if (ret != LDB_SUCCESS) {
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_FATAL_FAILURE, "Failed to add subdomain attributes to "
1187a07ed4207c1c326fdf83915dddfe472b8620Simo Sorce "[%s]: [%d][%s]!\n", name, ret,
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov ldb_errstring(sysdb->ldb));
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny ret = sysdb_error_to_errno(ret);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny goto done;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny }
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny ret = EOK;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zelenydone:
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny talloc_free(tmp_ctx);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny return ret;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny}
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorceerrno_t sysdb_subdomain_delete(struct sysdb_ctx *sysdb, const char *name)
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny{
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny TALLOC_CTX *tmp_ctx = NULL;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny struct ldb_dn *dn;
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce int ret;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny tmp_ctx = talloc_new(NULL);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny if (tmp_ctx == NULL) {
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny ret = ENOMEM;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny goto done;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny }
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_TRACE_FUNC, "Removing sub-domain [%s] from db.\n", name);
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce dn = ldb_dn_new_fmt(tmp_ctx, sysdb->ldb, SYSDB_DOM_BASE, name);
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce if (dn == NULL) {
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny ret = ENOMEM;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny goto done;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny }
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
bba1a5fd62cffcae076d1351df5a83fbc4a6ec17Simo Sorce ret = sysdb_delete_recursive(sysdb, dn, true);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny if (ret != EOK) {
a3c8390d19593b1e5277d95bfb4ab206d4785150Nikolai Kondrashov DEBUG(SSSDBG_OP_FAILURE, "sysdb_delete_recursive failed.\n");
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny goto done;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny }
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zelenydone:
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny talloc_free(tmp_ctx);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny return ret;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny}