From 5af7dcbba7a54c9a017a7d317f74453254125eb7 Mon Sep 17 00:00:00 2001 From: Lukas Slebodnik Date: Wed, 29 Nov 2017 17:57:56 +0100 Subject: [PATCH 76/79] confdb: Move detection files to separate function --- src/confdb/confdb.c | 73 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 41 insertions(+), 32 deletions(-) diff --git a/src/confdb/confdb.c b/src/confdb/confdb.c index a028224817f12ace2a0c4165d7b9cb0bb80ce5a1..c41bd5087592ba15d8956e0279aaf72ba86936ed 100644 --- a/src/confdb/confdb.c +++ b/src/confdb/confdb.c @@ -1718,52 +1718,61 @@ done: return ret; } -static int confdb_has_files_domain(struct confdb_ctx *cdb) +static bool need_implicit_files_domain(TALLOC_CTX *tmp_ctx, + struct ldb_result *doms) { - TALLOC_CTX *tmp_ctx = NULL; - struct ldb_dn *dn = NULL; - struct ldb_result *res = NULL; - static const char *attrs[] = { CONFDB_DOMAIN_ID_PROVIDER, NULL }; const char *id_provider = NULL; - int ret; unsigned int i; - tmp_ctx = talloc_new(NULL); - if (tmp_ctx == NULL) { - return ENOMEM; - } - - dn = ldb_dn_new(tmp_ctx, cdb->ldb, CONFDB_DOMAIN_BASEDN); - if (dn == NULL) { - ret = ENOMEM; - goto done; - } - - ret = ldb_search(cdb->ldb, tmp_ctx, &res, dn, LDB_SCOPE_ONELEVEL, - attrs, NULL); - if (ret != LDB_SUCCESS) { - ret = EIO; - goto done; - } - - for (i = 0; i < res->count; i++) { - id_provider = ldb_msg_find_attr_as_string(res->msgs[i], + for (i = 0; i < doms->count; i++) { + id_provider = ldb_msg_find_attr_as_string(doms->msgs[i], CONFDB_DOMAIN_ID_PROVIDER, NULL); if (id_provider == NULL) { - DEBUG(SSSDBG_CRIT_FAILURE, + DEBUG(SSSDBG_OP_FAILURE, "The object [%s] doesn't have a id_provider\n", - ldb_dn_get_linearized(res->msgs[i]->dn)); - ret = EINVAL; - goto done; + ldb_dn_get_linearized(doms->msgs[i]->dn)); + continue; } if (strcasecmp(id_provider, "files") == 0) { - break; + return false; } } - ret = i < res->count ? EOK : ENOENT; + return true; +} + +static int confdb_has_files_domain(struct confdb_ctx *cdb) +{ + TALLOC_CTX *tmp_ctx = NULL; + struct ldb_dn *dn = NULL; + struct ldb_result *res = NULL; + static const char *attrs[] = { CONFDB_DOMAIN_ID_PROVIDER, NULL }; + int ret; + bool need_files_dom; + + tmp_ctx = talloc_new(NULL); + if (tmp_ctx == NULL) { + return ENOMEM; + } + + dn = ldb_dn_new(tmp_ctx, cdb->ldb, CONFDB_DOMAIN_BASEDN); + if (dn == NULL) { + ret = ENOMEM; + goto done; + } + + ret = ldb_search(cdb->ldb, tmp_ctx, &res, dn, LDB_SCOPE_ONELEVEL, + attrs, NULL); + if (ret != LDB_SUCCESS) { + ret = EIO; + goto done; + } + + need_files_dom = need_implicit_files_domain(tmp_ctx, res); + + ret = need_files_dom ? ENOENT : EOK; done: talloc_free(tmp_ctx); return ret; -- 2.15.1