mountd: regression in crossmounts
authorSteve Dickson <steved@redhat.com>
Sat, 23 Mar 2013 14:30:17 +0000 (10:30 -0400)
committerSteve Dickson <steved@redhat.com>
Mon, 25 Mar 2013 14:09:11 +0000 (10:09 -0400)
commit 8e2fb3fc cause a regression in mount export
that are on different local file system.
Exports like (all on different filesystems)

/home *(rw,fsid=0,crossmnt)
/home/fs1 *(rw,crossmnt)
/home/fs1/fs2/fs3 *(rw,nohide)

and then a mount of the root 'mount /home /mnt'
would end up mounting /home/fs1/fs2/fs3 not /home

Reverting the logic of commit 8e2fb3fc until
a better solution can be found for the original
problem.

Signed-off-by: Steve Dickson <steved@redhat.com>
utils/mountd/cache.c

index c8aa46f..978698d 100644 (file)
@@ -371,8 +371,11 @@ export_matches(nfs_export *exp, char *dom, char *path, struct addrinfo *ai)
 static bool subexport(struct exportent *e1, struct exportent *e2)
 {
        char *p1 = e1->e_path, *p2 = e2->e_path;
+       size_t l2 = strlen(p2);
+
        return e2->e_flags & NFSEXP_CROSSMOUNT
-               && is_subdirectory(p1, p2);
+               && strncmp(p1, p2, l2) == 0
+               && p1[l2] == '/';
 }
 
 struct parsed_fsid {