Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5fe4755e authored by Trond Myklebust's avatar Trond Myklebust
Browse files

SUNRPC: Clean up rpc credential initialisation



Add a helper rpc_cred_init()

Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent f1c0a861
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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 *);
+0 −5
Original line number Diff line number Diff line
@@ -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 */
+18 −6
Original line number Diff line number Diff line
@@ -264,12 +264,8 @@ rpcauth_lookup_credcache(struct rpc_auth *auth, struct auth_cred * acred,

	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;
	} else if ((cred->cr_flags & RPCAUTH_CRED_NEW)
			&& cred->cr_ops->cr_init != NULL
@@ -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)
{
+1 −5
Original line number Diff line number Diff line
@@ -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;
+2 −8
Original line number Diff line number Diff line
@@ -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;
}