diff options
| author | Pavel Březina <pbrezina@redhat.com> | 2017-02-03 12:44:15 +0100 |
|---|---|---|
| committer | Jakub Hrozek <jhrozek@redhat.com> | 2017-02-08 11:05:23 +0100 |
| commit | 2b5704cd96a085b99d3b0d4f80f4414adc134750 (patch) | |
| tree | 7f4864978bd040ac7294b6121a3709801991f616 /src/responder/common | |
| parent | e33744e8cc82390153c94ace53c16f72365b9fd9 (diff) | |
| download | sssd-2b5704cd96a085b99d3b0d4f80f4414adc134750.tar.gz sssd-2b5704cd96a085b99d3b0d4f80f4414adc134750.tar.xz sssd-2b5704cd96a085b99d3b0d4f80f4414adc134750.zip | |
sss_parse_inp_send: provide default_domain as parameter
It is not always desirable to consider default_domain from configuration
but expect none instead. For example when we search host certificates.
This is currently not used in this patch since host lookups parse
name directly with sss_parse_name but it will be used in the next
patch.
Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
Diffstat (limited to 'src/responder/common')
| -rw-r--r-- | src/responder/common/cache_req/cache_req.c | 3 | ||||
| -rw-r--r-- | src/responder/common/responder.h | 5 | ||||
| -rw-r--r-- | src/responder/common/responder_get_domains.c | 30 |
3 files changed, 32 insertions, 6 deletions
diff --git a/src/responder/common/cache_req/cache_req.c b/src/responder/common/cache_req/cache_req.c index f546e6130..e5026e1a8 100644 --- a/src/responder/common/cache_req/cache_req.c +++ b/src/responder/common/cache_req/cache_req.c @@ -415,7 +415,8 @@ static errno_t cache_req_process_input(TALLOC_CTX *mem_ctx, CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, cr, "Parsing input name [%s]\n", cr->data->name.input); - subreq = sss_parse_inp_send(mem_ctx, cr->rctx, cr->data->name.input); + subreq = sss_parse_inp_send(mem_ctx, cr->rctx, cr->rctx->default_domain, + cr->data->name.input); if (subreq == NULL) { DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tevent request!\n"); return ENOMEM; diff --git a/src/responder/common/responder.h b/src/responder/common/responder.h index d1fa532be..c387c6ec3 100644 --- a/src/responder/common/responder.h +++ b/src/responder/common/responder.h @@ -347,8 +347,11 @@ errno_t check_allowed_uids(uid_t uid, size_t allowed_uids_count, uid_t *allowed_uids); struct tevent_req * -sss_parse_inp_send(TALLOC_CTX *mem_ctx, struct resp_ctx *rctx, +sss_parse_inp_send(TALLOC_CTX *mem_ctx, + struct resp_ctx *rctx, + const char *default_domain, const char *rawinp); + errno_t sss_parse_inp_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx, char **_name, char **_domname); diff --git a/src/responder/common/responder_get_domains.c b/src/responder/common/responder_get_domains.c index cc7b99f30..0f39d107d 100644 --- a/src/responder/common/responder_get_domains.c +++ b/src/responder/common/responder_get_domains.c @@ -443,6 +443,7 @@ errno_t schedule_get_domains_task(TALLOC_CTX *mem_ctx, struct sss_parse_inp_state { struct resp_ctx *rctx; + const char *default_domain; const char *rawinp; char *name; @@ -453,7 +454,9 @@ struct sss_parse_inp_state { static void sss_parse_inp_done(struct tevent_req *subreq); struct tevent_req * -sss_parse_inp_send(TALLOC_CTX *mem_ctx, struct resp_ctx *rctx, +sss_parse_inp_send(TALLOC_CTX *mem_ctx, + struct resp_ctx *rctx, + const char *default_domain, const char *rawinp) { errno_t ret; @@ -465,16 +468,35 @@ sss_parse_inp_send(TALLOC_CTX *mem_ctx, struct resp_ctx *rctx, if (req == NULL) { return NULL; } - state->rawinp = rawinp; + + if (rawinp == NULL) { + DEBUG(SSSDBG_CRIT_FAILURE, "Empty input!\n"); + ret = EINVAL; + goto done; + } + state->rctx = rctx; + state->rawinp = talloc_strdup(state, rawinp); + if (state->rawinp == NULL) { + ret = ENOMEM; + goto done; + } + + + state->default_domain = talloc_strdup(state, default_domain); + if (default_domain != NULL && state->default_domain == NULL) { + ret = ENOMEM; + goto done; + } + /* If the subdomains haven't been checked yet, we need to always * attach to the post-startup subdomain request and only then parse * the input. Otherwise, we might not be able to parse input with a * flat domain name specifier */ if (rctx->get_domains_last_call.tv_sec > 0) { ret = sss_parse_name_for_domains(state, rctx->domains, - rctx->default_domain, rawinp, + default_domain, rawinp, &state->domname, &state->name); if (ret == EOK) { /* Was able to use cached domains */ @@ -532,7 +554,7 @@ static void sss_parse_inp_done(struct tevent_req *subreq) state->error = ERR_OK; ret = sss_parse_name_for_domains(state, state->rctx->domains, - state->rctx->default_domain, + state->default_domain, state->rawinp, &state->domname, &state->name); if (ret == EAGAIN && state->domname != NULL && state->name == NULL) { |
