diff options
author | Jakub Hrozek <jhrozek@redhat.com> | 2015-01-06 14:21:27 +0100 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2015-01-13 18:31:10 +0100 |
commit | 4f4d35e14b4dc35a8df0ba28d6bd26f9ce75f962 (patch) | |
tree | a2ca1cd21dec1939b54071d57f20c090db441608 /src | |
parent | eab17959df71341073f946c533f59fc5e593b35c (diff) | |
download | sssd-4f4d35e14b4dc35a8df0ba28d6bd26f9ce75f962.tar.gz sssd-4f4d35e14b4dc35a8df0ba28d6bd26f9ce75f962.tar.xz sssd-4f4d35e14b4dc35a8df0ba28d6bd26f9ce75f962.zip |
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.
Reviewed-by: Pavel Reichl <preichl@redhat.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/db/sysdb.h | 4 | ||||
-rw-r--r-- | src/db/sysdb_gpo.c | 75 |
2 files changed, 27 insertions, 52 deletions
diff --git a/src/db/sysdb.h b/src/db/sysdb.h index 9e33fee37..3fb18b9bb 100644 --- a/src/db/sysdb.h +++ b/src/db/sysdb.h @@ -1090,10 +1090,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 2fb9b748d..b43565cbf 100644 --- a/src/db/sysdb_gpo.c +++ b/src/db/sysdb_gpo.c @@ -528,20 +528,17 @@ done: return ret; } -errno_t -sysdb_gpo_get_gpo_result_setting(TALLOC_CTX *mem_ctx, - struct sss_domain_info *domain, - const char *ini_key, - const char **_ini_value) +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; - const char *ini_value; - - const char *attrs[] = {ini_key, NULL}; tmp_ctx = talloc_new(NULL); if (!tmp_ctx) return ENOMEM; @@ -560,7 +557,7 @@ sysdb_gpo_get_gpo_result_setting(TALLOC_CTX *mem_ctx, LDB_SCOPE_SUBTREE, attrs, SYSDB_GPO_RESULT_FILTER); if (lret) { DEBUG(SSSDBG_MINOR_FAILURE, - "Could not locate GPO Result: [%s]\n", + "Could not locate GPO Result object: [%s]\n", ldb_strerror(lret)); ret = sysdb_error_to_errno(lret); goto done; @@ -571,24 +568,13 @@ sysdb_gpo_get_gpo_result_setting(TALLOC_CTX *mem_ctx, goto done; } - ini_value = ldb_msg_find_attr_as_string(res->msgs[0], - ini_key, - NULL); - DEBUG(SSSDBG_TRACE_FUNC, "key [%s] value [%s]\n", ini_key, ini_value); - - *_ini_value = talloc_strdup(mem_ctx, ini_value); - if (!*_ini_value && ini_value) { - /* If ini_value was NULL, this is expected to also be NULL */ - ret = ENOMEM; - goto done; - } - + *_result = talloc_steal(mem_ctx, res); ret = EOK; done: if (ret == ENOENT) { - DEBUG(SSSDBG_TRACE_ALL, "No setting for key [%s].\n", ini_key); + DEBUG(SSSDBG_TRACE_ALL, "No GPO Result object.\n"); } else if (ret) { DEBUG(SSSDBG_OP_FAILURE, "Error: %d (%s)\n", ret, strerror(ret)); } @@ -599,51 +585,44 @@ done: errno_t -sysdb_gpo_get_gpo_result_object(TALLOC_CTX *mem_ctx, - struct sss_domain_info *domain, - struct ldb_result **_result) +sysdb_gpo_get_gpo_result_setting(TALLOC_CTX *mem_ctx, + struct sss_domain_info *domain, + const char *ini_key, + const char **_ini_value) { errno_t ret; - int lret; - struct ldb_dn *base_dn; TALLOC_CTX *tmp_ctx; struct ldb_result *res; + const char *ini_value; + + const char *attrs[] = {ini_key, NULL}; 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; + ret = sysdb_gpo_get_gpo_result_object(tmp_ctx, domain, attrs, &res); + if (ret != EOK) { 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; - } + ini_value = ldb_msg_find_attr_as_string(res->msgs[0], + ini_key, + NULL); + DEBUG(SSSDBG_TRACE_FUNC, "key [%s] value [%s]\n", ini_key, ini_value); - if (res->count == 0) { - ret = ENOENT; + *_ini_value = talloc_strdup(mem_ctx, ini_value); + if (!*_ini_value && ini_value) { + /* If ini_value was NULL, this is expected to also be NULL */ + ret = ENOMEM; goto done; } - *_result = talloc_steal(mem_ctx, res); ret = EOK; done: if (ret == ENOENT) { - DEBUG(SSSDBG_TRACE_ALL, "No GPO Result object.\n"); + DEBUG(SSSDBG_TRACE_ALL, "No setting for key [%s].\n", ini_key); } else if (ret) { DEBUG(SSSDBG_OP_FAILURE, "Error: %d (%s)\n", ret, strerror(ret)); } @@ -668,7 +647,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); |