mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-26 05:34:13 +08:00
SUNRPC: Clean up rpc credential initialisation
Add a helper rpc_cred_init() Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
f1c0a86150
commit
5fe4755e25
@ -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 *);
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user