diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2007-01-13 02:28:11 -0500 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2007-02-03 15:35:05 -0800 |
commit | faebf4e2bb0efad9dda396ea13d5c6ad15d7d7fb (patch) | |
tree | 7e0d0af02aa188b508af18c59dddbec81ecc5da7 /fs/nfs/getroot.c | |
parent | c79ba787c11e767ffaf8d723923afda99ba6c63c (diff) | |
download | kernel_samsung_smdk4412-faebf4e2bb0efad9dda396ea13d5c6ad15d7d7fb.tar.gz kernel_samsung_smdk4412-faebf4e2bb0efad9dda396ea13d5c6ad15d7d7fb.tar.bz2 kernel_samsung_smdk4412-faebf4e2bb0efad9dda396ea13d5c6ad15d7d7fb.zip |
NFSv4: Don't require that NFSv4 mount paths begin with '/'
Addresses the regression noted in
http://bugzilla.linux-nfs.org/show_bug.cgi?id=134
Also mark a couple of other regressions as requiring fixing.
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/getroot.c')
-rw-r--r-- | fs/nfs/getroot.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/fs/nfs/getroot.c b/fs/nfs/getroot.c index 8391bd7a83c..6ef268f7c30 100644 --- a/fs/nfs/getroot.c +++ b/fs/nfs/getroot.c @@ -135,17 +135,15 @@ int nfs4_path_walk(struct nfs_server *server, struct nfs_fh lastfh; struct qstr name; int ret; - //int referral_count = 0; dprintk("--> nfs4_path_walk(,,%s)\n", path); fsinfo.fattr = &fattr; nfs_fattr_init(&fattr); - if (*path++ != '/') { - dprintk("nfs4_get_root: Path does not begin with a slash\n"); - return -EINVAL; - } + /* Eat leading slashes */ + while (*path == '/') + path++; /* Start by getting the root filehandle from the server */ ret = server->nfs_client->rpc_ops->getroot(server, mntfh, &fsinfo); @@ -160,6 +158,7 @@ int nfs4_path_walk(struct nfs_server *server, return -ENOTDIR; } + /* FIXME: It is quite valid for the server to return a referral here */ if (fattr.valid & NFS_ATTR_FATTR_V4_REFERRAL) { printk(KERN_ERR "nfs4_get_root:" " getroot obtained referral\n"); @@ -187,6 +186,7 @@ eat_dot_dir: goto eat_dot_dir; } + /* FIXME: Why shouldn't the user be able to use ".." in the path? */ if (path[0] == '.' && path[1] == '.' && (path[2] == '/' || !path[2]) ) { printk(KERN_ERR "nfs4_get_root:" @@ -212,6 +212,7 @@ eat_dot_dir: return -ENOTDIR; } + /* FIXME: Referrals are quite valid here too */ if (fattr.valid & NFS_ATTR_FATTR_V4_REFERRAL) { printk(KERN_ERR "nfs4_get_root:" " lookupfh obtained referral\n"); |