nfsd: support callbacks with gss flavors
This patch adds server-side support for callbacks other than AUTH_SYS. Signed-off-by: Olga Kornievskaia <aglo@citi.umich.edu> Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
945b34a772
commit
61054b14d5
4 changed files with 9 additions and 1 deletions
|
@ -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,
|
||||||
};
|
};
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in a new issue