summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile.am6
-rw-r--r--src/responder/common/responder.h2
-rw-r--r--src/responder/common/responder_common.c47
-rw-r--r--src/tests/cmocka/common_mock_resp.c6
-rw-r--r--src/tests/cmocka/test_responder_common.c34
-rw-r--r--src/tests/cwrap/Makefile.am1
6 files changed, 83 insertions, 13 deletions
diff --git a/Makefile.am b/Makefile.am
index d23913b0f..390e58938 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1799,6 +1799,7 @@ sss_idmap_tests_LDADD = \
responder_socket_access_tests_SOURCES = \
src/tests/responder_socket_access-tests.c \
+ src/responder/common/negcache.c \
src/responder/common/responder_common.c \
src/responder/common/responder_packet.c \
src/responder/common/responder_cmd.c
@@ -1974,13 +1975,14 @@ pam_srv_tests_LDADD = \
EXTRA_responder_get_domains_tests_DEPENDENCIES = \
$(ldblib_LTLIBRARIES)
responder_get_domains_tests_SOURCES = \
- src/responder/common/responder_get_domains.c \
+ $(SSSD_RESPONDER_OBJ) \
src/tests/cmocka/test_responder_common.c \
src/tests/cmocka/common_mock_resp.c
responder_get_domains_tests_CFLAGS = \
$(AM_CFLAGS)
responder_get_domains_tests_LDFLAGS = \
- -Wl,-wrap,sss_parse_name_for_domains
+ -Wl,-wrap,sss_parse_name_for_domains \
+ -Wl,-wrap,sss_ncache_reset_repopulate_permanent
responder_get_domains_tests_LDADD = \
$(CMOCKA_LIBS) \
$(SSSD_LIBS) \
diff --git a/src/responder/common/responder.h b/src/responder/common/responder.h
index 56ff2b3ec..d3f5c8d94 100644
--- a/src/responder/common/responder.h
+++ b/src/responder/common/responder.h
@@ -92,6 +92,8 @@ struct resp_ctx {
const char *sock_name;
const char *priv_sock_name;
+ struct sss_nc_ctx *ncache;
+
struct sbus_connection *mon_conn;
struct be_conn *be_conns;
diff --git a/src/responder/common/responder_common.c b/src/responder/common/responder_common.c
index 639356749..4f620f7d9 100644
--- a/src/responder/common/responder_common.c
+++ b/src/responder/common/responder_common.c
@@ -756,6 +756,47 @@ static int sss_responder_ctx_destructor(void *ptr)
return 0;
}
+static errno_t responder_init_ncache(TALLOC_CTX *mem_ctx,
+ struct confdb_ctx *cdb,
+ struct sss_nc_ctx **ncache)
+{
+ uint32_t neg_timeout;
+ int tmp_value;
+ int ret;
+
+ /* neg_timeout */
+ ret = confdb_get_int(cdb, CONFDB_NSS_CONF_ENTRY,
+ CONFDB_NSS_ENTRY_NEG_TIMEOUT,
+ 15, &tmp_value);
+ if (ret != EOK) {
+ DEBUG(SSSDBG_FATAL_FAILURE,
+ "Fatal failure of setup negative cache timeout.\n");
+ ret = ENOENT;
+ goto done;
+ }
+
+ if (tmp_value < 0) {
+ ret = EINVAL;
+ goto done;
+ }
+
+ neg_timeout = tmp_value;
+ ret = EOK;
+
+ /* negative cache init */
+ ret = sss_ncache_init(mem_ctx, neg_timeout, ncache);
+ if (ret != EOK) {
+ DEBUG(SSSDBG_FATAL_FAILURE,
+ "Fatal failure of initializing negative cache.\n");
+ goto done;
+ }
+
+ ret = EOK;
+
+done:
+ return ret;
+}
+
int sss_process_init(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
struct confdb_ctx *cdb,
@@ -913,6 +954,12 @@ int sss_process_init(TALLOC_CTX *mem_ctx,
goto fail;
}
+ ret = responder_init_ncache(rctx, rctx->cdb, &rctx->ncache);
+ if (ret != EOK) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "fatal error initializing negcache\n");
+ goto fail;
+ }
+
DEBUG(SSSDBG_TRACE_FUNC, "Responder Initialization complete\n");
*responder_ctx = rctx;
diff --git a/src/tests/cmocka/common_mock_resp.c b/src/tests/cmocka/common_mock_resp.c
index 767d4d7e1..8bcf18b80 100644
--- a/src/tests/cmocka/common_mock_resp.c
+++ b/src/tests/cmocka/common_mock_resp.c
@@ -42,6 +42,12 @@ mock_rctx(TALLOC_CTX *mem_ctx,
return NULL;
}
+ ret = sss_ncache_init(rctx, 10, &rctx->ncache);
+ if (ret != EOK) {
+ talloc_free(rctx);
+ return NULL;
+ }
+
rctx->ev = ev;
rctx->domains = domains;
rctx->pvt_ctx = pvt_ctx;
diff --git a/src/tests/cmocka/test_responder_common.c b/src/tests/cmocka/test_responder_common.c
index 48e0e91a3..b25f8a8ef 100644
--- a/src/tests/cmocka/test_responder_common.c
+++ b/src/tests/cmocka/test_responder_common.c
@@ -35,16 +35,28 @@
#define NAME "username"
+/* register_cli_protocol_version is required in test since it links with
+ * responder_common.c module
+ */
+struct cli_protocol_version *register_cli_protocol_version(void)
+{
+ static struct cli_protocol_version responder_test_cli_protocol_version[] = {
+ { 0, NULL, NULL }
+ };
+
+ return responder_test_cli_protocol_version;
+}
+
static void
mock_sss_dp_done(struct tevent_context *ev,
struct tevent_immediate *imm,
void *pvt);
errno_t
-sss_dp_issue_request(TALLOC_CTX *mem_ctx, struct resp_ctx *rctx,
- const char *strkey, struct sss_domain_info *dom,
- dbus_msg_constructor msg_create, void *pvt,
- struct tevent_req *nreq)
+__wrap_sss_dp_issue_request(TALLOC_CTX *mem_ctx, struct resp_ctx *rctx,
+ const char *strkey, struct sss_domain_info *dom,
+ dbus_msg_constructor msg_create, void *pvt,
+ struct tevent_req *nreq)
{
struct tevent_immediate *imm;
@@ -69,11 +81,11 @@ mock_sss_dp_done(struct tevent_context *ev,
}
errno_t
-sss_dp_req_recv(TALLOC_CTX *mem_ctx,
- struct tevent_req *sidereq,
- dbus_uint16_t *dp_err,
- dbus_uint32_t *dp_ret,
- char **err_msg)
+__wrap_sss_dp_req_recv(TALLOC_CTX *mem_ctx,
+ struct tevent_req *sidereq,
+ dbus_uint16_t *dp_err,
+ dbus_uint32_t *dp_ret,
+ char **err_msg)
{
return EOK;
}
@@ -271,8 +283,8 @@ struct sss_nc_ctx {
struct parse_inp_test_ctx *pctx;
};
-errno_t sss_ncache_reset_repopulate_permanent(struct resp_ctx *rctx,
- struct sss_nc_ctx *dummy_ncache_ptr)
+errno_t __wrap_sss_ncache_reset_repopulate_permanent(struct resp_ctx *rctx,
+ struct sss_nc_ctx *dummy_ncache_ptr)
{
test_ev_done(dummy_ncache_ptr->pctx->tctx, EOK);
return EOK;
diff --git a/src/tests/cwrap/Makefile.am b/src/tests/cwrap/Makefile.am
index ee9970667..a5afb8c02 100644
--- a/src/tests/cwrap/Makefile.am
+++ b/src/tests/cwrap/Makefile.am
@@ -106,6 +106,7 @@ usertools_tests_LDADD = \
responder_common_tests_SOURCES =\
test_responder_common.c \
+ ../../../src/responder/common/negcache.c \
../../../src/responder/common/responder_common.c \
../../../src/responder/common/responder_packet.c \
../../../src/responder/common/responder_cmd.c \