aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOlga Kornievskaia <aglo@citi.umich.edu>2008-12-23 16:19:00 -0500
committerTrond Myklebust <Trond.Myklebust@netapp.com>2008-12-23 16:19:00 -0500
commit61054b14d545e257b9415d5ca0cd5f43762b4d0c (patch)
tree7f648cf35a3b79aa1555f21050f11d415b93f381
parent945b34a7725a5f0741de7775132aafc58bfecfbb (diff)
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>
-rw-r--r--fs/nfsd/nfs4callback.c3
-rw-r--r--fs/nfsd/nfs4state.c1
-rw-r--r--include/linux/nfsd/state.h1
-rw-r--r--net/sunrpc/rpc_pipe.c5
4 files changed, 9 insertions, 1 deletions
diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c
index 3ca141782145..6d7d8c02c197 100644
--- a/fs/nfsd/nfs4callback.c
+++ b/fs/nfsd/nfs4callback.c
@@ -358,6 +358,7 @@ static struct rpc_program cb_program = {
358 .nrvers = ARRAY_SIZE(nfs_cb_version), 358 .nrvers = ARRAY_SIZE(nfs_cb_version),
359 .version = nfs_cb_version, 359 .version = nfs_cb_version,
360 .stats = &cb_stats, 360 .stats = &cb_stats,
361 .pipe_dir_name = "/nfsd4_cb",
361}; 362};
362 363
363/* Reference counting, callback cleanup, etc., all look racy as heck. 364/* Reference counting, callback cleanup, etc., all look racy as heck.
@@ -382,7 +383,7 @@ static int do_probe_callback(void *data)
382 .program = &cb_program, 383 .program = &cb_program,
383 .prognumber = cb->cb_prog, 384 .prognumber = cb->cb_prog,
384 .version = nfs_cb_version[1]->number, 385 .version = nfs_cb_version[1]->number,
385 .authflavor = RPC_AUTH_UNIX, /* XXX: need AUTH_GSS... */ 386 .authflavor = clp->cl_flavor,
386 .flags = (RPC_CLNT_CREATE_NOPING | RPC_CLNT_CREATE_QUIET), 387 .flags = (RPC_CLNT_CREATE_NOPING | RPC_CLNT_CREATE_QUIET),
387 .client_name = clp->cl_principal, 388 .client_name = clp->cl_principal,
388 }; 389 };
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index f3b9a8d064f3..07db31568ac9 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -786,6 +786,7 @@ nfsd4_setclientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
786 } 786 }
787 copy_verf(new, &clverifier); 787 copy_verf(new, &clverifier);
788 new->cl_addr = sin->sin_addr.s_addr; 788 new->cl_addr = sin->sin_addr.s_addr;
789 new->cl_flavor = rqstp->rq_flavor;
789 princ = svc_gss_principal(rqstp); 790 princ = svc_gss_principal(rqstp);
790 if (princ) { 791 if (princ) {
791 new->cl_principal = kstrdup(princ, GFP_KERNEL); 792 new->cl_principal = kstrdup(princ, GFP_KERNEL);
diff --git a/include/linux/nfsd/state.h b/include/linux/nfsd/state.h
index ce7cbf4b7c93..128298c0362d 100644
--- a/include/linux/nfsd/state.h
+++ b/include/linux/nfsd/state.h
@@ -124,6 +124,7 @@ struct nfs4_client {
124 nfs4_verifier cl_verifier; /* generated by client */ 124 nfs4_verifier cl_verifier; /* generated by client */
125 time_t cl_time; /* time of last lease renewal */ 125 time_t cl_time; /* time of last lease renewal */
126 __be32 cl_addr; /* client ipaddress */ 126 __be32 cl_addr; /* client ipaddress */
127 u32 cl_flavor; /* setclientid pseudoflavor */
127 char *cl_principal; /* setclientid principal name */ 128 char *cl_principal; /* setclientid principal name */
128 struct svc_cred cl_cred; /* setclientid principal */ 129 struct svc_cred cl_cred; /* setclientid principal */
129 clientid_t cl_clientid; /* generated by server */ 130 clientid_t cl_clientid; /* generated by server */
diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c
index 3105efbb182d..192453248870 100644
--- a/net/sunrpc/rpc_pipe.c
+++ b/net/sunrpc/rpc_pipe.c
@@ -407,6 +407,7 @@ enum {
407 RPCAUTH_nfs, 407 RPCAUTH_nfs,
408 RPCAUTH_portmap, 408 RPCAUTH_portmap,
409 RPCAUTH_statd, 409 RPCAUTH_statd,
410 RPCAUTH_nfsd4_cb,
410 RPCAUTH_RootEOF 411 RPCAUTH_RootEOF
411}; 412};
412 413
@@ -440,6 +441,10 @@ static struct rpc_filelist files[] = {
440 .name = "statd", 441 .name = "statd",
441 .mode = S_IFDIR | S_IRUGO | S_IXUGO, 442 .mode = S_IFDIR | S_IRUGO | S_IXUGO,
442 }, 443 },
444 [RPCAUTH_nfsd4_cb] = {
445 .name = "nfsd4_cb",
446 .mode = S_IFDIR | S_IRUGO | S_IXUGO,
447 },
443}; 448};
444 449
445enum { 450enum {