summaryrefslogtreecommitdiffstats
path: root/src/responder/common
diff options
context:
space:
mode:
authorPavel Březina <pbrezina@redhat.com>2017-02-03 12:44:15 +0100
committerJakub Hrozek <jhrozek@redhat.com>2017-02-08 11:05:23 +0100
commit2b5704cd96a085b99d3b0d4f80f4414adc134750 (patch)
tree7f4864978bd040ac7294b6121a3709801991f616 /src/responder/common
parente33744e8cc82390153c94ace53c16f72365b9fd9 (diff)
downloadsssd-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.c3
-rw-r--r--src/responder/common/responder.h5
-rw-r--r--src/responder/common/responder_get_domains.c30
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) {