diff options
Diffstat (limited to 'net/sunrpc/auth.c')
| -rw-r--r-- | net/sunrpc/auth.c | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/net/sunrpc/auth.c b/net/sunrpc/auth.c index afe67849269f..67e31276682a 100644 --- a/net/sunrpc/auth.c +++ b/net/sunrpc/auth.c | |||
| @@ -563,8 +563,17 @@ rpcauth_checkverf(struct rpc_task *task, __be32 *p) | |||
| 563 | return cred->cr_ops->crvalidate(task, p); | 563 | return cred->cr_ops->crvalidate(task, p); |
| 564 | } | 564 | } |
| 565 | 565 | ||
| 566 | static void rpcauth_wrap_req_encode(kxdreproc_t encode, struct rpc_rqst *rqstp, | ||
| 567 | __be32 *data, void *obj) | ||
| 568 | { | ||
| 569 | struct xdr_stream xdr; | ||
| 570 | |||
| 571 | xdr_init_encode(&xdr, &rqstp->rq_snd_buf, data); | ||
| 572 | encode(rqstp, &xdr, obj); | ||
| 573 | } | ||
| 574 | |||
| 566 | int | 575 | int |
| 567 | rpcauth_wrap_req(struct rpc_task *task, kxdrproc_t encode, void *rqstp, | 576 | rpcauth_wrap_req(struct rpc_task *task, kxdreproc_t encode, void *rqstp, |
| 568 | __be32 *data, void *obj) | 577 | __be32 *data, void *obj) |
| 569 | { | 578 | { |
| 570 | struct rpc_cred *cred = task->tk_rqstp->rq_cred; | 579 | struct rpc_cred *cred = task->tk_rqstp->rq_cred; |
| @@ -574,11 +583,22 @@ rpcauth_wrap_req(struct rpc_task *task, kxdrproc_t encode, void *rqstp, | |||
| 574 | if (cred->cr_ops->crwrap_req) | 583 | if (cred->cr_ops->crwrap_req) |
| 575 | return cred->cr_ops->crwrap_req(task, encode, rqstp, data, obj); | 584 | return cred->cr_ops->crwrap_req(task, encode, rqstp, data, obj); |
| 576 | /* By default, we encode the arguments normally. */ | 585 | /* By default, we encode the arguments normally. */ |
| 577 | return encode(rqstp, data, obj); | 586 | rpcauth_wrap_req_encode(encode, rqstp, data, obj); |
| 587 | return 0; | ||
| 588 | } | ||
| 589 | |||
| 590 | static int | ||
| 591 | rpcauth_unwrap_req_decode(kxdrdproc_t decode, struct rpc_rqst *rqstp, | ||
| 592 | __be32 *data, void *obj) | ||
| 593 | { | ||
| 594 | struct xdr_stream xdr; | ||
| 595 | |||
| 596 | xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, data); | ||
| 597 | return decode(rqstp, &xdr, obj); | ||
| 578 | } | 598 | } |
| 579 | 599 | ||
| 580 | int | 600 | int |
| 581 | rpcauth_unwrap_resp(struct rpc_task *task, kxdrproc_t decode, void *rqstp, | 601 | rpcauth_unwrap_resp(struct rpc_task *task, kxdrdproc_t decode, void *rqstp, |
| 582 | __be32 *data, void *obj) | 602 | __be32 *data, void *obj) |
| 583 | { | 603 | { |
| 584 | struct rpc_cred *cred = task->tk_rqstp->rq_cred; | 604 | struct rpc_cred *cred = task->tk_rqstp->rq_cred; |
| @@ -589,7 +609,7 @@ rpcauth_unwrap_resp(struct rpc_task *task, kxdrproc_t decode, void *rqstp, | |||
| 589 | return cred->cr_ops->crunwrap_resp(task, decode, rqstp, | 609 | return cred->cr_ops->crunwrap_resp(task, decode, rqstp, |
| 590 | data, obj); | 610 | data, obj); |
| 591 | /* By default, we decode the arguments normally. */ | 611 | /* By default, we decode the arguments normally. */ |
| 592 | return decode(rqstp, data, obj); | 612 | return rpcauth_unwrap_req_decode(decode, rqstp, data, obj); |
| 593 | } | 613 | } |
| 594 | 614 | ||
| 595 | int | 615 | int |
