From 4df7aec645f87342f3a5146062abcb15f71f4fd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20B=C5=99ezina?= 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 --- 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