summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fs/nfsd/nfs4state.c21
-rw-r--r--include/linux/nfsd/state.h1
2 files changed, 14 insertions, 8 deletions
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index ebecbd97df71..8cd8199493ec 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;
}
/*
diff --git a/include/linux/nfsd/state.h b/include/linux/nfsd/state.h
index 5e6c2ab760fd..c20635cc99a3 100644
--- a/include/linux/nfsd/state.h
+++ b/include/linux/nfsd/state.h
@@ -75,7 +75,6 @@ struct nfs4_callback {
unsigned short cb_port;
u32 cb_prog;
u32 cb_ident;
- struct xdr_netobj cb_netid;
/* RPC client info */
u32 cb_set; /* successful CB_NULL call */
struct rpc_program cb_program;