NFS/NFSD/SUNRPC: replace generic creds with 'struct cred'.
SUNRPC has two sorts of credentials, both of which appear as "struct rpc_cred". There are "generic credentials" which are supplied by clients such as NFS and passed in 'struct rpc_message' to indicate which user should be used to authorize the request, and there are low-level credentials such as AUTH_NULL, AUTH_UNIX, AUTH_GSS which describe the credential to be sent over the wires. This patch replaces all the generic credentials by 'struct cred' pointers - the credential structure used throughout Linux. For machine credentials, there is a special 'struct cred *' pointer which is statically allocated and recognized where needed as having a special meaning. A look-up of a low-level cred will map this to a machine credential. Signed-off-by: NeilBrown <neilb@suse.com> Acked-by: J. Bruce Fields <bfields@redhat.com> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
This commit is contained in:

committed by
Anna Schumaker

parent
684f39b4cf
commit
a52458b48a
@@ -31,7 +31,7 @@
|
||||
static void
|
||||
nfs_free_unlinkdata(struct nfs_unlinkdata *data)
|
||||
{
|
||||
put_rpccred(data->cred);
|
||||
put_cred(data->cred);
|
||||
kfree(data->args.name.name);
|
||||
kfree(data);
|
||||
}
|
||||
@@ -177,11 +177,7 @@ nfs_async_unlink(struct dentry *dentry, const struct qstr *name)
|
||||
goto out_free;
|
||||
data->args.name.len = name->len;
|
||||
|
||||
data->cred = rpc_lookup_cred();
|
||||
if (IS_ERR(data->cred)) {
|
||||
status = PTR_ERR(data->cred);
|
||||
goto out_free_name;
|
||||
}
|
||||
data->cred = get_current_cred();
|
||||
data->res.dir_attr = &data->dir_attr;
|
||||
init_waitqueue_head(&data->wq);
|
||||
|
||||
@@ -202,8 +198,7 @@ nfs_async_unlink(struct dentry *dentry, const struct qstr *name)
|
||||
return 0;
|
||||
out_unlock:
|
||||
spin_unlock(&dentry->d_lock);
|
||||
put_rpccred(data->cred);
|
||||
out_free_name:
|
||||
put_cred(data->cred);
|
||||
kfree(data->args.name.name);
|
||||
out_free:
|
||||
kfree(data);
|
||||
@@ -307,7 +302,7 @@ static void nfs_async_rename_release(void *calldata)
|
||||
iput(data->old_dir);
|
||||
iput(data->new_dir);
|
||||
nfs_sb_deactive(sb);
|
||||
put_rpccred(data->cred);
|
||||
put_cred(data->cred);
|
||||
kfree(data);
|
||||
}
|
||||
|
||||
@@ -352,7 +347,7 @@ nfs_async_rename(struct inode *old_dir, struct inode *new_dir,
|
||||
return ERR_PTR(-ENOMEM);
|
||||
task_setup_data.callback_data = data;
|
||||
|
||||
data->cred = rpc_lookup_cred();
|
||||
data->cred = get_current_cred();
|
||||
if (IS_ERR(data->cred)) {
|
||||
struct rpc_task *task = ERR_CAST(data->cred);
|
||||
kfree(data);
|
||||
|
Reference in New Issue
Block a user