diff options
| author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2007-06-23 19:55:31 -0400 | 
|---|---|---|
| committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2007-07-10 23:40:35 -0400 | 
| commit | 5fe4755e2526a2aa82b7ed8daeb3aed74a236925 (patch) | |
| tree | aceb993080fc6aac5861f04d8a8494becb4046eb | |
| parent | f1c0a8615090359d57e096157feb9f900cbb233c (diff) | |
| download | olio-linux-3.10-5fe4755e2526a2aa82b7ed8daeb3aed74a236925.tar.xz olio-linux-3.10-5fe4755e2526a2aa82b7ed8daeb3aed74a236925.zip  | |
SUNRPC: Clean up rpc credential initialisation
Add a helper rpc_cred_init()
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
| -rw-r--r-- | include/linux/sunrpc/auth.h | 1 | ||||
| -rw-r--r-- | include/linux/sunrpc/auth_gss.h | 5 | ||||
| -rw-r--r-- | net/sunrpc/auth.c | 24 | ||||
| -rw-r--r-- | net/sunrpc/auth_gss/auth_gss.c | 6 | ||||
| -rw-r--r-- | net/sunrpc/auth_unix.c | 10 | 
5 files changed, 22 insertions, 24 deletions
diff --git a/include/linux/sunrpc/auth.h b/include/linux/sunrpc/auth.h index e606c280468..d5bfc67461f 100644 --- a/include/linux/sunrpc/auth.h +++ b/include/linux/sunrpc/auth.h @@ -127,6 +127,7 @@ int			rpcauth_unregister(const struct rpc_authops *);  struct rpc_auth *	rpcauth_create(rpc_authflavor_t, struct rpc_clnt *);  void			rpcauth_release(struct rpc_auth *);  struct rpc_cred *	rpcauth_lookup_credcache(struct rpc_auth *, struct auth_cred *, int); +void			rpcauth_init_cred(struct rpc_cred *, const struct auth_cred *, struct rpc_auth *, const struct rpc_credops *);  struct rpc_cred *	rpcauth_lookupcred(struct rpc_auth *, int);  struct rpc_cred *	rpcauth_bindcred(struct rpc_task *);  void			rpcauth_holdcred(struct rpc_task *); diff --git a/include/linux/sunrpc/auth_gss.h b/include/linux/sunrpc/auth_gss.h index 2db2fbf3494..0bd1d06777b 100644 --- a/include/linux/sunrpc/auth_gss.h +++ b/include/linux/sunrpc/auth_gss.h @@ -85,11 +85,6 @@ struct gss_cred {  	struct gss_upcall_msg	*gc_upcall;  }; -#define gc_uid			gc_base.cr_uid -#define gc_count		gc_base.cr_count -#define gc_flags		gc_base.cr_flags -#define gc_expire		gc_base.cr_expire -  #endif /* __KERNEL__ */  #endif /* _LINUX_SUNRPC_AUTH_GSS_H */ 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)  { diff --git a/net/sunrpc/auth_gss/auth_gss.c b/net/sunrpc/auth_gss/auth_gss.c index 177a9e413c0..766de0a41b2 100644 --- a/net/sunrpc/auth_gss/auth_gss.c +++ b/net/sunrpc/auth_gss/auth_gss.c @@ -727,15 +727,11 @@ gss_create_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags)  	if (!(cred = kzalloc(sizeof(*cred), GFP_KERNEL)))  		goto out_err; -	atomic_set(&cred->gc_count, 1); -	cred->gc_uid = acred->uid; +	rpcauth_init_cred(&cred->gc_base, acred, auth, &gss_credops);  	/*  	 * Note: in order to force a call to call_refresh(), we deliberately  	 * 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;  	return &cred->gc_base; diff --git a/net/sunrpc/auth_unix.c b/net/sunrpc/auth_unix.c index 6600c7ad72a..2f1bdb5c86b 100644 --- a/net/sunrpc/auth_unix.c +++ b/net/sunrpc/auth_unix.c @@ -20,9 +20,6 @@ struct unx_cred {  	gid_t			uc_gids[NFS_NGROUPS];  };  #define uc_uid			uc_base.cr_uid -#define uc_count		uc_base.cr_count -#define uc_flags		uc_base.cr_flags -#define uc_expire		uc_base.cr_expire  #define UNX_CRED_EXPIRE		(60 * HZ) @@ -74,8 +71,8 @@ unx_create_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags)  	if (!(cred = kmalloc(sizeof(*cred), GFP_KERNEL)))  		return ERR_PTR(-ENOMEM); -	atomic_set(&cred->uc_count, 1); -	cred->uc_flags = RPCAUTH_CRED_UPTODATE; +	rpcauth_init_cred(&cred->uc_base, acred, auth, &unix_credops); +	cred->uc_base.cr_flags = RPCAUTH_CRED_UPTODATE;  	if (flags & RPCAUTH_LOOKUP_ROOTCREDS) {  		cred->uc_uid = 0;  		cred->uc_gid = 0; @@ -85,15 +82,12 @@ unx_create_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags)  		if (groups > NFS_NGROUPS)  			groups = NFS_NGROUPS; -		cred->uc_uid = acred->uid;  		cred->uc_gid = acred->gid;  		for (i = 0; i < groups; i++)  			cred->uc_gids[i] = GROUP_AT(acred->group_info, i);  		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;  }  |