Commit 1a80810f authored by NeilBrown's avatar NeilBrown Committed by Anna Schumaker
Browse files

SUNRPC: remove machine_cred field from struct auth_cred



The cred is a machine_cred iff ->principal is set, so there is no
need for the extra flag.

There is one case which deserves some
explanation. nfs4_root_machine_cred() calls rpc_lookup_machine_cred()
with a NULL principal name which results in not getting a machine
credential, but getting a root credential instead.
This appears to be what is expected of the caller, and is
clearly the result provided by both auth_unix and auth_gss
which already ignore the flag.

Signed-off-by: default avatarNeilBrown <neilb@suse.com>
Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
parent 8276c902
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -46,9 +46,8 @@ enum {

struct auth_cred {
	const struct cred *cred;
	const char *principal;
	const char *principal;	/* If present, this is a machine credential */
	unsigned long ac_flags;
	unsigned char machine_cred : 1;
};

/*
+6 −6
Original line number Diff line number Diff line
@@ -50,12 +50,13 @@ EXPORT_SYMBOL_GPL(rpc_lookup_cred_nonblock);

/*
 * Public call interface for looking up machine creds.
 * Note that if service_name is NULL, we actually look up
 * "root" credential.
 */
struct rpc_cred *rpc_lookup_machine_cred(const char *service_name)
{
	struct auth_cred acred = {
		.principal = service_name,
		.machine_cred = 1,
		.cred = get_task_cred(&init_task),
	};
	struct rpc_cred *ret;
@@ -108,11 +109,10 @@ generic_create_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags, g

	gcred->acred.cred = gcred->gc_base.cr_cred;
	gcred->acred.ac_flags = 0;
	gcred->acred.machine_cred = acred->machine_cred;
	gcred->acred.principal = acred->principal;

	dprintk("RPC:       allocated %s cred %p for uid %d gid %d\n",
			gcred->acred.machine_cred ? "machine" : "generic",
			gcred->acred.principal ? "machine" : "generic",
			gcred,
			from_kuid(&init_user_ns, acred->cred->fsuid),
			from_kgid(&init_user_ns, acred->cred->fsgid));
@@ -145,7 +145,7 @@ generic_destroy_cred(struct rpc_cred *cred)
static int
machine_cred_match(struct auth_cred *acred, struct generic_cred *gcred, int flags)
{
	if (!gcred->acred.machine_cred ||
	if (!gcred->acred.principal ||
	    gcred->acred.principal != acred->principal ||
	    !uid_eq(gcred->acred.cred->fsuid, acred->cred->fsuid) ||
	    !gid_eq(gcred->acred.cred->fsgid, acred->cred->fsgid))
@@ -163,12 +163,12 @@ generic_match(struct auth_cred *acred, struct rpc_cred *cred, int flags)
	int i;
	struct group_info *a, *g;

	if (acred->machine_cred)
	if (acred->principal)
		return machine_cred_match(acred, gcred, flags);

	if (!uid_eq(gcred->acred.cred->fsuid, acred->cred->fsuid) ||
	    !gid_eq(gcred->acred.cred->fsgid, acred->cred->fsgid) ||
	    gcred->acred.machine_cred != 0)
	    gcred->acred.principal != NULL)
		goto out_nomatch;

	a = acred->cred->group_info;
+1 −4
Original line number Diff line number Diff line
@@ -1395,8 +1395,6 @@ gss_create_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags, gfp_t
	 */
	cred->gc_base.cr_flags = 1UL << RPCAUTH_CRED_NEW;
	cred->gc_service = gss_auth->service;
	cred->gc_principal = NULL;
	if (acred->machine_cred)
	cred->gc_principal = acred->principal;
	kref_get(&gss_auth->kref);
	return &cred->gc_base;
@@ -1610,7 +1608,6 @@ static int gss_renew_cred(struct rpc_task *task)
	struct auth_cred acred = {
		.cred = oldcred->cr_cred,
		.principal = gss_cred->gc_principal,
		.machine_cred = (gss_cred->gc_principal != NULL ? 1 : 0),
	};
	struct rpc_cred *new;