From ebe2826ca571a3959c3b5c8e29686c621f2775cf Mon Sep 17 00:00:00 2001 From: Steve Dickson Date: Sat, 23 Mar 2013 10:30:17 -0400 Subject: [PATCH] mountd: regression in crossmounts 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 --- utils/mountd/cache.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c index c8aa46f..978698d 100644 --- a/utils/mountd/cache.c +++ b/utils/mountd/cache.c @@ -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 { -- 2.39.2