summaryrefslogtreecommitdiffstats
path: root/src/db
diff options
context:
space:
mode:
authorPavel Březina <pbrezina@redhat.com>2016-11-15 15:15:35 +0100
committerLukas Slebodnik <lslebodn@redhat.com>2016-12-19 23:24:07 +0100
commit3be2628d8aba6aeb99ac1484da990f1fad8169ec (patch)
tree6c84b80e655297d2ac483722923bed37cffa928d /src/db
parent488518dde58724daa13b9216a0f1af6e0ba5401f (diff)
downloadsssd-3be2628d8aba6aeb99ac1484da990f1fad8169ec.tar.gz
sssd-3be2628d8aba6aeb99ac1484da990f1fad8169ec.tar.xz
sssd-3be2628d8aba6aeb99ac1484da990f1fad8169ec.zip
cache_req: add object by id
This request returns either user or group object. Resolves: https://fedorahosted.org/sssd/ticket/3151 Reviewed-by: Lukáš Slebodník <lslebodn@redhat.com>
Diffstat (limited to 'src/db')
-rw-r--r--src/db/sysdb.h7
-rw-r--r--src/db/sysdb_ops.c64
2 files changed, 59 insertions, 12 deletions
diff --git a/src/db/sysdb.h b/src/db/sysdb.h
index 350e393b3..407a1979f 100644
--- a/src/db/sysdb.h
+++ b/src/db/sysdb.h
@@ -204,6 +204,7 @@
#define SYSDB_SID_FILTER "(&(|("SYSDB_UC")("SYSDB_GC"))("SYSDB_SID_STR"=%s))"
#define SYSDB_UUID_FILTER "(&(|("SYSDB_UC")("SYSDB_GC"))("SYSDB_UUID"=%s))"
#define SYSDB_NAME_FILTER "(&(|("SYSDB_UC")("SYSDB_GC"))("SYSDB_NAME"=%s))"
+#define SYSDB_ID_FILTER "(&(|("SYSDB_UC")("SYSDB_GC"))(|("SYSDB_UIDNUM"=%u)("SYSDB_GIDNUM"=%u)))"
#define SYSDB_USER_CERT_FILTER "(&("SYSDB_UC")%s)"
#define SYSDB_HAS_ENUMERATED "has_enumerated"
@@ -1194,6 +1195,12 @@ errno_t sysdb_idmap_get_mappings(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
struct ldb_result **_result);
+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);
+
errno_t sysdb_search_object_by_name(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
const char *name,
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,