summaryrefslogtreecommitdiffstats
path: root/src/db
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2015-01-06 14:21:27 +0100
committerJakub Hrozek <jhrozek@redhat.com>2015-01-13 18:31:10 +0100
commit4f4d35e14b4dc35a8df0ba28d6bd26f9ce75f962 (patch)
treea2ca1cd21dec1939b54071d57f20c090db441608 /src/db
parenteab17959df71341073f946c533f59fc5e593b35c (diff)
downloadsssd-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/db')
-rw-r--r--src/db/sysdb.h4
-rw-r--r--src/db/sysdb_gpo.c75
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);