diff options
Diffstat (limited to 'net/sunrpc/auth.c')
| -rw-r--r-- | net/sunrpc/auth.c | 24 | 
1 files changed, 18 insertions, 6 deletions
diff --git a/net/sunrpc/auth.c b/net/sunrpc/auth.c index d3f0f944c0b..2156327da45 100644 --- a/net/sunrpc/auth.c +++ b/net/sunrpc/auth.c @@ -264,13 +264,9 @@ retry:  	if (!cred) {  		new = auth->au_ops->crcreate(auth, acred, flags); -		if (!IS_ERR(new)) { -#ifdef RPC_DEBUG -			new->cr_magic = RPCAUTH_CRED_MAGIC; -#endif +		if (!IS_ERR(new))  			goto retry; -		} else -			cred = new; +		cred = new;  	} else if ((cred->cr_flags & RPCAUTH_CRED_NEW)  			&& cred->cr_ops->cr_init != NULL  			&& !(flags & RPCAUTH_LOOKUP_NEW)) { @@ -302,6 +298,22 @@ rpcauth_lookupcred(struct rpc_auth *auth, int flags)  	return ret;  } +void +rpcauth_init_cred(struct rpc_cred *cred, const struct auth_cred *acred, +		  struct rpc_auth *auth, const struct rpc_credops *ops) +{ +	INIT_HLIST_NODE(&cred->cr_hash); +	atomic_set(&cred->cr_count, 1); +	cred->cr_auth = auth; +	cred->cr_ops = ops; +	cred->cr_expire = jiffies; +#ifdef RPC_DEBUG +	cred->cr_magic = RPCAUTH_CRED_MAGIC; +#endif +	cred->cr_uid = acred->uid; +} +EXPORT_SYMBOL(rpcauth_init_cred); +  struct rpc_cred *  rpcauth_bindcred(struct rpc_task *task)  {  |