|
@@ -964,7 +964,7 @@ svcauth_gss_set_client(struct svc_rqst *rqstp)
|
|
if (rqstp->rq_gssclient == NULL)
|
|
if (rqstp->rq_gssclient == NULL)
|
|
return SVC_DENIED;
|
|
return SVC_DENIED;
|
|
stat = svcauth_unix_set_client(rqstp);
|
|
stat = svcauth_unix_set_client(rqstp);
|
|
- if (stat == SVC_DROP)
|
|
|
|
|
|
+ if (stat == SVC_DROP || stat == SVC_CLOSE)
|
|
return stat;
|
|
return stat;
|
|
return SVC_OK;
|
|
return SVC_OK;
|
|
}
|
|
}
|
|
@@ -1018,7 +1018,7 @@ static int svcauth_gss_handle_init(struct svc_rqst *rqstp,
|
|
return SVC_DENIED;
|
|
return SVC_DENIED;
|
|
memset(&rsikey, 0, sizeof(rsikey));
|
|
memset(&rsikey, 0, sizeof(rsikey));
|
|
if (dup_netobj(&rsikey.in_handle, &gc->gc_ctx))
|
|
if (dup_netobj(&rsikey.in_handle, &gc->gc_ctx))
|
|
- return SVC_DROP;
|
|
|
|
|
|
+ return SVC_CLOSE;
|
|
*authp = rpc_autherr_badverf;
|
|
*authp = rpc_autherr_badverf;
|
|
if (svc_safe_getnetobj(argv, &tmpobj)) {
|
|
if (svc_safe_getnetobj(argv, &tmpobj)) {
|
|
kfree(rsikey.in_handle.data);
|
|
kfree(rsikey.in_handle.data);
|
|
@@ -1026,22 +1026,22 @@ static int svcauth_gss_handle_init(struct svc_rqst *rqstp,
|
|
}
|
|
}
|
|
if (dup_netobj(&rsikey.in_token, &tmpobj)) {
|
|
if (dup_netobj(&rsikey.in_token, &tmpobj)) {
|
|
kfree(rsikey.in_handle.data);
|
|
kfree(rsikey.in_handle.data);
|
|
- return SVC_DROP;
|
|
|
|
|
|
+ return SVC_CLOSE;
|
|
}
|
|
}
|
|
|
|
|
|
/* Perform upcall, or find upcall result: */
|
|
/* Perform upcall, or find upcall result: */
|
|
rsip = rsi_lookup(&rsikey);
|
|
rsip = rsi_lookup(&rsikey);
|
|
rsi_free(&rsikey);
|
|
rsi_free(&rsikey);
|
|
if (!rsip)
|
|
if (!rsip)
|
|
- return SVC_DROP;
|
|
|
|
|
|
+ return SVC_CLOSE;
|
|
switch (cache_check(&rsi_cache, &rsip->h, &rqstp->rq_chandle)) {
|
|
switch (cache_check(&rsi_cache, &rsip->h, &rqstp->rq_chandle)) {
|
|
case -EAGAIN:
|
|
case -EAGAIN:
|
|
case -ETIMEDOUT:
|
|
case -ETIMEDOUT:
|
|
case -ENOENT:
|
|
case -ENOENT:
|
|
/* No upcall result: */
|
|
/* No upcall result: */
|
|
- return SVC_DROP;
|
|
|
|
|
|
+ return SVC_CLOSE;
|
|
case 0:
|
|
case 0:
|
|
- ret = SVC_DROP;
|
|
|
|
|
|
+ ret = SVC_CLOSE;
|
|
/* Got an answer to the upcall; use it: */
|
|
/* Got an answer to the upcall; use it: */
|
|
if (gss_write_init_verf(rqstp, rsip))
|
|
if (gss_write_init_verf(rqstp, rsip))
|
|
goto out;
|
|
goto out;
|