diff options
| author | Pavel Březina <pbrezina@redhat.com> | 2017-01-17 14:11:58 +0100 |
|---|---|---|
| committer | Jakub Hrozek <jhrozek@redhat.com> | 2017-02-08 11:05:42 +0100 |
| commit | 4df7aec645f87342f3a5146062abcb15f71f4fd9 (patch) | |
| tree | 2ab8d7c56c0ef8c3b57452bc244f224e47a082d9 /src/responder/common | |
| parent | 9492b3b26ac0b1898f836094074a9d8b38916e13 (diff) | |
| download | sssd-4df7aec645f87342f3a5146062abcb15f71f4fd9.tar.gz sssd-4df7aec645f87342f3a5146062abcb15f71f4fd9.tar.xz sssd-4df7aec645f87342f3a5146062abcb15f71f4fd9.zip | |
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>
Diffstat (limited to 'src/responder/common')
23 files changed, 360 insertions, 313 deletions
diff --git a/src/responder/common/cache_req/cache_req_plugin.h b/src/responder/common/cache_req/cache_req_plugin.h index 59ef8bad1..61e346dac 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 e79fe869b..b544b739e 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 aabff389a..eed82cf26 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 4c0f358fa..b80f310fe 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 2056dc2cc..dbb40c983 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 e85021297..2c4917cde 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 2adeddb6b..3b1a85841 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 bc42eb7db..88e1137a3 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 e48588087..e98f76f8c 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 962b38866..be1eb9bd8 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 d2f03cbea..10fb67cbf 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 9b2d07d4a..266ec7b8a 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 5b19edeb2..bc6fc9a8f 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 3f4780761..046e313c8 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 6829d0ec9..2b2caeea1 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 6a6eb8e72..ab5776631 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 9562354ed..cbb186df0 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 55117492f..1da23d450 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 5203d3f94..cead8524b 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 4c328a5d9..ee7e69399 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 d794d248b..fa783714b 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 3f343870c..4289f5fd4 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 4c6e6bcd0..f496479a3 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 }; |
