summaryrefslogtreecommitdiffstats
path: root/src/db/sysdb_ops.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/db/sysdb_ops.c')
-rw-r--r--src/db/sysdb_ops.c64
1 files changed, 52 insertions, 12 deletions
diff --git a/src/db/sysdb_ops.c b/src/db/sysdb_ops.c
index 867fbf50e..cfa158634 100644
--- a/src/db/sysdb_ops.c
+++ b/src/db/sysdb_ops.c
@@ -4475,12 +4475,11 @@ done:
return ret;
}
-static errno_t sysdb_search_object_by_str_attr(TALLOC_CTX *mem_ctx,
- struct sss_domain_info *domain,
- const char *filter_tmpl,
- const char *str,
- const char **attrs,
- struct ldb_result **_res)
+static errno_t sysdb_search_object_attr(TALLOC_CTX *mem_ctx,
+ struct sss_domain_info *domain,
+ const char *filter,
+ const char **attrs,
+ struct ldb_result **_res)
{
TALLOC_CTX *tmp_ctx;
const char *def_attrs[] = { SYSDB_NAME, SYSDB_UIDNUM, SYSDB_GIDNUM,
@@ -4504,9 +4503,9 @@ static errno_t sysdb_search_object_by_str_attr(TALLOC_CTX *mem_ctx,
goto done;
}
- ret = ldb_search(domain->sysdb->ldb, tmp_ctx, &res,
- basedn, LDB_SCOPE_SUBTREE, attrs?attrs:def_attrs,
- filter_tmpl, str);
+ ret = ldb_search(domain->sysdb->ldb, tmp_ctx, &res, basedn,
+ LDB_SCOPE_SUBTREE, attrs ? attrs : def_attrs,
+ "%s", filter);
if (ret != EOK) {
ret = sysdb_error_to_errno(ret);
DEBUG(SSSDBG_OP_FAILURE, "ldb_search failed.\n");
@@ -4514,9 +4513,9 @@ static errno_t sysdb_search_object_by_str_attr(TALLOC_CTX *mem_ctx,
}
if (res->count > 1) {
- DEBUG(SSSDBG_CRIT_FAILURE, "Search for [%s] with filter [%s] " \
- "returned more than one object.\n",
- str, filter_tmpl);
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "Search with filter [%s] returned more than one object.\n",
+ filter);
ret = EINVAL;
goto done;
} else if (res->count == 0) {
@@ -4544,6 +4543,47 @@ done:
return ret;
}
+static errno_t sysdb_search_object_by_str_attr(TALLOC_CTX *mem_ctx,
+ struct sss_domain_info *domain,
+ const char *filter_tmpl,
+ const char *str,
+ const char **attrs,
+ struct ldb_result **_res)
+{
+ char *filter;
+ errno_t ret;
+
+ filter = talloc_asprintf(NULL, filter_tmpl, str);
+ if (filter == NULL) {
+ return ENOMEM;
+ }
+
+ ret = sysdb_search_object_attr(mem_ctx, domain, filter, attrs, _res);
+
+ talloc_free(filter);
+ return ret;
+}
+
+errno_t sysdb_search_object_by_id(TALLOC_CTX *mem_ctx,
+ struct sss_domain_info *domain,
+ uint32_t id,
+ const char **attrs,
+ struct ldb_result **res)
+{
+ char *filter;
+ errno_t ret;
+
+ filter = talloc_asprintf(NULL, SYSDB_ID_FILTER, id, id);
+ if (filter == NULL) {
+ return ENOMEM;
+ }
+
+ ret = sysdb_search_object_attr(mem_ctx, domain, filter, attrs, res);
+
+ talloc_free(filter);
+ return ret;
+}
+
errno_t sysdb_search_object_by_name(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
const char *name,