SUNRPC: Add a backpointer from the struct rpc_cred to the rpc_auth
Cleans up an issue whereby rpcsec_gss uses the rpc_clnt->cl_auth. If we want to be able to add several rpc_auths to a single rpc_clnt, then this abuse must go. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
c1384c9c4c
commit
4a8c1344dc
|
@ -30,8 +30,11 @@ struct auth_cred {
|
|||
/*
|
||||
* Client user credentials
|
||||
*/
|
||||
struct rpc_auth;
|
||||
struct rpc_credops;
|
||||
struct rpc_cred {
|
||||
struct hlist_node cr_hash; /* hash chain */
|
||||
struct rpc_auth * cr_auth;
|
||||
struct rpc_credops * cr_ops;
|
||||
unsigned long cr_expire; /* when to gc */
|
||||
atomic_t cr_count; /* ref count */
|
||||
|
@ -60,6 +63,7 @@ struct rpc_cred_cache {
|
|||
unsigned long expire; /* cache expiry interval */
|
||||
};
|
||||
|
||||
struct rpc_authops;
|
||||
struct rpc_auth {
|
||||
unsigned int au_cslack; /* call cred size estimate */
|
||||
/* guess at number of u32's auth adds before
|
||||
|
|
|
@ -386,7 +386,7 @@ static inline int
|
|||
gss_refresh_upcall(struct rpc_task *task)
|
||||
{
|
||||
struct rpc_cred *cred = task->tk_msg.rpc_cred;
|
||||
struct gss_auth *gss_auth = container_of(task->tk_client->cl_auth,
|
||||
struct gss_auth *gss_auth = container_of(cred->cr_auth,
|
||||
struct gss_auth, rpc_auth);
|
||||
struct gss_cred *gss_cred = container_of(cred,
|
||||
struct gss_cred, gc_base);
|
||||
|
@ -741,6 +741,7 @@ gss_create_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags)
|
|||
* fail to flag the credential as RPCAUTH_CRED_UPTODATE.
|
||||
*/
|
||||
cred->gc_flags = 0;
|
||||
cred->gc_base.cr_auth = auth;
|
||||
cred->gc_base.cr_ops = &gss_credops;
|
||||
cred->gc_base.cr_flags = RPCAUTH_CRED_NEW;
|
||||
cred->gc_service = gss_auth->service;
|
||||
|
|
|
@ -133,6 +133,7 @@ struct rpc_credops null_credops = {
|
|||
|
||||
static
|
||||
struct rpc_cred null_cred = {
|
||||
.cr_auth = &null_auth,
|
||||
.cr_ops = &null_credops,
|
||||
.cr_count = ATOMIC_INIT(1),
|
||||
.cr_flags = RPCAUTH_CRED_UPTODATE,
|
||||
|
|
|
@ -92,6 +92,7 @@ unx_create_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags)
|
|||
if (i < NFS_NGROUPS)
|
||||
cred->uc_gids[i] = NOGROUP;
|
||||
}
|
||||
cred->uc_base.cr_auth = &unix_auth;
|
||||
cred->uc_base.cr_ops = &unix_credops;
|
||||
|
||||
return (struct rpc_cred *) cred;
|
||||
|
|
Loading…
Reference in a new issue