>From fec0004dd2744376811de49bac00263dbccee02a Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Tue, 6 Jan 2015 14:21:27 +0100 Subject: [PATCH] SYSDB: Reduce code duplication in sysdb_gpo.c Two places in sysdb_gpo.c were searching for the GPO result object while the only difference was the attributes searched for. Remove this duplication and make the search function static as it's not used outside the module. --- src/db/sysdb.h | 4 -- src/db/sysdb_gpo.c | 137 +++++++++++++++++++++++------------------------------ 2 files changed, 59 insertions(+), 82 deletions(-) diff --git a/src/db/sysdb.h b/src/db/sysdb.h index b1e057107cc6e3d4ce7b7bb8e821a2414c3424a7..946cb5532da9481ed190176c03d873e1df84bd7d 100644 --- a/src/db/sysdb.h +++ b/src/db/sysdb.h @@ -1089,10 +1089,6 @@ errno_t sysdb_gpo_get_gpos(TALLOC_CTX *mem_ctx, #define SYSDB_TMPL_GPO_RESULT_BASE SYSDB_GPO_CONTAINER","SYSDB_DOM_BASE #define SYSDB_TMPL_GPO_RESULT "cn=%s,"SYSDB_TMPL_GPO_RESULT_BASE -errno_t sysdb_gpo_get_gpo_result_object(TALLOC_CTX *mem_ctx, - struct sss_domain_info *domain, - struct ldb_result **_result); - errno_t sysdb_gpo_delete_gpo_result_object(TALLOC_CTX *mem_ctx, struct sss_domain_info *domain); diff --git a/src/db/sysdb_gpo.c b/src/db/sysdb_gpo.c index 2fb9b748d750b92dc990b8175869262b666306db..97a5a05237a9eea68ab88fb0d774650a568ac341 100644 --- a/src/db/sysdb_gpo.c +++ b/src/db/sysdb_gpo.c @@ -528,6 +528,62 @@ done: return ret; } +static errno_t +sysdb_gpo_get_gpo_result_object(TALLOC_CTX *mem_ctx, + struct sss_domain_info *domain, + const char **attrs, + struct ldb_result **_result) +{ + errno_t ret; + int lret; + struct ldb_dn *base_dn; + TALLOC_CTX *tmp_ctx; + struct ldb_result *res; + + tmp_ctx = talloc_new(NULL); + if (!tmp_ctx) return ENOMEM; + + DEBUG(SSSDBG_TRACE_ALL, SYSDB_TMPL_GPO_RESULT_BASE"\n", domain->name); + + base_dn = ldb_dn_new_fmt(tmp_ctx, domain->sysdb->ldb, + SYSDB_TMPL_GPO_RESULT_BASE, + domain->name); + if (!base_dn) { + ret = ENOMEM; + goto done; + } + + lret = ldb_search(domain->sysdb->ldb, tmp_ctx, &res, base_dn, + LDB_SCOPE_SUBTREE, attrs, SYSDB_GPO_RESULT_FILTER); + if (lret) { + DEBUG(SSSDBG_MINOR_FAILURE, + "Could not locate GPO Result object: [%s]\n", + ldb_strerror(lret)); + ret = sysdb_error_to_errno(lret); + goto done; + } + + if (res->count == 0) { + ret = ENOENT; + goto done; + } + + *_result = talloc_steal(mem_ctx, res); + ret = EOK; + +done: + + if (ret == ENOENT) { + DEBUG(SSSDBG_TRACE_ALL, "No GPO Result object.\n"); + } else if (ret) { + DEBUG(SSSDBG_OP_FAILURE, "Error: %d (%s)\n", ret, strerror(ret)); + } + + talloc_free(tmp_ctx); + return ret; +} + + errno_t sysdb_gpo_get_gpo_result_setting(TALLOC_CTX *mem_ctx, struct sss_domain_info *domain, @@ -546,28 +602,8 @@ sysdb_gpo_get_gpo_result_setting(TALLOC_CTX *mem_ctx, tmp_ctx = talloc_new(NULL); if (!tmp_ctx) return ENOMEM; - DEBUG(SSSDBG_TRACE_ALL, SYSDB_TMPL_GPO_RESULT_BASE"\n", domain->name); - - base_dn = ldb_dn_new_fmt(tmp_ctx, domain->sysdb->ldb, - SYSDB_TMPL_GPO_RESULT_BASE, - domain->name); - if (!base_dn) { - ret = ENOMEM; - goto done; - } - - lret = ldb_search(domain->sysdb->ldb, tmp_ctx, &res, base_dn, - LDB_SCOPE_SUBTREE, attrs, SYSDB_GPO_RESULT_FILTER); - if (lret) { - DEBUG(SSSDBG_MINOR_FAILURE, - "Could not locate GPO Result: [%s]\n", - ldb_strerror(lret)); - ret = sysdb_error_to_errno(lret); - goto done; - } - - if (res->count == 0) { - ret = ENOENT; + ret = sysdb_gpo_get_gpo_result_object(tmp_ctx, domain, attrs, &res); + if (ret != EOK) { goto done; } @@ -598,61 +634,6 @@ done: } -errno_t -sysdb_gpo_get_gpo_result_object(TALLOC_CTX *mem_ctx, - struct sss_domain_info *domain, - struct ldb_result **_result) -{ - errno_t ret; - int lret; - struct ldb_dn *base_dn; - TALLOC_CTX *tmp_ctx; - struct ldb_result *res; - - tmp_ctx = talloc_new(NULL); - if (!tmp_ctx) return ENOMEM; - - DEBUG(SSSDBG_TRACE_ALL, SYSDB_TMPL_GPO_RESULT_BASE"\n", domain->name); - - base_dn = ldb_dn_new_fmt(tmp_ctx, domain->sysdb->ldb, - SYSDB_TMPL_GPO_RESULT_BASE, - domain->name); - if (!base_dn) { - ret = ENOMEM; - goto done; - } - - lret = ldb_search(domain->sysdb->ldb, tmp_ctx, &res, base_dn, - LDB_SCOPE_SUBTREE, NULL, SYSDB_GPO_RESULT_FILTER); - if (lret) { - DEBUG(SSSDBG_MINOR_FAILURE, - "Could not locate GPO Result object: [%s]\n", - ldb_strerror(lret)); - ret = sysdb_error_to_errno(lret); - goto done; - } - - if (res->count == 0) { - ret = ENOENT; - goto done; - } - - *_result = talloc_steal(mem_ctx, res); - ret = EOK; - -done: - - if (ret == ENOENT) { - DEBUG(SSSDBG_TRACE_ALL, "No GPO Result object.\n"); - } else if (ret) { - DEBUG(SSSDBG_OP_FAILURE, "Error: %d (%s)\n", ret, strerror(ret)); - } - - talloc_free(tmp_ctx); - return ret; -} - - errno_t sysdb_gpo_delete_gpo_result_object(TALLOC_CTX *mem_ctx, struct sss_domain_info *domain) { @@ -668,7 +649,7 @@ errno_t sysdb_gpo_delete_gpo_result_object(TALLOC_CTX *mem_ctx, in_transaction = true; - ret = sysdb_gpo_get_gpo_result_object(mem_ctx, domain, &res); + ret = sysdb_gpo_get_gpo_result_object(mem_ctx, domain, NULL, &res); if (ret != EOK && ret != ENOENT) { DEBUG(SSSDBG_OP_FAILURE, "Could not delete GPO result object: %d\n", ret); -- 1.9.3