diff options
Diffstat (limited to 'src/db/sysdb_ops.c')
-rw-r--r-- | src/db/sysdb_ops.c | 64 |
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, |