summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2012-03-07 19:55:26 +0100
committerStephen Gallagher <sgallagh@redhat.com>2012-03-12 07:19:33 -0400
commit966acee7065b7053aefe04f3047d35e91ebf7f14 (patch)
treea0386bb013cd60bb5ca01d34f42f81e662830e66
parentd544e31a44268408deb400464c6df604e6b3a780 (diff)
downloadsssd-966acee7065b7053aefe04f3047d35e91ebf7f14.tar.gz
sssd-966acee7065b7053aefe04f3047d35e91ebf7f14.tar.xz
sssd-966acee7065b7053aefe04f3047d35e91ebf7f14.zip
Handle errors from lookup_netgr_step gracefully
-rw-r--r--src/responder/nss/nsssrv_netgroup.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/responder/nss/nsssrv_netgroup.c b/src/responder/nss/nsssrv_netgroup.c
index 5c79342c9..098761cce 100644
--- a/src/responder/nss/nsssrv_netgroup.c
+++ b/src/responder/nss/nsssrv_netgroup.c
@@ -189,6 +189,7 @@ static struct tevent_req *setnetgrent_send(TALLOC_CTX *mem_ctx,
state->dctx = talloc_zero(state, struct nss_dom_ctx);
if (!state->dctx) {
+ ret = ENOMEM;
goto error;
}
dctx = state->dctx;
@@ -207,6 +208,7 @@ static struct tevent_req *setnetgrent_send(TALLOC_CTX *mem_ctx,
if (domname) {
dctx->domain = responder_get_domain(client->rctx->domains, domname);
if (!dctx->domain) {
+ ret = EINVAL;
goto error;
}
@@ -224,6 +226,7 @@ static struct tevent_req *setnetgrent_send(TALLOC_CTX *mem_ctx,
/* Save the netgroup name for getnetgrent */
client->netgr_name = talloc_strdup(client, state->netgr_shortname);
if (!client->netgr_name) {
+ ret = ENOMEM;
goto error;
}
}
@@ -264,6 +267,7 @@ static struct tevent_req *setnetgrent_send(TALLOC_CTX *mem_ctx,
*/
state->netgr = talloc_zero(nctx, struct getent_ctx);
if (!state->netgr) {
+ ret = ENOMEM;
goto error;
}
dctx->netgr = state->netgr;
@@ -275,6 +279,7 @@ static struct tevent_req *setnetgrent_send(TALLOC_CTX *mem_ctx,
client->netgr_name);
if (!state->netgr->name) {
talloc_free(state->netgr);
+ ret = ENOMEM;
goto error;
}
@@ -325,7 +330,8 @@ static struct tevent_req *setnetgrent_send(TALLOC_CTX *mem_ctx,
return req;
}
- /* An unexpected error occurred */
+ /* An unexpected error occurred or no domains
+ * were eligible for the search */
goto error;
}
tevent_req_done(req);
@@ -339,8 +345,9 @@ static struct tevent_req *setnetgrent_send(TALLOC_CTX *mem_ctx,
return req;
error:
- talloc_free(req);
- return NULL;
+ tevent_req_error(req, ret);
+ tevent_req_post(req, cmdctx->cctx->ev);
+ return req;
}
static void lookup_netgr_dp_callback(uint16_t err_maj, uint32_t err_min,