Skip to content

Commit

Permalink
knfsd: fix callback rpc cred
Browse files Browse the repository at this point in the history
It doesn't make sense to make the callback with credentials that the
client made the setclientid with.  Instead the spec requires that the
callback occur with the credentials the client authenticated *to*.
It probably doesn't matter what we use for auth_unix, and some more
infrastructure will be needed for auth_gss, so let's just remove the
cred lookup for now.

Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Acked-by:  Neil Brown <neilb@suse.de>
  • Loading branch information
J. Bruce Fields authored and J. Bruce Fields committed Oct 9, 2007
1 parent e8ff2a8 commit dd4877b
Showing 1 changed file with 0 additions and 33 deletions.
33 changes: 0 additions & 33 deletions fs/nfsd/nfs4callback.c
Original file line number Diff line number Diff line change
Expand Up @@ -344,28 +344,6 @@ static struct rpc_version * nfs_cb_version[] = {
&nfs_cb_version4,
};

/*
* Use the SETCLIENTID credential
*/
static struct rpc_cred *
nfsd4_lookupcred(struct nfs4_client *clp, int taskflags)
{
struct auth_cred acred;
struct rpc_clnt *clnt = clp->cl_callback.cb_client;
struct rpc_cred *ret;

get_group_info(clp->cl_cred.cr_group_info);
acred.uid = clp->cl_cred.cr_uid;
acred.gid = clp->cl_cred.cr_gid;
acred.group_info = clp->cl_cred.cr_group_info;

dprintk("NFSD: looking up %s cred\n",
clnt->cl_auth->au_ops->au_name);
ret = rpcauth_lookup_credcache(clnt->cl_auth, &acred, taskflags);
put_group_info(clp->cl_cred.cr_group_info);
return ret;
}

/* Reference counting, callback cleanup, etc., all look racy as heck.
* And why is cb_set an atomic? */

Expand All @@ -379,18 +357,13 @@ static int do_probe_callback(void *data)
};
int status;

msg.rpc_cred = nfsd4_lookupcred(clp, 0);
if (IS_ERR(msg.rpc_cred))
goto out;
status = rpc_call_sync(cb->cb_client, &msg, RPC_TASK_SOFT);
put_rpccred(msg.rpc_cred);

if (status) {
rpc_shutdown_client(cb->cb_client);
cb->cb_client = NULL;
} else
atomic_set(&cb->cb_set, 1);
out:
put_nfs4_client(clp);
return 0;
}
Expand Down Expand Up @@ -488,10 +461,6 @@ nfsd4_cb_recall(struct nfs4_delegation *dp)
if ((!atomic_read(&clp->cl_callback.cb_set)) || !clnt)
return;

msg.rpc_cred = nfsd4_lookupcred(clp, 0);
if (IS_ERR(msg.rpc_cred))
goto out;

cbr->cbr_trunc = 0; /* XXX need to implement truncate optimization */
cbr->cbr_dp = dp;

Expand All @@ -512,8 +481,6 @@ nfsd4_cb_recall(struct nfs4_delegation *dp)
status = rpc_call_sync(clnt, &msg, RPC_TASK_SOFT);
}
out_put_cred:
put_rpccred(msg.rpc_cred);
out:
if (status == -EIO)
atomic_set(&clp->cl_callback.cb_set, 0);
/* Success or failure, now we're either waiting for lease expiration
Expand Down

0 comments on commit dd4877b

Please sign in to comment.