浏览代码

knfsd: fix callback rpc cred

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>
J. Bruce Fields 18 年之前
父节点
当前提交
dd4877bfb6
共有 1 个文件被更改,包括 0 次插入33 次删除
  1. 0 33
      fs/nfsd/nfs4callback.c

+ 0 - 33
fs/nfsd/nfs4callback.c

@@ -344,28 +344,6 @@ static struct rpc_version *	nfs_cb_version[] = {
 	&nfs_cb_version4,
 	&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.
 /* Reference counting, callback cleanup, etc., all look racy as heck.
  * And why is cb_set an atomic? */
  * And why is cb_set an atomic? */
 
 
@@ -379,18 +357,13 @@ static int do_probe_callback(void *data)
 	};
 	};
 	int status;
 	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);
 	status = rpc_call_sync(cb->cb_client, &msg, RPC_TASK_SOFT);
-	put_rpccred(msg.rpc_cred);
 
 
 	if (status) {
 	if (status) {
 		rpc_shutdown_client(cb->cb_client);
 		rpc_shutdown_client(cb->cb_client);
 		cb->cb_client = NULL;
 		cb->cb_client = NULL;
 	} else
 	} else
 		atomic_set(&cb->cb_set, 1);
 		atomic_set(&cb->cb_set, 1);
-out:
 	put_nfs4_client(clp);
 	put_nfs4_client(clp);
 	return 0;
 	return 0;
 }
 }
@@ -488,10 +461,6 @@ nfsd4_cb_recall(struct nfs4_delegation *dp)
 	if ((!atomic_read(&clp->cl_callback.cb_set)) || !clnt)
 	if ((!atomic_read(&clp->cl_callback.cb_set)) || !clnt)
 		return;
 		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_trunc = 0; /* XXX need to implement truncate optimization */
 	cbr->cbr_dp = dp;
 	cbr->cbr_dp = dp;
 
 
@@ -512,8 +481,6 @@ nfsd4_cb_recall(struct nfs4_delegation *dp)
 		status = rpc_call_sync(clnt, &msg, RPC_TASK_SOFT);
 		status = rpc_call_sync(clnt, &msg, RPC_TASK_SOFT);
 	}
 	}
 out_put_cred:
 out_put_cred:
-	put_rpccred(msg.rpc_cred);
-out:
 	if (status == -EIO)
 	if (status == -EIO)
 		atomic_set(&clp->cl_callback.cb_set, 0);
 		atomic_set(&clp->cl_callback.cb_set, 0);
 	/* Success or failure, now we're either waiting for lease expiration
 	/* Success or failure, now we're either waiting for lease expiration