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

Commit 61054b14 authored by Olga Kornievskaia's avatar Olga Kornievskaia Committed by Trond Myklebust
Browse files

nfsd: support callbacks with gss flavors



This patch adds server-side support for callbacks other than AUTH_SYS.

Signed-off-by: default avatarOlga Kornievskaia <aglo@citi.umich.edu>
Signed-off-by: default avatarJ. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 945b34a7
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -358,6 +358,7 @@ static struct rpc_program cb_program = {
		.nrvers		= ARRAY_SIZE(nfs_cb_version),
		.nrvers		= ARRAY_SIZE(nfs_cb_version),
		.version	= nfs_cb_version,
		.version	= nfs_cb_version,
		.stats		= &cb_stats,
		.stats		= &cb_stats,
		.pipe_dir_name  = "/nfsd4_cb",
};
};


/* Reference counting, callback cleanup, etc., all look racy as heck.
/* Reference counting, callback cleanup, etc., all look racy as heck.
@@ -382,7 +383,7 @@ static int do_probe_callback(void *data)
		.program	= &cb_program,
		.program	= &cb_program,
		.prognumber	= cb->cb_prog,
		.prognumber	= cb->cb_prog,
		.version	= nfs_cb_version[1]->number,
		.version	= nfs_cb_version[1]->number,
		.authflavor	= RPC_AUTH_UNIX, /* XXX: need AUTH_GSS... */
		.authflavor	= clp->cl_flavor,
		.flags		= (RPC_CLNT_CREATE_NOPING | RPC_CLNT_CREATE_QUIET),
		.flags		= (RPC_CLNT_CREATE_NOPING | RPC_CLNT_CREATE_QUIET),
		.client_name    = clp->cl_principal,
		.client_name    = clp->cl_principal,
	};
	};
+1 −0
Original line number Original line Diff line number Diff line
@@ -786,6 +786,7 @@ nfsd4_setclientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
	}
	}
	copy_verf(new, &clverifier);
	copy_verf(new, &clverifier);
	new->cl_addr = sin->sin_addr.s_addr;
	new->cl_addr = sin->sin_addr.s_addr;
	new->cl_flavor = rqstp->rq_flavor;
	princ = svc_gss_principal(rqstp);
	princ = svc_gss_principal(rqstp);
	if (princ) {
	if (princ) {
		new->cl_principal = kstrdup(princ, GFP_KERNEL);
		new->cl_principal = kstrdup(princ, GFP_KERNEL);
+1 −0
Original line number Original line Diff line number Diff line
@@ -124,6 +124,7 @@ struct nfs4_client {
	nfs4_verifier		cl_verifier; 	/* generated by client */
	nfs4_verifier		cl_verifier; 	/* generated by client */
	time_t                  cl_time;        /* time of last lease renewal */
	time_t                  cl_time;        /* time of last lease renewal */
	__be32			cl_addr; 	/* client ipaddress */
	__be32			cl_addr; 	/* client ipaddress */
	u32			cl_flavor;	/* setclientid pseudoflavor */
	char			*cl_principal;	/* setclientid principal name */
	char			*cl_principal;	/* setclientid principal name */
	struct svc_cred		cl_cred; 	/* setclientid principal */
	struct svc_cred		cl_cred; 	/* setclientid principal */
	clientid_t		cl_clientid;	/* generated by server */
	clientid_t		cl_clientid;	/* generated by server */
+5 −0
Original line number Original line Diff line number Diff line
@@ -407,6 +407,7 @@ enum {
	RPCAUTH_nfs,
	RPCAUTH_nfs,
	RPCAUTH_portmap,
	RPCAUTH_portmap,
	RPCAUTH_statd,
	RPCAUTH_statd,
	RPCAUTH_nfsd4_cb,
	RPCAUTH_RootEOF
	RPCAUTH_RootEOF
};
};


@@ -440,6 +441,10 @@ static struct rpc_filelist files[] = {
		.name = "statd",
		.name = "statd",
		.mode = S_IFDIR | S_IRUGO | S_IXUGO,
		.mode = S_IFDIR | S_IRUGO | S_IXUGO,
	},
	},
	[RPCAUTH_nfsd4_cb] = {
		.name = "nfsd4_cb",
		.mode = S_IFDIR | S_IRUGO | S_IXUGO,
	},
};
};


enum {
enum {