sssd/0028-cache_req-move-dp-request-to-plugin.patch
2017-02-28 16:54:33 +01:00

1427 lines
58 KiB
Diff

From 4df7aec645f87342f3a5146062abcb15f71f4fd9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pavel=20B=C5=99ezina?= <pbrezina@redhat.com>
Date: Tue, 17 Jan 2017 14:11:58 +0100
Subject: [PATCH 28/79] cache_req: move dp request to plugin
This will allow to use cache req even for object that do not use
account request such as hosts.
Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
---
src/responder/common/cache_req/cache_req_plugin.h | 39 ++++----
src/responder/common/cache_req/cache_req_private.h | 13 ++-
src/responder/common/cache_req/cache_req_search.c | 106 ++++-----------------
.../common/cache_req/plugins/cache_req_common.c | 40 ++++++++
.../cache_req/plugins/cache_req_enum_groups.c | 24 ++---
.../common/cache_req/plugins/cache_req_enum_svc.c | 24 ++---
.../cache_req/plugins/cache_req_enum_users.c | 24 ++---
.../cache_req/plugins/cache_req_group_by_filter.c | 25 +++--
.../cache_req/plugins/cache_req_group_by_id.c | 26 ++++-
.../cache_req/plugins/cache_req_group_by_name.c | 26 ++++-
.../plugins/cache_req_initgroups_by_name.c | 26 ++++-
.../plugins/cache_req_initgroups_by_upn.c | 25 +++--
.../cache_req/plugins/cache_req_netgroup_by_name.c | 25 +++--
.../cache_req/plugins/cache_req_object_by_id.c | 25 +++--
.../cache_req/plugins/cache_req_object_by_name.c | 25 +++--
.../cache_req/plugins/cache_req_object_by_sid.c | 24 ++---
.../cache_req/plugins/cache_req_svc_by_name.c | 25 +++--
.../cache_req/plugins/cache_req_svc_by_port.c | 25 +++--
.../cache_req/plugins/cache_req_user_by_cert.c | 24 ++---
.../cache_req/plugins/cache_req_user_by_filter.c | 25 +++--
.../cache_req/plugins/cache_req_user_by_id.c | 26 ++++-
.../cache_req/plugins/cache_req_user_by_name.c | 26 ++++-
.../cache_req/plugins/cache_req_user_by_upn.c | 25 +++--
src/tests/cmocka/common_mock_resp_dp.c | 31 +++++-
src/tests/cmocka/test_responder_cache_req.c | 28 +++---
25 files changed, 400 insertions(+), 332 deletions(-)
diff --git a/src/responder/common/cache_req/cache_req_plugin.h b/src/responder/common/cache_req/cache_req_plugin.h
index 59ef8bad1697e094f729c53f33bda4f1d825cdff..61e346dacfe0d180fb2aae354bc7867093276ab0 100644
--- a/src/responder/common/cache_req/cache_req_plugin.h
+++ b/src/responder/common/cache_req/cache_req_plugin.h
@@ -117,18 +117,29 @@ typedef errno_t
struct ldb_result **_result);
/**
- * Return parameters for Data Provider request.
+ * Send Data Provider request.
*
- * @return EOK If everything went fine.
- * @return Other errno code in case of an error.
+ * @return Tevent request on success.
+ * @return NULL on error.
*/
-typedef errno_t
-(*cache_req_dpreq_params_fn)(TALLOC_CTX *mem_ctx,
- struct cache_req *cr,
- struct ldb_result *result,
- const char **_string,
- uint32_t *_id,
- const char **_flag);
+typedef struct tevent_req *
+(*cache_req_dp_send_fn)(TALLOC_CTX *mem_ctx,
+ struct cache_req *cr,
+ struct cache_req_data *data,
+ struct sss_domain_info *domain,
+ struct ldb_result *result);
+
+/**
+ * Process result of Data Provider request.
+ *
+ * Do not free subreq! It will be freed in the caller.
+ *
+ * @return True if data provider request succeeded.
+ * @return False if there was an error.
+ */
+typedef bool
+(*cache_req_dp_recv_fn)(struct tevent_req *subreq,
+ struct cache_req *cr);
struct cache_req_plugin {
/**
@@ -137,11 +148,6 @@ struct cache_req_plugin {
const char *name;
/**
- * Data provider request type.
- */
- enum sss_dp_acct_type dp_type;
-
- /**
* Expiration timestamp attribute name.
*/
const char *attr_expiration;
@@ -202,7 +208,8 @@ struct cache_req_plugin {
cache_req_ncache_check_fn ncache_check_fn;
cache_req_ncache_add_fn ncache_add_fn;
cache_req_lookup_fn lookup_fn;
- cache_req_dpreq_params_fn dpreq_params_fn;
+ cache_req_dp_send_fn dp_send_fn;
+ cache_req_dp_recv_fn dp_recv_fn;
};
extern const struct cache_req_plugin cache_req_user_by_name;
diff --git a/src/responder/common/cache_req/cache_req_private.h b/src/responder/common/cache_req/cache_req_private.h
index e79fe869b0d62fe949701911c8fe3a2e062ccd31..b544b739e92552189f806f4675ff28689b91ce66 100644
--- a/src/responder/common/cache_req/cache_req_private.h
+++ b/src/responder/common/cache_req/cache_req_private.h
@@ -38,11 +38,6 @@ struct cache_req {
struct sss_nc_ctx *ncache;
int midpoint;
- /* Data Provider request type resolved from @type.
- * FIXME: This is currently needed for data provider calls. We should
- * refactor responder_dp.c to get rid of this member. */
- enum sss_dp_acct_type dp_type;
-
/* Domain related informations. */
struct sss_domain_info *domain;
@@ -116,6 +111,10 @@ cache_req_create_result(TALLOC_CTX *mem_ctx,
const char *lookup_name,
const char *well_known_domain);
+struct ldb_result *
+cache_req_create_ldb_result_from_msg(TALLOC_CTX *mem_ctx,
+ struct ldb_message *ldb_msg);
+
struct cache_req_result *
cache_req_create_result_from_msg(TALLOC_CTX *mem_ctx,
struct sss_domain_info *domain,
@@ -132,4 +131,8 @@ cache_req_well_known_sid_result(TALLOC_CTX *mem_ctx,
const char *sid,
const char *name);
+bool
+cache_req_common_dp_recv(struct tevent_req *subreq,
+ struct cache_req *cr);
+
#endif /* _CACHE_REQ_PRIVATE_H_ */
diff --git a/src/responder/common/cache_req/cache_req_search.c b/src/responder/common/cache_req/cache_req_search.c
index aabff389a72aaee4638bc9d34a5ad35de58b4923..eed82cf262fad50ec1fe1649f48be664d750b590 100644
--- a/src/responder/common/cache_req/cache_req_search.c
+++ b/src/responder/common/cache_req/cache_req_search.c
@@ -138,70 +138,6 @@ done:
return ret;
}
-static errno_t cache_req_dpreq_params(TALLOC_CTX *mem_ctx,
- struct cache_req *cr,
- struct ldb_result *result,
- const char **_string,
- uint32_t *_id,
- const char **_flag)
-{
- errno_t ret;
-
- if (cr->plugin->dpreq_params_fn == NULL) {
- CACHE_REQ_DEBUG(SSSDBG_CRIT_FAILURE, cr,
- "Bug: No dpreq params function specified\n");
- return ERR_INTERNAL;
- }
-
-
- CACHE_REQ_DEBUG(SSSDBG_TRACE_INTERNAL, cr,
- "Creating DP request parameters\n");
-
- ret = cr->plugin->dpreq_params_fn(mem_ctx, cr, result, _string, _id, _flag);
- if (ret != EOK) {
- CACHE_REQ_DEBUG(SSSDBG_CRIT_FAILURE, cr,
- "Unable to create DP request parameters [%d]: %s\n",
- ret, sss_strerror(ret));
- return ret;
- }
-
- return EOK;
-}
-
-static bool cache_req_search_process_dp(TALLOC_CTX *mem_ctx,
- struct tevent_req *subreq,
- struct cache_req *cr)
-{
- char *err_msg;
- dbus_uint16_t err_maj;
- dbus_uint32_t err_min;
- errno_t ret;
-
- ret = sss_dp_get_account_recv(mem_ctx, subreq, &err_maj, &err_min, &err_msg);
- talloc_zfree(subreq);
- if (ret != EOK) {
- CACHE_REQ_DEBUG(SSSDBG_OP_FAILURE, cr,
- "Could not get account info [%d]: %s\n",
- ret, sss_strerror(ret));
- CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, cr,
- "Due to an error we will return cached data\n");
-
- return false;
- }
-
- if (err_maj) {
- CACHE_REQ_DEBUG(SSSDBG_OP_FAILURE, cr,
- "Data Provider Error: %u, %u, %s\n",
- (unsigned int)err_maj, (unsigned int)err_min, err_msg);
- CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, cr,
- "Due to an error we will return cached data\n");
-
- return false;
- }
-
- return true;
-}
-
static enum cache_object_status
cache_req_expiration_status(struct cache_req *cr,
struct ldb_result *result)
@@ -316,19 +252,10 @@ static errno_t cache_req_search_dp(struct tevent_req *req,
{
struct cache_req_search_state *state;
struct tevent_req *subreq;
- const char *extra_flag;
- const char *search_str;
- uint32_t search_id;
errno_t ret;
state = tevent_req_data(req, struct cache_req_search_state);
- ret = cache_req_dpreq_params(state, state->cr, state->result,
- &search_str, &search_id, &extra_flag);
- if (ret != EOK) {
- return ret;
- }
-
switch (status) {
case CACHE_OBJECT_MIDPOINT:
/* Out of band update. The calling function will return the cached
@@ -339,10 +266,10 @@ static errno_t cache_req_search_dp(struct tevent_req *req,
"Performing midpoint cache update of [%s]\n",
state->cr->debugobj);
- subreq = sss_dp_get_account_send(state->cr->rctx, state->cr->rctx,
- state->cr->domain, true,
- state->cr->dp_type,
- search_str, search_id, extra_flag);
+ subreq = state->cr->plugin->dp_send_fn(state->cr, state->cr,
+ state->cr->data,
+ state->cr->domain,
+ state->result);
if (subreq == NULL) {
DEBUG(SSSDBG_CRIT_FAILURE, "Out of memory sending out-of-band "
"data provider request\n");
@@ -351,31 +278,37 @@ static errno_t cache_req_search_dp(struct tevent_req *req,
tevent_req_set_callback(subreq, cache_req_search_oob_done, req);
}
- return EOK;
+ ret = EOK;
+ break;
case CACHE_OBJECT_EXPIRED:
case CACHE_OBJECT_MISSING:
CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, state->cr,
"Looking up [%s] in data provider\n",
state->cr->debugobj);
- subreq = sss_dp_get_account_send(state, state->cr->rctx,
- state->cr->domain, true,
- state->cr->dp_type,
- search_str, search_id, extra_flag);
+ subreq = state->cr->plugin->dp_send_fn(state->cr, state->cr,
+ state->cr->data,
+ state->cr->domain,
+ state->result);
if (subreq == NULL) {
DEBUG(SSSDBG_CRIT_FAILURE,
"Out of memory sending data provider request\n");
- return ENOMEM;
+ ret = ENOMEM;
+ break;
}
tevent_req_set_callback(subreq, cache_req_search_done, req);
- return EAGAIN;
+ ret = EAGAIN;
+ break;
default:
/* error */
CACHE_REQ_DEBUG(SSSDBG_CRIT_FAILURE, state->cr,
"Unexpected status [%d]\n", status);
- return ret;
+ ret = ERR_INTERNAL;
+ break;
}
+
+ return ret;
}
static void cache_req_search_oob_done(struct tevent_req *subreq)
@@ -395,7 +328,8 @@ static void cache_req_search_done(struct tevent_req *subreq)
req = tevent_req_callback_data(subreq, struct tevent_req);
state = tevent_req_data(req, struct cache_req_search_state);
- state->dp_success = cache_req_search_process_dp(state, subreq, state->cr);
+ state->dp_success = state->cr->plugin->dp_recv_fn(subreq, state->cr);
+ talloc_zfree(subreq);
/* Get result from cache again. */
ret = cache_req_search_cache(state, state->cr, &state->result);
diff --git a/src/responder/common/cache_req/plugins/cache_req_common.c b/src/responder/common/cache_req/plugins/cache_req_common.c
index 4c0f358faeba1641905fe2a5487b0e49389d2331..b80f310feeebbdbc824db441ff5313632585d3fb 100644
--- a/src/responder/common/cache_req/plugins/cache_req_common.c
+++ b/src/responder/common/cache_req/plugins/cache_req_common.c
@@ -107,3 +107,43 @@ cache_req_well_known_sid_result(TALLOC_CTX *mem_ctx,
return result;
}
+
+bool
+cache_req_common_dp_recv(struct tevent_req *subreq,
+ struct cache_req *cr)
+{
+ char *err_msg;
+ dbus_uint16_t err_maj;
+ dbus_uint32_t err_min;
+ errno_t ret;
+ bool bret;
+
+ ret = sss_dp_req_recv(NULL, subreq, &err_maj, &err_min, &err_msg);
+ if (ret != EOK) {
+ CACHE_REQ_DEBUG(SSSDBG_OP_FAILURE, cr,
+ "Could not get account info [%d]: %s\n",
+ ret, sss_strerror(ret));
+ CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, cr,
+ "Due to an error we will return cached data\n");
+
+ bret = false;
+ goto done;
+ }
+
+ if (err_maj) {
+ CACHE_REQ_DEBUG(SSSDBG_OP_FAILURE, cr,
+ "Data Provider Error: %u, %u, %s\n",
+ (unsigned int)err_maj, (unsigned int)err_min, err_msg);
+ CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, cr,
+ "Due to an error we will return cached data\n");
+
+ bret = false;
+ goto done;
+ }
+
+ bret = true;
+
+done:
+ talloc_free(err_msg);
+ return bret;
+}
diff --git a/src/responder/common/cache_req/plugins/cache_req_enum_groups.c b/src/responder/common/cache_req/plugins/cache_req_enum_groups.c
index 2056dc2ccdadef98772402bde45aef8e043a0e76..dbb40c98339cc9295e3678e05340396aff51ac78 100644
--- a/src/responder/common/cache_req/plugins/cache_req_enum_groups.c
+++ b/src/responder/common/cache_req/plugins/cache_req_enum_groups.c
@@ -44,24 +44,19 @@ cache_req_enum_groups_lookup(TALLOC_CTX *mem_ctx,
return sysdb_enumgrent_with_views(mem_ctx, domain, _result);
}
-static errno_t
-cache_req_enum_groups_dpreq_params(TALLOC_CTX *mem_ctx,
- struct cache_req *cr,
- struct ldb_result *result,
- const char **_string,
- uint32_t *_id,
- const char **_flag)
+static struct tevent_req *
+cache_req_enum_groups_dp_send(TALLOC_CTX *mem_ctx,
+ struct cache_req *cr,
+ struct cache_req_data *data,
+ struct sss_domain_info *domain,
+ struct ldb_result *result)
{
- *_id = 0;
- *_string = NULL;
- *_flag = NULL;
-
- return EOK;
+ return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+ SSS_DP_GROUP, NULL, 0, NULL);
}
const struct cache_req_plugin cache_req_enum_groups = {
.name = "Enumerate groups",
- .dp_type = SSS_DP_GROUP,
.attr_expiration = SYSDB_CACHE_EXPIRE,
.parse_name = false,
.ignore_default_domain = false,
@@ -81,7 +76,8 @@ const struct cache_req_plugin cache_req_enum_groups = {
.ncache_check_fn = NULL,
.ncache_add_fn = NULL,
.lookup_fn = cache_req_enum_groups_lookup,
- .dpreq_params_fn = cache_req_enum_groups_dpreq_params
+ .dp_send_fn = cache_req_enum_groups_dp_send,
+ .dp_recv_fn = cache_req_common_dp_recv
};
struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_enum_svc.c b/src/responder/common/cache_req/plugins/cache_req_enum_svc.c
index e850212977bb26dc13b900f6e5908865fffa59b0..2c4917cde750c9063d898c16d3a58ca8c179bc70 100644
--- a/src/responder/common/cache_req/plugins/cache_req_enum_svc.c
+++ b/src/responder/common/cache_req/plugins/cache_req_enum_svc.c
@@ -45,24 +45,19 @@ cache_req_enum_svc_lookup(TALLOC_CTX *mem_ctx,
return sysdb_enumservent(mem_ctx, domain, _result);
}
-static errno_t
-cache_req_enum_svc_dpreq_params(TALLOC_CTX *mem_ctx,
- struct cache_req *cr,
- struct ldb_result *result,
- const char **_string,
- uint32_t *_id,
- const char **_flag)
+static struct tevent_req *
+cache_req_enum_svc_dp_send(TALLOC_CTX *mem_ctx,
+ struct cache_req *cr,
+ struct cache_req_data *data,
+ struct sss_domain_info *domain,
+ struct ldb_result *result)
{
- *_id = 0;
- *_string = NULL;
- *_flag = NULL;
-
- return EOK;
+ return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+ SSS_DP_SERVICES, NULL, 0, NULL);
}
const struct cache_req_plugin cache_req_enum_svc = {
.name = "Enumerate services",
- .dp_type = SSS_DP_SERVICES,
.attr_expiration = SYSDB_CACHE_EXPIRE,
.parse_name = false,
.ignore_default_domain = false,
@@ -82,7 +77,8 @@ const struct cache_req_plugin cache_req_enum_svc = {
.ncache_check_fn = NULL,
.ncache_add_fn = NULL,
.lookup_fn = cache_req_enum_svc_lookup,
- .dpreq_params_fn = cache_req_enum_svc_dpreq_params
+ .dp_send_fn = cache_req_enum_svc_dp_send,
+ .dp_recv_fn = cache_req_common_dp_recv
};
struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_enum_users.c b/src/responder/common/cache_req/plugins/cache_req_enum_users.c
index 2adeddb6b4bea044371f168f5d39aecc1f06cc45..3b1a85841e3ed853cd329dfa9d762cb7a05cbd43 100644
--- a/src/responder/common/cache_req/plugins/cache_req_enum_users.c
+++ b/src/responder/common/cache_req/plugins/cache_req_enum_users.c
@@ -44,24 +44,19 @@ cache_req_enum_users_lookup(TALLOC_CTX *mem_ctx,
return sysdb_enumpwent_with_views(mem_ctx, domain, _result);
}
-static errno_t
-cache_req_enum_users_dpreq_params(TALLOC_CTX *mem_ctx,
- struct cache_req *cr,
- struct ldb_result *result,
- const char **_string,
- uint32_t *_id,
- const char **_flag)
+static struct tevent_req *
+cache_req_enum_users_dp_send(TALLOC_CTX *mem_ctx,
+ struct cache_req *cr,
+ struct cache_req_data *data,
+ struct sss_domain_info *domain,
+ struct ldb_result *result)
{
- *_id = 0;
- *_string = NULL;
- *_flag = NULL;
-
- return EOK;
+ return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+ SSS_DP_USER, NULL, 0, NULL);
}
const struct cache_req_plugin cache_req_enum_users = {
.name = "Enumerate users",
- .dp_type = SSS_DP_USER,
.attr_expiration = SYSDB_CACHE_EXPIRE,
.parse_name = false,
.ignore_default_domain = false,
@@ -81,7 +76,8 @@ const struct cache_req_plugin cache_req_enum_users = {
.ncache_check_fn = NULL,
.ncache_add_fn = NULL,
.lookup_fn = cache_req_enum_users_lookup,
- .dpreq_params_fn = cache_req_enum_users_dpreq_params
+ .dp_send_fn = cache_req_enum_users_dp_send,
+ .dp_recv_fn = cache_req_common_dp_recv
};
struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_group_by_filter.c b/src/responder/common/cache_req/plugins/cache_req_group_by_filter.c
index bc42eb7db0830ba31649c2cbb9525dfd1f7b1fae..88e1137a3976308aaf404b684c6d88cc43708bca 100644
--- a/src/responder/common/cache_req/plugins/cache_req_group_by_filter.c
+++ b/src/responder/common/cache_req/plugins/cache_req_group_by_filter.c
@@ -99,24 +99,20 @@ cache_req_group_by_filter_lookup(TALLOC_CTX *mem_ctx,
return ret;
}
-static errno_t
-cache_req_group_by_filter_dpreq_params(TALLOC_CTX *mem_ctx,
- struct cache_req *cr,
- struct ldb_result *result,
- const char **_string,
- uint32_t *_id,
- const char **_flag)
+static struct tevent_req *
+cache_req_group_by_filter_dp_send(TALLOC_CTX *mem_ctx,
+ struct cache_req *cr,
+ struct cache_req_data *data,
+ struct sss_domain_info *domain,
+ struct ldb_result *result)
{
- *_id = cr->data->id;
- *_string = cr->data->name.lookup;
- *_flag = NULL;
-
- return EOK;
+ return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+ SSS_DP_WILDCARD_GROUP,
+ cr->data->name.lookup, cr->data->id, NULL);
}
const struct cache_req_plugin cache_req_group_by_filter = {
.name = "Group by filter",
- .dp_type = SSS_DP_WILDCARD_GROUP,
.attr_expiration = SYSDB_CACHE_EXPIRE,
.parse_name = true,
.ignore_default_domain = false,
@@ -136,7 +132,8 @@ const struct cache_req_plugin cache_req_group_by_filter = {
.ncache_check_fn = NULL,
.ncache_add_fn = NULL,
.lookup_fn = cache_req_group_by_filter_lookup,
- .dpreq_params_fn = cache_req_group_by_filter_dpreq_params
+ .dp_send_fn = cache_req_group_by_filter_dp_send,
+ .dp_recv_fn = cache_req_common_dp_recv
};
struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_group_by_id.c b/src/responder/common/cache_req/plugins/cache_req_group_by_id.c
index e48588087eafde68a4a85c546cf08e90eb6c7605..e98f76f8cd20742b81ae247df61db159d2584a17 100644
--- a/src/responder/common/cache_req/plugins/cache_req_group_by_id.c
+++ b/src/responder/common/cache_req/plugins/cache_req_group_by_id.c
@@ -102,9 +102,30 @@ cache_req_group_by_id_dpreq_params(TALLOC_CTX *mem_ctx,
return EOK;
}
+static struct tevent_req *
+cache_req_group_by_id_dp_send(TALLOC_CTX *mem_ctx,
+ struct cache_req *cr,
+ struct cache_req_data *data,
+ struct sss_domain_info *domain,
+ struct ldb_result *result)
+{
+ const char *string;
+ const char *flag;
+ uint32_t id;
+ errno_t ret;
+
+ ret = cache_req_group_by_id_dpreq_params(mem_ctx, cr, result,
+ &string, &id, &flag);
+ if (ret != EOK) {
+ return NULL;
+ }
+
+ return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+ SSS_DP_GROUP, string, id, flag);
+}
+
const struct cache_req_plugin cache_req_group_by_id = {
.name = "Group by ID",
- .dp_type = SSS_DP_GROUP,
.attr_expiration = SYSDB_CACHE_EXPIRE,
.parse_name = false,
.ignore_default_domain = false,
@@ -124,7 +145,8 @@ const struct cache_req_plugin cache_req_group_by_id = {
.ncache_check_fn = cache_req_group_by_id_ncache_check,
.ncache_add_fn = NULL,
.lookup_fn = cache_req_group_by_id_lookup,
- .dpreq_params_fn = cache_req_group_by_id_dpreq_params
+ .dp_send_fn = cache_req_group_by_id_dp_send,
+ .dp_recv_fn = cache_req_common_dp_recv
};
struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_group_by_name.c b/src/responder/common/cache_req/plugins/cache_req_group_by_name.c
index 962b38866a1408bbdff556e20df5a69b0d4bbba0..be1eb9bd8552156d777e934b0be397b0e66df7cc 100644
--- a/src/responder/common/cache_req/plugins/cache_req_group_by_name.c
+++ b/src/responder/common/cache_req/plugins/cache_req_group_by_name.c
@@ -152,9 +152,30 @@ cache_req_group_by_name_dpreq_params(TALLOC_CTX *mem_ctx,
return EOK;
}
+static struct tevent_req *
+cache_req_group_by_name_dp_send(TALLOC_CTX *mem_ctx,
+ struct cache_req *cr,
+ struct cache_req_data *data,
+ struct sss_domain_info *domain,
+ struct ldb_result *result)
+{
+ const char *string;
+ const char *flag;
+ uint32_t id;
+ errno_t ret;
+
+ ret = cache_req_group_by_name_dpreq_params(mem_ctx, cr, result,
+ &string, &id, &flag);
+ if (ret != EOK) {
+ return NULL;
+ }
+
+ return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+ SSS_DP_GROUP, string, id, flag);
+}
+
const struct cache_req_plugin cache_req_group_by_name = {
.name = "Group by name",
- .dp_type = SSS_DP_GROUP,
.attr_expiration = SYSDB_CACHE_EXPIRE,
.parse_name = true,
.ignore_default_domain = false,
@@ -174,7 +195,8 @@ const struct cache_req_plugin cache_req_group_by_name = {
.ncache_check_fn = cache_req_group_by_name_ncache_check,
.ncache_add_fn = cache_req_group_by_name_ncache_add,
.lookup_fn = cache_req_group_by_name_lookup,
- .dpreq_params_fn = cache_req_group_by_name_dpreq_params
+ .dp_send_fn = cache_req_group_by_name_dp_send,
+ .dp_recv_fn = cache_req_common_dp_recv
};
struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_initgroups_by_name.c b/src/responder/common/cache_req/plugins/cache_req_initgroups_by_name.c
index d2f03cbea0780e4e0b88d56fcfbcf8903bcb3c85..10fb67cbf6e78cfae33bc7208585cb80ea6a9bc4 100644
--- a/src/responder/common/cache_req/plugins/cache_req_initgroups_by_name.c
+++ b/src/responder/common/cache_req/plugins/cache_req_initgroups_by_name.c
@@ -167,9 +167,30 @@ cache_req_initgroups_by_name_dpreq_params(TALLOC_CTX *mem_ctx,
return EOK;
}
+static struct tevent_req *
+cache_req_initgroups_by_name_dp_send(TALLOC_CTX *mem_ctx,
+ struct cache_req *cr,
+ struct cache_req_data *data,
+ struct sss_domain_info *domain,
+ struct ldb_result *result)
+{
+ const char *string;
+ const char *flag;
+ uint32_t id;
+ errno_t ret;
+
+ ret = cache_req_initgroups_by_name_dpreq_params(mem_ctx, cr, result,
+ &string, &id, &flag);
+ if (ret != EOK) {
+ return NULL;
+ }
+
+ return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+ SSS_DP_INITGROUPS, string, id, flag);
+}
+
const struct cache_req_plugin cache_req_initgroups_by_name = {
.name = "Initgroups by name",
- .dp_type = SSS_DP_INITGROUPS,
.attr_expiration = SYSDB_INITGR_EXPIRE,
.parse_name = true,
.ignore_default_domain = false,
@@ -189,7 +210,8 @@ const struct cache_req_plugin cache_req_initgroups_by_name = {
.ncache_check_fn = cache_req_initgroups_by_name_ncache_check,
.ncache_add_fn = cache_req_initgroups_by_name_ncache_add,
.lookup_fn = cache_req_initgroups_by_name_lookup,
- .dpreq_params_fn = cache_req_initgroups_by_name_dpreq_params
+ .dp_send_fn = cache_req_initgroups_by_name_dp_send,
+ .dp_recv_fn = cache_req_common_dp_recv
};
struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_initgroups_by_upn.c b/src/responder/common/cache_req/plugins/cache_req_initgroups_by_upn.c
index 9b2d07d4afa98cbfca4a62f944b744f01897a0ee..266ec7b8a28d496d9603bd9b6cdfef268ffa8559 100644
--- a/src/responder/common/cache_req/plugins/cache_req_initgroups_by_upn.c
+++ b/src/responder/common/cache_req/plugins/cache_req_initgroups_by_upn.c
@@ -88,24 +88,20 @@ cache_req_initgroups_by_upn_lookup(TALLOC_CTX *mem_ctx,
_result);
}
-static errno_t
-cache_req_initgroups_by_upn_dpreq_params(TALLOC_CTX *mem_ctx,
- struct cache_req *cr,
- struct ldb_result *result,
- const char **_string,
- uint32_t *_id,
- const char **_flag)
+static struct tevent_req *
+cache_req_initgroups_by_upn_dp_send(TALLOC_CTX *mem_ctx,
+ struct cache_req *cr,
+ struct cache_req_data *data,
+ struct sss_domain_info *domain,
+ struct ldb_result *result)
{
- *_id = 0;
- *_string = cr->data->name.lookup;
- *_flag = EXTRA_NAME_IS_UPN;
-
- return EOK;
+ return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+ SSS_DP_INITGROUPS, cr->data->name.lookup,
+ 0, EXTRA_NAME_IS_UPN);
}
const struct cache_req_plugin cache_req_initgroups_by_upn = {
.name = "Initgroups by UPN",
- .dp_type = SSS_DP_INITGROUPS,
.attr_expiration = SYSDB_INITGR_EXPIRE,
.parse_name = false,
.ignore_default_domain = false,
@@ -125,5 +121,6 @@ const struct cache_req_plugin cache_req_initgroups_by_upn = {
.ncache_check_fn = cache_req_initgroups_by_upn_ncache_check,
.ncache_add_fn = cache_req_initgroups_by_upn_ncache_add,
.lookup_fn = cache_req_initgroups_by_upn_lookup,
- .dpreq_params_fn = cache_req_initgroups_by_upn_dpreq_params
+ .dp_send_fn = cache_req_initgroups_by_upn_dp_send,
+ .dp_recv_fn = cache_req_common_dp_recv
};
diff --git a/src/responder/common/cache_req/plugins/cache_req_netgroup_by_name.c b/src/responder/common/cache_req/plugins/cache_req_netgroup_by_name.c
index 5b19edeb2952b83406ff20d001dd7d24449f69c9..bc6fc9a8f476f97cc4bc5004bc19ba35258a2b6d 100644
--- a/src/responder/common/cache_req/plugins/cache_req_netgroup_by_name.c
+++ b/src/responder/common/cache_req/plugins/cache_req_netgroup_by_name.c
@@ -96,24 +96,20 @@ cache_req_netgroup_by_name_lookup(TALLOC_CTX *mem_ctx,
return sysdb_getnetgr(mem_ctx, domain, data->name.lookup, _result);
}
-static errno_t
-cache_req_netgroup_by_name_dpreq_params(TALLOC_CTX *mem_ctx,
- struct cache_req *cr,
- struct ldb_result *result,
- const char **_string,
- uint32_t *_id,
- const char **_flag)
+static struct tevent_req *
+cache_req_netgroup_by_name_dp_send(TALLOC_CTX *mem_ctx,
+ struct cache_req *cr,
+ struct cache_req_data *data,
+ struct sss_domain_info *domain,
+ struct ldb_result *result)
{
- *_id = 0;
- *_string = cr->data->name.lookup;
- *_flag = NULL;
-
- return EOK;
+ return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+ SSS_DP_NETGR, cr->data->name.lookup,
+ 0, NULL);
}
const struct cache_req_plugin cache_req_netgroup_by_name = {
.name = "Netgroup by name",
- .dp_type = SSS_DP_NETGR,
.attr_expiration = SYSDB_CACHE_EXPIRE,
.parse_name = true,
.ignore_default_domain = false,
@@ -133,7 +129,8 @@ const struct cache_req_plugin cache_req_netgroup_by_name = {
.ncache_check_fn = cache_req_netgroup_by_name_ncache_check,
.ncache_add_fn = cache_req_netgroup_by_name_ncache_add,
.lookup_fn = cache_req_netgroup_by_name_lookup,
- .dpreq_params_fn = cache_req_netgroup_by_name_dpreq_params
+ .dp_send_fn = cache_req_netgroup_by_name_dp_send,
+ .dp_recv_fn = cache_req_common_dp_recv
};
struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_object_by_id.c b/src/responder/common/cache_req/plugins/cache_req_object_by_id.c
index 3f47807616054c644e27e4c240ad7c4b752a563e..046e313c83d1d4c75237b047be779201b8a5d3c0 100644
--- a/src/responder/common/cache_req/plugins/cache_req_object_by_id.c
+++ b/src/responder/common/cache_req/plugins/cache_req_object_by_id.c
@@ -79,24 +79,20 @@ cache_req_object_by_id_lookup(TALLOC_CTX *mem_ctx,
data->attrs, _result);
}
-static errno_t
-cache_req_object_by_id_dpreq_params(TALLOC_CTX *mem_ctx,
- struct cache_req *cr,
- struct ldb_result *result,
- const char **_string,
- uint32_t *_id,
- const char **_flag)
+static struct tevent_req *
+cache_req_object_by_id_dp_send(TALLOC_CTX *mem_ctx,
+ struct cache_req *cr,
+ struct cache_req_data *data,
+ struct sss_domain_info *domain,
+ struct ldb_result *result)
{
- *_id = cr->data->id;
- *_string = NULL;
- *_flag = NULL;
-
- return EOK;
+ return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+ SSS_DP_USER_AND_GROUP, NULL,
+ cr->data->id, NULL);
}
const struct cache_req_plugin cache_req_object_by_id = {
.name = "Object by ID",
- .dp_type = SSS_DP_USER_AND_GROUP,
.attr_expiration = SYSDB_CACHE_EXPIRE,
.parse_name = false,
.ignore_default_domain = false,
@@ -116,7 +112,8 @@ const struct cache_req_plugin cache_req_object_by_id = {
.ncache_check_fn = cache_req_object_by_id_ncache_check,
.ncache_add_fn = NULL,
.lookup_fn = cache_req_object_by_id_lookup,
- .dpreq_params_fn = cache_req_object_by_id_dpreq_params
+ .dp_send_fn = cache_req_object_by_id_dp_send,
+ .dp_recv_fn = cache_req_common_dp_recv
};
struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_object_by_name.c b/src/responder/common/cache_req/plugins/cache_req_object_by_name.c
index 6829d0ec97c147aafda46b6eace25b97a28e626a..2b2caeea172b23b1b1b226def5d926e26c5c0090 100644
--- a/src/responder/common/cache_req/plugins/cache_req_object_by_name.c
+++ b/src/responder/common/cache_req/plugins/cache_req_object_by_name.c
@@ -172,24 +172,20 @@ cache_req_object_by_name_lookup(TALLOC_CTX *mem_ctx,
data->attrs, _result);
}
-static errno_t
-cache_req_object_by_name_dpreq_params(TALLOC_CTX *mem_ctx,
- struct cache_req *cr,
- struct ldb_result *result,
- const char **_string,
- uint32_t *_id,
- const char **_flag)
+static struct tevent_req *
+cache_req_object_by_name_dp_send(TALLOC_CTX *mem_ctx,
+ struct cache_req *cr,
+ struct cache_req_data *data,
+ struct sss_domain_info *domain,
+ struct ldb_result *result)
{
- *_id = 0;
- *_string = cr->data->name.lookup;
- *_flag = NULL;
-
- return EOK;
+ return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+ SSS_DP_USER_AND_GROUP,
+ cr->data->name.lookup, 0, NULL);
}
const struct cache_req_plugin cache_req_object_by_name = {
.name = "Object by name",
- .dp_type = SSS_DP_USER_AND_GROUP,
.attr_expiration = SYSDB_CACHE_EXPIRE,
.parse_name = true,
.ignore_default_domain = false,
@@ -209,7 +205,8 @@ const struct cache_req_plugin cache_req_object_by_name = {
.ncache_check_fn = cache_req_object_by_name_ncache_check,
.ncache_add_fn = cache_req_object_by_name_ncache_add,
.lookup_fn = cache_req_object_by_name_lookup,
- .dpreq_params_fn = cache_req_object_by_name_dpreq_params
+ .dp_send_fn = cache_req_object_by_name_dp_send,
+ .dp_recv_fn = cache_req_common_dp_recv
};
struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_object_by_sid.c b/src/responder/common/cache_req/plugins/cache_req_object_by_sid.c
index 6a6eb8e72c52c069935ca4e612e60f602c7b91bd..ab577663111cfd424e7f46308b2621af7f1ca264 100644
--- a/src/responder/common/cache_req/plugins/cache_req_object_by_sid.c
+++ b/src/responder/common/cache_req/plugins/cache_req_object_by_sid.c
@@ -89,24 +89,19 @@ cache_req_object_by_sid_lookup(TALLOC_CTX *mem_ctx,
_result);
}
-static errno_t
-cache_req_object_by_sid_dpreq_params(TALLOC_CTX *mem_ctx,
- struct cache_req *cr,
- struct ldb_result *result,
- const char **_string,
- uint32_t *_id,
- const char **_flag)
+static struct tevent_req *
+cache_req_object_by_sid_dp_send(TALLOC_CTX *mem_ctx,
+ struct cache_req *cr,
+ struct cache_req_data *data,
+ struct sss_domain_info *domain,
+ struct ldb_result *result)
{
- *_id = 0;
- *_string = cr->data->sid;
- *_flag = NULL;
-
- return EOK;
+ return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+ SSS_DP_SECID, cr->data->sid, 0, NULL);
}
const struct cache_req_plugin cache_req_object_by_sid = {
.name = "Object by SID",
- .dp_type = SSS_DP_SECID,
.attr_expiration = SYSDB_CACHE_EXPIRE,
.parse_name = false,
.ignore_default_domain = false,
@@ -126,7 +121,8 @@ const struct cache_req_plugin cache_req_object_by_sid = {
.ncache_check_fn = cache_req_object_by_sid_ncache_check,
.ncache_add_fn = NULL,
.lookup_fn = cache_req_object_by_sid_lookup,
- .dpreq_params_fn = cache_req_object_by_sid_dpreq_params
+ .dp_send_fn = cache_req_object_by_sid_dp_send,
+ .dp_recv_fn = cache_req_common_dp_recv
};
struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_svc_by_name.c b/src/responder/common/cache_req/plugins/cache_req_svc_by_name.c
index 9562354ed3a453e3aec7264bb32dbd5273fb0927..cbb186df04c7ca7c02dceb98bd5700c984285a4d 100644
--- a/src/responder/common/cache_req/plugins/cache_req_svc_by_name.c
+++ b/src/responder/common/cache_req/plugins/cache_req_svc_by_name.c
@@ -120,24 +120,20 @@ cache_req_svc_by_name_lookup(TALLOC_CTX *mem_ctx,
data->svc.protocol.lookup, _result);
}
-static errno_t
-cache_req_svc_by_name_dpreq_params(TALLOC_CTX *mem_ctx,
- struct cache_req *cr,
- struct ldb_result *result,
- const char **_string,
- uint32_t *_id,
- const char **_flag)
+static struct tevent_req *
+cache_req_svc_by_name_dp_send(TALLOC_CTX *mem_ctx,
+ struct cache_req *cr,
+ struct cache_req_data *data,
+ struct sss_domain_info *domain,
+ struct ldb_result *result)
{
- *_id = 0;
- *_string = cr->data->svc.name->lookup;
- *_flag = cr->data->svc.protocol.lookup;
-
- return EOK;
+ return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+ SSS_DP_SERVICES, cr->data->svc.name->lookup,
+ 0, cr->data->svc.protocol.lookup);
}
const struct cache_req_plugin cache_req_svc_by_name = {
.name = "Service by name",
- .dp_type = SSS_DP_SERVICES,
.attr_expiration = SYSDB_CACHE_EXPIRE,
.parse_name = true,
.ignore_default_domain = false,
@@ -157,7 +153,8 @@ const struct cache_req_plugin cache_req_svc_by_name = {
.ncache_check_fn = cache_req_svc_by_name_ncache_check,
.ncache_add_fn = cache_req_svc_by_name_ncache_add,
.lookup_fn = cache_req_svc_by_name_lookup,
- .dpreq_params_fn = cache_req_svc_by_name_dpreq_params
+ .dp_send_fn = cache_req_svc_by_name_dp_send,
+ .dp_recv_fn = cache_req_common_dp_recv
};
struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_svc_by_port.c b/src/responder/common/cache_req/plugins/cache_req_svc_by_port.c
index 55117492f6f8aa6a4e31c1e23862215255cdf660..1da23d4505a1dad3b2425a996134f8298c03518a 100644
--- a/src/responder/common/cache_req/plugins/cache_req_svc_by_port.c
+++ b/src/responder/common/cache_req/plugins/cache_req_svc_by_port.c
@@ -93,24 +93,20 @@ cache_req_svc_by_port_lookup(TALLOC_CTX *mem_ctx,
data->svc.protocol.lookup, _result);
}
-static errno_t
-cache_req_svc_by_port_dpreq_params(TALLOC_CTX *mem_ctx,
- struct cache_req *cr,
- struct ldb_result *result,
- const char **_string,
- uint32_t *_id,
- const char **_flag)
+static struct tevent_req *
+cache_req_svc_by_port_dp_send(TALLOC_CTX *mem_ctx,
+ struct cache_req *cr,
+ struct cache_req_data *data,
+ struct sss_domain_info *domain,
+ struct ldb_result *result)
{
- *_id = cr->data->svc.port;
- *_string = NULL;
- *_flag = cr->data->svc.protocol.lookup;
-
- return EOK;
+ return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+ SSS_DP_SERVICES, NULL, cr->data->svc.port,
+ cr->data->svc.protocol.lookup);
}
const struct cache_req_plugin cache_req_svc_by_port = {
.name = "Service by port",
- .dp_type = SSS_DP_SERVICES,
.attr_expiration = SYSDB_CACHE_EXPIRE,
.parse_name = false,
.ignore_default_domain = false,
@@ -130,7 +126,8 @@ const struct cache_req_plugin cache_req_svc_by_port = {
.ncache_check_fn = cache_req_svc_by_port_ncache_check,
.ncache_add_fn = cache_req_svc_by_port_ncache_add,
.lookup_fn = cache_req_svc_by_port_lookup,
- .dpreq_params_fn = cache_req_svc_by_port_dpreq_params
+ .dp_send_fn = cache_req_svc_by_port_dp_send,
+ .dp_recv_fn = cache_req_common_dp_recv
};
struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_user_by_cert.c b/src/responder/common/cache_req/plugins/cache_req_user_by_cert.c
index 5203d3f94421715b711bcd1e01b7a42737b6fe41..cead8524ba68bc18b29649a2d44774da43d676a3 100644
--- a/src/responder/common/cache_req/plugins/cache_req_user_by_cert.c
+++ b/src/responder/common/cache_req/plugins/cache_req_user_by_cert.c
@@ -63,24 +63,19 @@ cache_req_user_by_cert_lookup(TALLOC_CTX *mem_ctx,
_result);
}
-static errno_t
-cache_req_user_by_cert_dpreq_params(TALLOC_CTX *mem_ctx,
- struct cache_req *cr,
- struct ldb_result *result,
- const char **_string,
- uint32_t *_id,
- const char **_flag)
+static struct tevent_req *
+cache_req_user_by_cert_dp_send(TALLOC_CTX *mem_ctx,
+ struct cache_req *cr,
+ struct cache_req_data *data,
+ struct sss_domain_info *domain,
+ struct ldb_result *result)
{
- *_id = 0;
- *_string = cr->data->cert;
- *_flag = NULL;
-
- return EOK;
+ return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+ SSS_DP_CERT, cr->data->cert, 0, NULL);
}
const struct cache_req_plugin cache_req_user_by_cert = {
.name = "User by certificate",
- .dp_type = SSS_DP_CERT,
.attr_expiration = SYSDB_CACHE_EXPIRE,
.parse_name = false,
.ignore_default_domain = false,
@@ -100,7 +95,8 @@ const struct cache_req_plugin cache_req_user_by_cert = {
.ncache_check_fn = cache_req_user_by_cert_ncache_check,
.ncache_add_fn = NULL,
.lookup_fn = cache_req_user_by_cert_lookup,
- .dpreq_params_fn = cache_req_user_by_cert_dpreq_params
+ .dp_send_fn = cache_req_user_by_cert_dp_send,
+ .dp_recv_fn = cache_req_common_dp_recv
};
struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_user_by_filter.c b/src/responder/common/cache_req/plugins/cache_req_user_by_filter.c
index 4c328a5d900e37de0f3396a8c2f1c937360ce081..ee7e69399e318b9835f1623bddc635bf09aa7a1c 100644
--- a/src/responder/common/cache_req/plugins/cache_req_user_by_filter.c
+++ b/src/responder/common/cache_req/plugins/cache_req_user_by_filter.c
@@ -99,24 +99,20 @@ cache_req_user_by_filter_lookup(TALLOC_CTX *mem_ctx,
return ret;
}
-static errno_t
-cache_req_user_by_filter_dpreq_params(TALLOC_CTX *mem_ctx,
- struct cache_req *cr,
- struct ldb_result *result,
- const char **_string,
- uint32_t *_id,
- const char **_flag)
+static struct tevent_req *
+cache_req_user_by_filter_dp_send(TALLOC_CTX *mem_ctx,
+ struct cache_req *cr,
+ struct cache_req_data *data,
+ struct sss_domain_info *domain,
+ struct ldb_result *result)
{
- *_id = cr->data->id;
- *_string = cr->data->name.lookup;
- *_flag = NULL;
-
- return EOK;
+ return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+ SSS_DP_WILDCARD_USER, cr->data->name.lookup,
+ cr->data->id, NULL);
}
const struct cache_req_plugin cache_req_user_by_filter = {
.name = "User by filter",
- .dp_type = SSS_DP_WILDCARD_USER,
.attr_expiration = SYSDB_CACHE_EXPIRE,
.parse_name = true,
.ignore_default_domain = false,
@@ -136,7 +132,8 @@ const struct cache_req_plugin cache_req_user_by_filter = {
.ncache_check_fn = NULL,
.ncache_add_fn = NULL,
.lookup_fn = cache_req_user_by_filter_lookup,
- .dpreq_params_fn = cache_req_user_by_filter_dpreq_params
+ .dp_send_fn = cache_req_user_by_filter_dp_send,
+ .dp_recv_fn = cache_req_common_dp_recv
};
struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_user_by_id.c b/src/responder/common/cache_req/plugins/cache_req_user_by_id.c
index d794d248b1e9b11cd41210b8180823e3a2565847..fa783714b7c67ca029d18a223b64a3a69e3e6929 100644
--- a/src/responder/common/cache_req/plugins/cache_req_user_by_id.c
+++ b/src/responder/common/cache_req/plugins/cache_req_user_by_id.c
@@ -102,9 +102,30 @@ cache_req_user_by_id_dpreq_params(TALLOC_CTX *mem_ctx,
return EOK;
}
+static struct tevent_req *
+cache_req_user_by_id_dp_send(TALLOC_CTX *mem_ctx,
+ struct cache_req *cr,
+ struct cache_req_data *data,
+ struct sss_domain_info *domain,
+ struct ldb_result *result)
+{
+ const char *string;
+ const char *flag;
+ uint32_t id;
+ errno_t ret;
+
+ ret = cache_req_user_by_id_dpreq_params(mem_ctx, cr, result,
+ &string, &id, &flag);
+ if (ret != EOK) {
+ return NULL;
+ }
+
+ return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+ SSS_DP_USER, string, id, flag);
+}
+
const struct cache_req_plugin cache_req_user_by_id = {
.name = "User by ID",
- .dp_type = SSS_DP_USER,
.attr_expiration = SYSDB_CACHE_EXPIRE,
.parse_name = false,
.ignore_default_domain = false,
@@ -124,7 +145,8 @@ const struct cache_req_plugin cache_req_user_by_id = {
.ncache_check_fn = cache_req_user_by_id_ncache_check,
.ncache_add_fn = NULL,
.lookup_fn = cache_req_user_by_id_lookup,
- .dpreq_params_fn = cache_req_user_by_id_dpreq_params
+ .dp_send_fn = cache_req_user_by_id_dp_send,
+ .dp_recv_fn = cache_req_common_dp_recv
};
struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_user_by_name.c b/src/responder/common/cache_req/plugins/cache_req_user_by_name.c
index 3f343870c7e7c28ac72f4e94272c6dee281b963c..4289f5fd4c79f0e512f0249abe4422589fa800a0 100644
--- a/src/responder/common/cache_req/plugins/cache_req_user_by_name.c
+++ b/src/responder/common/cache_req/plugins/cache_req_user_by_name.c
@@ -157,9 +157,30 @@ cache_req_user_by_name_dpreq_params(TALLOC_CTX *mem_ctx,
return EOK;
}
+static struct tevent_req *
+cache_req_user_by_name_dp_send(TALLOC_CTX *mem_ctx,
+ struct cache_req *cr,
+ struct cache_req_data *data,
+ struct sss_domain_info *domain,
+ struct ldb_result *result)
+{
+ const char *string;
+ const char *flag;
+ uint32_t id;
+ errno_t ret;
+
+ ret = cache_req_user_by_name_dpreq_params(mem_ctx, cr, result,
+ &string, &id, &flag);
+ if (ret != EOK) {
+ return NULL;
+ }
+
+ return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+ SSS_DP_USER, string, id, flag);
+}
+
const struct cache_req_plugin cache_req_user_by_name = {
.name = "User by name",
- .dp_type = SSS_DP_USER,
.attr_expiration = SYSDB_CACHE_EXPIRE,
.parse_name = true,
.ignore_default_domain = false,
@@ -179,7 +200,8 @@ const struct cache_req_plugin cache_req_user_by_name = {
.ncache_check_fn = cache_req_user_by_name_ncache_check,
.ncache_add_fn = cache_req_user_by_name_ncache_add,
.lookup_fn = cache_req_user_by_name_lookup,
- .dpreq_params_fn = cache_req_user_by_name_dpreq_params
+ .dp_send_fn = cache_req_user_by_name_dp_send,
+ .dp_recv_fn = cache_req_common_dp_recv
};
struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_user_by_upn.c b/src/responder/common/cache_req/plugins/cache_req_user_by_upn.c
index 4c6e6bcd056392abb729d416d406f28c28cdaa77..f496479a354517090617806a051a1b2fbc54f18f 100644
--- a/src/responder/common/cache_req/plugins/cache_req_user_by_upn.c
+++ b/src/responder/common/cache_req/plugins/cache_req_user_by_upn.c
@@ -92,24 +92,20 @@ cache_req_user_by_upn_lookup(TALLOC_CTX *mem_ctx,
data->attrs, _result);
}
-static errno_t
-cache_req_user_by_upn_dpreq_params(TALLOC_CTX *mem_ctx,
- struct cache_req *cr,
- struct ldb_result *result,
- const char **_string,
- uint32_t *_id,
- const char **_flag)
+static struct tevent_req *
+cache_req_user_by_upn_dp_send(TALLOC_CTX *mem_ctx,
+ struct cache_req *cr,
+ struct cache_req_data *data,
+ struct sss_domain_info *domain,
+ struct ldb_result *result)
{
- *_id = 0;
- *_string = cr->data->name.lookup;
- *_flag = EXTRA_NAME_IS_UPN;
-
- return EOK;
+ return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+ SSS_DP_USER, cr->data->name.lookup,
+ 0, EXTRA_NAME_IS_UPN);
}
const struct cache_req_plugin cache_req_user_by_upn = {
.name = "User by UPN",
- .dp_type = SSS_DP_USER,
.attr_expiration = SYSDB_CACHE_EXPIRE,
.parse_name = false,
.ignore_default_domain = false,
@@ -129,5 +125,6 @@ const struct cache_req_plugin cache_req_user_by_upn = {
.ncache_check_fn = cache_req_user_by_upn_ncache_check,
.ncache_add_fn = cache_req_user_by_upn_ncache_add,
.lookup_fn = cache_req_user_by_upn_lookup,
- .dpreq_params_fn = cache_req_user_by_upn_dpreq_params
+ .dp_send_fn = cache_req_user_by_upn_dp_send,
+ .dp_recv_fn = cache_req_common_dp_recv
};
diff --git a/src/tests/cmocka/common_mock_resp_dp.c b/src/tests/cmocka/common_mock_resp_dp.c
index 0b6870346c00954a3e2accf8f21625a14da8afb5..cbdb65d745a63ae00613001847351d3dba0fe290 100644
--- a/src/tests/cmocka/common_mock_resp_dp.c
+++ b/src/tests/cmocka/common_mock_resp_dp.c
@@ -61,16 +61,37 @@ sss_dp_get_account_recv(TALLOC_CTX *mem_ctx,
return test_request_recv(req);
}
+errno_t
+sss_dp_req_recv(TALLOC_CTX *mem_ctx,
+ struct tevent_req *req,
+ dbus_uint16_t *dp_err,
+ dbus_uint32_t *dp_ret,
+ char **err_msg)
+{
+ acct_cb_t cb;
+
+ *dp_err = sss_mock_type(dbus_uint16_t);
+ *dp_ret = sss_mock_type(dbus_uint32_t);
+ *err_msg = sss_mock_ptr_type(char *);
+
+ cb = sss_mock_ptr_type(acct_cb_t);
+ if (cb) {
+ (cb)(sss_mock_ptr_type(void *));
+ }
+
+ return test_request_recv(req);
+}
+
void mock_account_recv(uint16_t dp_err, uint32_t dp_ret, char *msg,
acct_cb_t acct_cb, void *pvt)
{
- will_return(sss_dp_get_account_recv, dp_err);
- will_return(sss_dp_get_account_recv, dp_ret);
- will_return(sss_dp_get_account_recv, msg);
+ will_return(sss_dp_req_recv, dp_err);
+ will_return(sss_dp_req_recv, dp_ret);
+ will_return(sss_dp_req_recv, msg);
- will_return(sss_dp_get_account_recv, acct_cb);
+ will_return(sss_dp_req_recv, acct_cb);
if (acct_cb) {
- will_return(sss_dp_get_account_recv, pvt);
+ will_return(sss_dp_req_recv, pvt);
}
}
diff --git a/src/tests/cmocka/test_responder_cache_req.c b/src/tests/cmocka/test_responder_cache_req.c
index d4e54cd474b9b22cb4b877d4afe5dca19130e53f..94a902c036dd09ba016b7aa520ce82f23aaa6a35 100644
--- a/src/tests/cmocka/test_responder_cache_req.c
+++ b/src/tests/cmocka/test_responder_cache_req.c
@@ -530,7 +530,7 @@ void test_user_by_name_multiple_domains_found(void **state)
/* Mock values. */
will_return_always(__wrap_sss_dp_get_account_send, test_ctx);
- will_return_always(sss_dp_get_account_recv, 0);
+ will_return_always(sss_dp_req_recv, 0);
mock_parse_inp(users[0].short_name, NULL, ERR_OK);
/* Test. */
@@ -547,7 +547,7 @@ void test_user_by_name_multiple_domains_notfound(void **state)
/* Mock values. */
will_return_always(__wrap_sss_dp_get_account_send, test_ctx);
- will_return_always(sss_dp_get_account_recv, 0);
+ will_return_always(sss_dp_req_recv, 0);
mock_parse_inp(users[0].short_name, NULL, ERR_OK);
/* Test. */
@@ -749,7 +749,7 @@ void test_user_by_upn_multiple_domains_found(void **state)
/* Mock values. */
will_return_always(__wrap_sss_dp_get_account_send, test_ctx);
- will_return_always(sss_dp_get_account_recv, 0);
+ will_return_always(sss_dp_req_recv, 0);
mock_parse_inp(NULL, NULL, ERR_DOMAIN_NOT_FOUND);
/* Test. */
@@ -766,7 +766,7 @@ void test_user_by_upn_multiple_domains_notfound(void **state)
/* Mock values. */
will_return_always(__wrap_sss_dp_get_account_send, test_ctx);
- will_return_always(sss_dp_get_account_recv, 0);
+ will_return_always(sss_dp_req_recv, 0);
mock_parse_inp(NULL, NULL, ERR_DOMAIN_NOT_FOUND);
/* Test. */
@@ -904,7 +904,7 @@ void test_user_by_id_multiple_domains_found(void **state)
/* Mock values. */
will_return_always(__wrap_sss_dp_get_account_send, test_ctx);
- will_return_always(sss_dp_get_account_recv, 0);
+ will_return_always(sss_dp_req_recv, 0);
/* Test. */
run_user_by_id(test_ctx, NULL, 0, ERR_OK);
@@ -920,7 +920,7 @@ void test_user_by_id_multiple_domains_notfound(void **state)
/* Mock values. */
will_return_always(__wrap_sss_dp_get_account_send, test_ctx);
- will_return_always(sss_dp_get_account_recv, 0);
+ will_return_always(sss_dp_req_recv, 0);
/* Test. */
run_user_by_id(test_ctx, NULL, 0, ENOENT);
@@ -1045,7 +1045,7 @@ void test_group_by_name_multiple_domains_found(void **state)
/* Mock values. */
will_return_always(__wrap_sss_dp_get_account_send, test_ctx);
- will_return_always(sss_dp_get_account_recv, 0);
+ will_return_always(sss_dp_req_recv, 0);
mock_parse_inp(groups[0].short_name, NULL, ERR_OK);
/* Test. */
@@ -1062,7 +1062,7 @@ void test_group_by_name_multiple_domains_notfound(void **state)
/* Mock values. */
will_return_always(__wrap_sss_dp_get_account_send, test_ctx);
- will_return_always(sss_dp_get_account_recv, 0);
+ will_return_always(sss_dp_req_recv, 0);
mock_parse_inp(groups[0].short_name, NULL, ERR_OK);
/* Test. */
@@ -1261,7 +1261,7 @@ void test_group_by_id_multiple_domains_found(void **state)
/* Mock values. */
will_return_always(__wrap_sss_dp_get_account_send, test_ctx);
- will_return_always(sss_dp_get_account_recv, 0);
+ will_return_always(sss_dp_req_recv, 0);
/* Test. */
run_group_by_id(test_ctx, NULL, 0, ERR_OK);
@@ -1277,7 +1277,7 @@ void test_group_by_id_multiple_domains_notfound(void **state)
/* Mock values. */
will_return_always(__wrap_sss_dp_get_account_send, test_ctx);
- will_return_always(sss_dp_get_account_recv, 0);
+ will_return_always(sss_dp_req_recv, 0);
/* Test. */
run_group_by_id(test_ctx, NULL, 0, ENOENT);
@@ -1912,7 +1912,7 @@ void test_object_by_sid_user_multiple_domains_found(void **state)
/* Mock values. */
will_return_always(__wrap_sss_dp_get_account_send, test_ctx);
- will_return_always(sss_dp_get_account_recv, 0);
+ will_return_always(sss_dp_req_recv, 0);
/* Test. */
run_object_by_sid(test_ctx, NULL, users[0].sid, attrs, 0, ERR_OK);
@@ -1929,7 +1929,7 @@ void test_object_by_sid_user_multiple_domains_notfound(void **state)
/* Mock values. */
will_return_always(__wrap_sss_dp_get_account_send, test_ctx);
- will_return_always(sss_dp_get_account_recv, 0);
+ will_return_always(sss_dp_req_recv, 0);
/* Test. */
run_object_by_sid(test_ctx, NULL, users[0].sid, attrs, 0, ENOENT);
@@ -2068,7 +2068,7 @@ void test_object_by_sid_group_multiple_domains_found(void **state)
/* Mock values. */
will_return_always(__wrap_sss_dp_get_account_send, test_ctx);
- will_return_always(sss_dp_get_account_recv, 0);
+ will_return_always(sss_dp_req_recv, 0);
/* Test. */
run_object_by_sid(test_ctx, NULL, groups[0].sid, attrs, 0, ERR_OK);
@@ -2085,7 +2085,7 @@ void test_object_by_sid_group_multiple_domains_notfound(void **state)
/* Mock values. */
will_return_always(__wrap_sss_dp_get_account_send, test_ctx);
- will_return_always(sss_dp_get_account_recv, 0);
+ will_return_always(sss_dp_req_recv, 0);
/* Test. */
run_object_by_sid(test_ctx, NULL, groups[0].sid, attrs, 0, ENOENT);
--
2.9.3