aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorNeil Brown <neilb@cse.unsw.edu.au>2005-01-04 05:48:08 -0800
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-01-04 05:48:08 -0800
commitfb6f151075c112daf30a2dcccd91999bff5dd034 (patch)
tree01106d83fab5f2b2e19a40b9c2983f04dafa3dac /fs
parenta733375f250c756d166c92c922cf0c1dab23122c (diff)
downloadhistory-fb6f151075c112daf30a2dcccd91999bff5dd034.tar.gz
[PATCH] knfsd: check the callback netid in gen_callback.
since we only support tcp, don't save the netinfo. Signed-off-by: Andy Adamson <andros@citi.umich.edu> Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs')
-rw-r--r--fs/nfsd/nfs4state.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index ebecbd97df719a..8cd8199493ecc6 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -420,17 +420,24 @@ gen_callback(struct nfs4_client *clp, struct nfsd4_setclientid *se)
{
struct nfs4_callback *cb = &clp->cl_callback;
+ /* Currently, we only support tcp for the callback channel */
+ if ((se->se_callback_netid_len != 3) || memcmp((char *)se->se_callback_netid_val, "tcp", 3))
+ goto out_err;
+
if ( !(parse_ipv4(se->se_callback_addr_len, se->se_callback_addr_val,
- &cb->cb_addr, &cb->cb_port))) {
- printk(KERN_INFO "NFSD: BAD callback address. client will not receive delegations\n");
- cb->cb_parsed = 0;
- return;
- }
- cb->cb_netid.len = se->se_callback_netid_len;
- cb->cb_netid.data = se->se_callback_netid_val;
+ &cb->cb_addr, &cb->cb_port)))
+ goto out_err;
cb->cb_prog = se->se_callback_prog;
cb->cb_ident = se->se_callback_ident;
cb->cb_parsed = 1;
+ return;
+out_err:
+ printk(KERN_INFO "NFSD: this client (clientid %08x/%08x) "
+ "will not receive delegations\n",
+ clp->cl_clientid.cl_boot, clp->cl_clientid.cl_id);
+
+ cb->cb_parsed = 0;
+ return;
}
/*