From d93b4fe14b0f72bd8311497d18204f153c104007 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pawe=C5=82=20Po=C5=82awski?= <ppolawsk@redhat.com>
Date: Fri, 13 Mar 2020 00:57:55 +0000
Subject: [PATCH 14/14] SYSDB: Cache selector as enum
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Sysdb has two sources of cache: timestamp based and persistent.
This change changes implementation of that selector from
binary flag to enum.
Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
Reviewed-by: Pavel Březina <pbrezina@redhat.com>
---
src/db/sysdb.h | 9 +++++---
src/db/sysdb_search.c | 32 ++++++++++++++++++++++----
src/providers/be_refresh.c | 10 ++++----
src/tests/cmocka/test_sysdb_ts_cache.c | 10 ++++----
4 files changed, 43 insertions(+), 18 deletions(-)
diff --git a/src/db/sysdb.h b/src/db/sysdb.h
index 0e6e9266b..beee710af 100644
--- a/src/db/sysdb.h
+++ b/src/db/sysdb.h
@@ -1217,14 +1217,17 @@ int sysdb_search_users(TALLOC_CTX *mem_ctx,
size_t *msgs_count,
struct ldb_message ***msgs);
-#define SYSDB_SEARCH_WITH_TS_ONLY_TS_FILTER 0x0001
-#define SYSDB_SEARCH_WITH_TS_ONLY_SYSDB_FILTER 0x0002
+enum sysdb_cache_type {
+ SYSDB_CACHE_TYPE_NONE,
+ SYSDB_CACHE_TYPE_TIMESTAMP,
+ SYSDB_CACHE_TYPE_PERSISTENT
+};
errno_t sysdb_search_with_ts_attr(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
struct ldb_dn *base_dn,
enum ldb_scope scope,
- int optflags,
+ enum sysdb_cache_type search_cache,
const char *filter,
const char *attrs[],
struct ldb_result **_result);
diff --git a/src/db/sysdb_search.c b/src/db/sysdb_search.c
index a71c43112..6c89b4c98 100644
--- a/src/db/sysdb_search.c
+++ b/src/db/sysdb_search.c
@@ -639,7 +639,7 @@ errno_t sysdb_search_with_ts_attr(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
struct ldb_dn *base_dn,
enum ldb_scope scope,
- int optflags,
+ enum sysdb_cache_type search_cache,
const char *filter,
const char *attrs[],
struct ldb_result **_res)
@@ -666,7 +666,8 @@ errno_t sysdb_search_with_ts_attr(TALLOC_CTX *mem_ctx,
goto done;
}
- if (optflags & SYSDB_SEARCH_WITH_TS_ONLY_SYSDB_FILTER) {
+ switch (search_cache) {
+ case SYSDB_CACHE_TYPE_PERSISTENT: {
/* We only care about searching the persistent db */
ts_cache_res = talloc_zero(tmp_ctx, struct ldb_result);
if (ts_cache_res == NULL) {
@@ -675,7 +676,14 @@ errno_t sysdb_search_with_ts_attr(TALLOC_CTX *mem_ctx,
}
ts_cache_res->count = 0;
ts_cache_res->msgs = NULL;
- } else {
+
+ break;
+ }
+
+ case SYSDB_CACHE_TYPE_TIMESTAMP:
+ /* FALLTHOUGH*/
+ SSS_ATTRIBUTE_FALLTHROUGH;
+ default: {
/* Because the timestamp database does not contain all the
* attributes, we need to search the persistent db for each
* of the entries found and merge the results
@@ -708,9 +716,13 @@ errno_t sysdb_search_with_ts_attr(TALLOC_CTX *mem_ctx,
if (ret != EOK) {
goto done;
}
+
+ break;
+ }
}
- if (optflags & SYSDB_SEARCH_WITH_TS_ONLY_TS_FILTER) {
+ switch (search_cache) {
+ case SYSDB_CACHE_TYPE_TIMESTAMP: {
/* The filter only contains timestamp attrs, no need to search the
* persistent db
*/
@@ -718,7 +730,14 @@ errno_t sysdb_search_with_ts_attr(TALLOC_CTX *mem_ctx,
res->count = ts_cache_res->count;
res->msgs = talloc_steal(res, ts_cache_res->msgs);
}
- } else {
+
+ break;
+ }
+
+ case SYSDB_CACHE_TYPE_PERSISTENT:
+ /* FALLTHOUGH*/
+ SSS_ATTRIBUTE_FALLTHROUGH;
+ default: {
/* Because some of the attributes being searched might exist in the persistent
* database only, we also search the persistent db
*/
@@ -738,6 +757,9 @@ errno_t sysdb_search_with_ts_attr(TALLOC_CTX *mem_ctx,
ret = ENOMEM;
goto done;
}
+
+ break;
+ }
}
*_res = talloc_steal(mem_ctx, res);
diff --git a/src/providers/be_refresh.c b/src/providers/be_refresh.c
index d503556a3..8fcfb86b4 100644
--- a/src/providers/be_refresh.c
+++ b/src/providers/be_refresh.c
@@ -35,7 +35,7 @@ static errno_t be_refresh_get_values_ex(TALLOC_CTX *mem_ctx,
struct ldb_dn *base_dn,
const char *key_attr,
const char *value_attr,
- int optflags,
+ enum sysdb_cache_type search_cache,
char ***_values)
{
TALLOC_CTX *tmp_ctx = NULL;
@@ -65,7 +65,7 @@ static errno_t be_refresh_get_values_ex(TALLOC_CTX *mem_ctx,
ret = sysdb_search_with_ts_attr(tmp_ctx, domain, base_dn,
LDB_SCOPE_SUBTREE,
- optflags,
+ search_cache,
filter, attrs,
&res);
if (ret != EOK) {
@@ -103,7 +103,7 @@ static errno_t be_refresh_get_values(TALLOC_CTX *mem_ctx,
struct ldb_dn *base_dn = NULL;
errno_t ret;
const char *key_attr;
- int optflags = SYSDB_SEARCH_WITH_TS_ONLY_TS_FILTER;
+ enum sysdb_cache_type search_cache = SYSDB_CACHE_TYPE_TIMESTAMP;
switch (type) {
case BE_REFRESH_TYPE_INITGROUPS:
@@ -121,7 +121,7 @@ static errno_t be_refresh_get_values(TALLOC_CTX *mem_ctx,
case BE_REFRESH_TYPE_NETGROUPS:
key_attr = SYSDB_CACHE_EXPIRE;
// Netgroup will reside in persistent cache rather than timestamp one
- optflags = SYSDB_SEARCH_WITH_TS_ONLY_SYSDB_FILTER;
+ search_cache = SYSDB_CACHE_TYPE_PERSISTENT;
base_dn = sysdb_netgroup_base_dn(mem_ctx, domain);
break;
default:
@@ -136,7 +136,7 @@ static errno_t be_refresh_get_values(TALLOC_CTX *mem_ctx,
ret = be_refresh_get_values_ex(mem_ctx, domain, period,
base_dn, key_attr,
- attr_name, optflags, _values);
+ attr_name, search_cache, _values);
talloc_free(base_dn);
return ret;
diff --git a/src/tests/cmocka/test_sysdb_ts_cache.c b/src/tests/cmocka/test_sysdb_ts_cache.c
index d2296d1b8..ae8b1b16c 100644
--- a/src/tests/cmocka/test_sysdb_ts_cache.c
+++ b/src/tests/cmocka/test_sysdb_ts_cache.c
@@ -1438,7 +1438,7 @@ static void test_sysdb_search_with_ts(void **state)
test_ctx->tctx->dom,
base_dn,
LDB_SCOPE_SUBTREE,
- 0,
+ SYSDB_CACHE_TYPE_NONE,
SYSDB_NAME"=*",
attrs,
&res);
@@ -1523,7 +1523,7 @@ static void test_sysdb_search_with_ts(void **state)
test_ctx->tctx->dom,
base_dn,
LDB_SCOPE_SUBTREE,
- 0,
+ SYSDB_CACHE_TYPE_NONE,
filter,
attrs,
&res);
@@ -1552,7 +1552,7 @@ static void test_sysdb_search_with_ts(void **state)
test_ctx->tctx->dom,
base_dn,
LDB_SCOPE_SUBTREE,
- SYSDB_SEARCH_WITH_TS_ONLY_TS_FILTER,
+ SYSDB_CACHE_TYPE_TIMESTAMP,
filter,
attrs,
&res);
@@ -1571,7 +1571,7 @@ static void test_sysdb_search_with_ts(void **state)
test_ctx->tctx->dom,
base_dn,
LDB_SCOPE_SUBTREE,
- SYSDB_SEARCH_WITH_TS_ONLY_SYSDB_FILTER,
+ SYSDB_CACHE_TYPE_PERSISTENT,
filter,
attrs,
&res);
@@ -1596,7 +1596,7 @@ static void test_sysdb_search_with_ts(void **state)
test_ctx->tctx->dom,
base_dn,
LDB_SCOPE_SUBTREE,
- 0,
+ SYSDB_CACHE_TYPE_NONE,
filter,
attrs,
&res);
--
2.21.1