knfsd: fix callback rpc cred
authorJ. Bruce Fields <bfields@fieldses.org>
Tue, 24 Oct 2006 22:33:17 +0000 (18:33 -0400)
committerJ. Bruce Fields <bfields@citi.umich.edu>
Tue, 9 Oct 2007 22:31:57 +0000 (18:31 -0400)
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>
fs/nfsd/nfs4callback.c

index c17a520..c1cb7e0 100644 (file)
@@ -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? */
 
@@ -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;
 }
@@ -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;
 
@@ -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