|
@@ -148,59 +148,6 @@ rpc_authflavor_t nfs_find_best_sec(struct nfs4_secinfo_flavors *flavors)
|
|
|
return pseudoflavor;
|
|
|
}
|
|
|
|
|
|
-static int nfs_negotiate_security(const struct dentry *parent,
|
|
|
- const struct dentry *dentry,
|
|
|
- rpc_authflavor_t *flavor)
|
|
|
-{
|
|
|
- struct page *page;
|
|
|
- struct nfs4_secinfo_flavors *flavors;
|
|
|
- int (*secinfo)(struct inode *, const struct qstr *, struct nfs4_secinfo_flavors *);
|
|
|
- int ret = -EPERM;
|
|
|
-
|
|
|
- secinfo = NFS_PROTO(parent->d_inode)->secinfo;
|
|
|
- if (secinfo != NULL) {
|
|
|
- page = alloc_page(GFP_KERNEL);
|
|
|
- if (!page) {
|
|
|
- ret = -ENOMEM;
|
|
|
- goto out;
|
|
|
- }
|
|
|
- flavors = page_address(page);
|
|
|
- ret = secinfo(parent->d_inode, &dentry->d_name, flavors);
|
|
|
- *flavor = nfs_find_best_sec(flavors);
|
|
|
- put_page(page);
|
|
|
- }
|
|
|
-
|
|
|
-out:
|
|
|
- return ret;
|
|
|
-}
|
|
|
-
|
|
|
-static int nfs_lookup_with_sec(struct nfs_server *server, struct dentry *parent,
|
|
|
- struct dentry *dentry, struct path *path,
|
|
|
- struct nfs_fh *fh, struct nfs_fattr *fattr,
|
|
|
- rpc_authflavor_t *flavor)
|
|
|
-{
|
|
|
- struct rpc_clnt *clone;
|
|
|
- struct rpc_auth *auth;
|
|
|
- int err;
|
|
|
-
|
|
|
- err = nfs_negotiate_security(parent, path->dentry, flavor);
|
|
|
- if (err < 0)
|
|
|
- goto out;
|
|
|
- clone = rpc_clone_client(server->client);
|
|
|
- auth = rpcauth_create(*flavor, clone);
|
|
|
- if (!auth) {
|
|
|
- err = -EIO;
|
|
|
- goto out_shutdown;
|
|
|
- }
|
|
|
- err = server->nfs_client->rpc_ops->lookup(clone, parent->d_inode,
|
|
|
- &path->dentry->d_name,
|
|
|
- fh, fattr);
|
|
|
-out_shutdown:
|
|
|
- rpc_shutdown_client(clone);
|
|
|
-out:
|
|
|
- return err;
|
|
|
-}
|
|
|
-
|
|
|
static struct rpc_clnt *nfs_lookup_mountpoint(struct inode *dir,
|
|
|
struct qstr *name,
|
|
|
struct nfs_fh *fh,
|
|
@@ -217,15 +164,6 @@ static struct rpc_clnt *nfs_lookup_mountpoint(struct inode *dir,
|
|
|
return rpc_clone_client(NFS_SERVER(dir)->client);
|
|
|
}
|
|
|
#else /* CONFIG_NFS_V4 */
|
|
|
-static inline int nfs_lookup_with_sec(struct nfs_server *server,
|
|
|
- struct dentry *parent, struct dentry *dentry,
|
|
|
- struct path *path, struct nfs_fh *fh,
|
|
|
- struct nfs_fattr *fattr,
|
|
|
- rpc_authflavor_t *flavor)
|
|
|
-{
|
|
|
- return -EPERM;
|
|
|
-}
|
|
|
-
|
|
|
static inline struct rpc_clnt *nfs_lookup_mountpoint(struct inode *dir,
|
|
|
struct qstr *name,
|
|
|
struct nfs_fh *fh,
|